Diskuze: komunikace PC-Arduino
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Absolvováno
Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500

Člen

Petr Adámek:1.4.2020 13:38
Kód z Visual studia
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace WindowsFormsApplication21
{
public partial class Form1 : Form
{
bool isConnected = false;
String[] ports;
SerialPort port;
int hodnota;
string hodnotaString;
string odesli;
string adresaODESLAT = "H1 ";
string adresaNACIST = "h1 ";
string nacist;
public Form1()
{
InitializeComponent();
disableControls();
getAvailableComPorts();
foreach (string port in ports)
{
comboBox1.Items.Add(port);
Console.WriteLine(port);
if (ports[0] != null)
{
comboBox1.SelectedItem = ports[0];
}
}
}
private void button2_Click(object sender, EventArgs e)
{
if (!isConnected)
{
connectToArduino();
}
else
{
disconnectFromArduino();
}
}
void getAvailableComPorts()
{
ports = SerialPort.GetPortNames();
}
private void connectToArduino()
{
isConnected = true;
string selectedPort = comboBox1.GetItemText(comboBox1.SelectedItem);
port = new SerialPort(selectedPort, 9600, Parity.None, 8, StopBits.One);
port.Open();
button2.Text = "odpojit";
enableControls();
}
private void disconnectFromArduino()
{
isConnected = false;
port.Close();
button2.Text = "pripojit";
disableControls();
resetDefaults();
}
private void enableControls()
{
comboBox1.Enabled = false;
button1.Enabled = true;
button3.Enabled = true;
numericUpDown1.Enabled = true;
}
private void disableControls()
{
comboBox1.Enabled = true;
button1.Enabled = false;
button3.Enabled = false;
numericUpDown1.Enabled = false;
}
private void resetDefaults()
{
label1.Text = "";
}
private void button1_Click(object sender, EventArgs e)
{
hodnota = Convert.ToInt32(numericUpDown1.Value);
hodnotaString = Convert.ToString(hodnota);
odesli = adresaODESLAT + hodnotaString;
port.WriteLine(odesli);
}
private void button3_Click(object sender, EventArgs e)
{
port.WriteLine(adresaNACIST);
nacist = port.ReadLine();
label1.Text = nacist;
}
private void comboBox1_Click(object sender, EventArgs e)
{
comboBox1.Items.Clear();
ports = SerialPort.GetPortNames();
//comboBox1.Items.Clear();
//getAvailableComPorts();
//nactiport();
foreach (string port in ports)
{
comboBox1.Items.Add(port);
if (ports[0] != null)
{
comboBox1.SelectedItem = ports[0];
}
}
}
}
}
Kód arduina
#include <EEPROM.h>
int hodnota;
String inputString="";
byte stringComplete;
void writeToEEPROM(int adr, byte data){
byte val = EEPROM.read(adr);
if (data!=val){EEPROM.write(adr, data);}
}
void readSettings(){
hodnota = EEPROM.read(0);
}
void setup() {
Serial.begin(9600);
readSettings();
}
void EEPROMka()
{
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
if (stringComplete){
inputString.trim();
char* data = inputString.c_str();
char* part = strtok(data, " ");
//////////////////////////////////////
//////////////////////////////////////
//Zápis
if (strcmp(part, "H1") == 0){
part = strtok(NULL, " ");
int adr=0;
int val = atoi(part);
writeToEEPROM(adr,val);
/*Serial.print("EEPROM[");
Serial.print(adr,DEC);
Serial.print("]<=");
Serial.println(val,DEC);*/
readSettings();
}
//Zápis
//////////////////////////////////////
//////////////////////////////////////
//ČTENÍ
if (strcmp(data, "h1") == 0)
{
//Serial.print("HODINA1=");
Serial.println(hodnota,DEC);
}
//ČTENÍ
//////////////////////////////////////
//////////////////////////////////////
inputString="";
stringComplete=0;
}
}
void loop() {
EEPROMka();
}
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.
Zobrazeno 2 zpráv z 2.