Ci sono molti modi per inviare un comando dal pc ad un arduino. Sandeep Bansil fornisce un buon esempio di connessione e lettura di una porta seriale.
Di seguito è riportato un esempio funzionante di come scrivere su una porta seriale in base allo stato di una casella di controllo su un modulo di Windows e come elaborare la richiesta dal PC sull'arduino.
Questo è un esempio prolisso, ci sono soluzioni più pulite ma questo è più chiaro.
Nell'esempio, l'arduino attende dal pc una "a" o una "b". il pc invia un 'a' quando una casella è selezionata e invia una 'b' quando una casella è deselezionata. Nell'esempio si presuppone il pin digitale 4 sull'arduino.
codice Arduino
#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;
}
}
}
}
di Windows C#
Questo codice risiederà nel file di modulo .cs. Nell'esempio si presuppone che siano stati associati eventi del modulo per OnOpenForm, OnCloseForm e l'evento OnClick alla casella di controllo. Da ciascuno degli eventi è possibile chiamare i rispettivi metodi indicati ....
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");
}
}
}
Suggerimento:
Se si desidera leggere un messaggio del arduino quindi aggiungere un timer per il modulo con un intervallo di 50
o 100
millisecondi.
In OnTick
caso di timer si dovrebbe verificare per i dati utilizzando il seguente codice:
//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();
Il risultato di readLine()
sarà che myVar
contiene Hello World
.
fonte
2012-08-27 22:00:31
per qualche ragione, la mia ricerca non mi ha fatto quella pagina. Grazie. – ikathegreat