Problema Seriale Arduino(cpp)-C#

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)

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Ti inviamo anche vivamente di dare i programmi completi o programmi minimali che danno lo stesso errore/problema come quello grande.

250000 Baud non é un valore impostabile lato Arduino. Usa 115200.

Ciao Uwe

Grazie, funziona. Ora vorrei sapere se è la velocità massima di trasmissione della seriale?

Serial.begin() ...

... 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 :wink:

Guglielmo

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.