Es gibt viele Möglichkeiten, einen Befehl vom PC an ein Arduino zu senden. Sandeep Bansil bietet ein gutes Beispiel für das Anschließen und Lesen einer seriellen Schnittstelle.
Unten ist ein Arbeitsbeispiel zum Schreiben in eine serielle Schnittstelle basierend auf dem Status eines Kontrollkästchens in einem Windows-Formular und wie die Anfrage vom PC auf dem Arduino zu verarbeiten.
Dies ist ein ausführliches Beispiel, es gibt sauberere Lösungen, aber das ist klarer.
Im Beispiel wartet das Arduino entweder auf ein 'a' oder 'b' vom PC. Der PC sendet ein "a", wenn ein Kontrollkästchen aktiviert ist und sendet ein "b", wenn ein Kontrollkästchen deaktiviert ist. Das Beispiel nimmt digitalen Pin 4 auf dem Arduino an.
Arduino Code
#define DIGI_PIN_SOMETHING 4
unit8_t commandIn;
void setup()
{
//create a serial connection at 57500 baud
Serial.begin(57600);
}
void loop()
{
//if we have some incomming serial data then..
if (Serial.available() > 0)
{
//read 1 byte from the data sent by the pc
commandIn = serial.read();
//test if the pc sent an 'a' or 'b'
switch (commandIn)
{
case 'a':
{
//we got an 'a' from the pc so turn on the digital pin
digitalWrite(DIGI_PIN_SOMETHING,HIGH);
break;
}
case 'b':
{
//we got an 'b' from the pc so turn off the digital pin
digitalWrite(DIGI_PIN_SOMETHING,LOW);
break;
}
}
}
}
Windows-C#
Dieser Code in Ihrer Form .cs-Datei gespeichert wird. In diesem Beispiel wird davon ausgegangen, dass Sie Formularereignisse für OnOpenForm, OnCloseForm und das Ereignis OnClick an das Kontrollkästchen angehängt haben. Aus jedem der Ereignisse können Sie die entsprechenden Methoden unten nennen ....
using System;
using System.IO.Ports;
class fooForm and normal stuff
{
SerialPort port;
private myFormClose()
{
if (port != null)
port.close();
}
private myFormOpen()
{
port = new SerialPort("COM4", 57600);
try
{
//un-comment this line to cause the arduino to re-boot when the serial connects
//port.DtrEnabled = true;
port.Open();
}
catch (Exception ex)
{
//alert the user that we could not connect to the serial port
}
}
private void myCheckboxClicked()
{
if (myCheckbox.checked)
{
port.Write("a");
}
else
{
port.Write("b");
}
}
}
Tipp:
Wenn Sie eine Nachricht aus dem Arduino dann einen Timer zum Formular hinzufügen mit einem Intervall lesen möchten von 50
oder 100
Millisekunden.
Im OnTick
Ereignis des Timer sollten Sie für Daten überprüfen Sie die folgenden Code:
//this test is used to see if the arduino has sent any data
if (port.BytesToRead > 0)
//On the arduino you can send data like this
Serial.println("Hellow World")
//Then in C# you can use
String myVar = port.ReadLine();
Das Ergebnis wird sein, dass readLine()
myVar
Hello World
enthält.
aus irgendeinem Grund, meine Suche mich nie die Seite bekam. Vielen Dank. – ikathegreat