Ciao, Sto realizzando un progetto a scuola con la piattaforma arduino, mi servirebbe un aiuto, il mio progetto funziona benissimo ( si tratta solo di muovere un motore passo passo) ma appena cerco di far comunicare da un programma in c# all'arduino una stringa ( nel mio caso un int), tramite porta seriale , trovo un po di difficoltà . in pratica ho scoperto che l'arduino riceve un byte(char) alla volta, inserirlo in un array di caratteri, quindi dovrei creare una funzione che mi trasforma l'arrey in una variabile di tipo int ( la var. da utilizzare in seguito) . lo so che sicuramente non avrete capito molto ... per riassumere vorrei ( da un programma c#) modificare una variabile in arduino... potete aiutarmi ?
Ok, ho risolto, la funzione che mi serviva era
if (Serial.available()>0 )
{
x = Serial.parseInt();
}
per modificare una variabile x .... niente array e niente Serial.read() per l'uso che ne farò è molto comoda, ma se volessi indirizzare i valori a due variabili diverse tipo "A123" per a = 123 e "B235" per b = 235 ... come si può risolvere ?
if (Serial.available()>0 )
{
if (Serial.read() == 'b')
{
x = Serial.parseInt();
Serial.flush();
Serial.println("b");
}
else if (Serial.read() == 'c')
{
delayTime = Serial.parseInt();
Serial.flush();
Serial.println("c");
}
Ho cercato di farlo in questo modo, con la b funziona tutto, quando metto un valore tipo c125 non succede niente (non mi stampa nemmeno la c sul seriale)... come mai ?
Se non mi sbaglio, fai l'errore di leggere una prima volta se è 'b', poi se non lo è (hai spedito una 'c')
allora RILEGGI e perciò non può più essere 'c'
if (Serial.available()>0 )
{ char cb=Serial.read(); // leggo il primo char e poi verifico cosa è
if (cb== 'b')
{ x = Serial.parseInt();
Serial.flush();
Serial.println("b");
}
else if (cb== 'c')
{ delayTime = Serial.parseInt();
Serial.flush();
Serial.println("c");
}
}
nid69ita:
Se non mi sbaglio, fai l'errore di leggere una prima volta se è 'b', poi se non lo è (hai spedito una 'c')
allora RILEGGI e perciò non può più essere 'c'
Bravo nid69ita.
Spieghiamo un attimo la cosa a barlettaag.
Quando fai un Serial.read tu PRELEVI un byte dal buffer in cui sono posti i dati che arrivano sulla seriale.
"Prelevare" significa che quel byte che leggi lo estrai proprio dal buffer, quindi se fai un altro Serial.read tu leggi il dato successivo. Per poterlo esaminare più volte, il dato letto con Serial.read tu devi salvarlo in una variabile tampone.
Un'alternativa è usare il metodo peek(), che esamina soltanto il byte pronto ad essere estratto dal buffer con read() senza però estrarlo materialmente.
grazie, questo peek() non lo conoscevo e devo dire che è molto utile visto che ci permette di risparmiare spazio non creando la variabile.