Ciao, sto lavorando con visualstudio ad un progetto e ho un problema di comunicazione seriale tra il programma pc (c#) e l'arduino UNO (cpp a oggetti).
il mio codice c# è:
//Baud rate impostata a 250000 sia su PC che su Arduino
class SerialController
{
public SerialController(string Name, int Baud)
{
this._serial = new SerialPort(Name, Baud);
if (!this._serial.IsOpen)
{
this._serial.Open();
}
}
public void Send(string msg)
{
this._serial.Write(msg);
}
public string Recive()
{
return this._serial.ReadTo("}");
}
private SerialPort _serial;
}
// il codice main è:
Console.Write("Insert serial port name to use: ");
SerialController Arduino = new SerialController(Console.ReadLine(), 250000);
Console.WriteLine("Insert command to use: ");
while (true)
{
Arduino.Send(Console.ReadLine());
}
e il codice arduino (non metto tutto per questioni di lunghezza):
//riceve con:
Serial->readString(); //fino a che non incontra un ';'
//invia con:
Serial->write(msg);//senza newline
il formato dei messaggi è:
PC -> Arduino
servo:getPin(1);
Arduino -> PC
{ json }
sfruttando il monitor seriale di visualmicro funziona e da indietro corretto, con il mio codice invia sfasato nonostante sia la stessa velocità, ma non riceve indietro niente (il led RX si accende ma il TX resta spento)
... For communicating with the computer, use one of these rates: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, or 115200. You can, however, specify other rates - for example, to communicate over pins 0 and 1 with a component that requires a particular baud rate.
In realtà, se ti studi il datasheet del ATmega328P vedi che, almeno teoricamente e con un certo tasso di errore, puoi arrivare ad 1 Mbps (pag. 188). La parte che ti interessa inizia a pag. 170 e prosegue per svariate pagine
Ub4thaan:
Grazie, funziona. Ora vorrei sapere se è la velocità massima di trasmissione della seriale?
Come ti ha già fatto notare Guglielmo nella Serial.begin() puoi indicare qualunque valore per la velocità oltre a quelli standard, però è da verificare se è compatibile con il clock a 16MHz, sul data sheet del 328 trovi le formule per verificare l'errore in base al clock e la velocità in bps richiesta.
La velocità 250.000 è perfettamente compatibile con Arduino, errore 0% con clock a 16MHz, è un valore normalmente usato nei software per le stampanti 3D dove è indispensabile trasferire grandi quantità di dati in tempi brevi.