Ho un problema che mi affligge, e mentre in un PC avrei risolto in un minuto, su arduino (non essendo molto pratico...) non riesco a dare una soluzione.
Ricevo da seriale 2 caratteri, esempio 1a oppure 1b oppure 2a ecc ecc.
Come li ricevo e poi divido in due variabili considerando che Serial.read me ne prende uno alla volta ?
Tanti modi.
Ad esempio puoi contare quanti ne hai ricevuti, 0 è il primo e lo metti in una variabile, 1 è il secondo e lo metti in un'altra variabile (e quindi azzeri il contatore)
byte counter=0, primo=0, secondo=0;
void loop()
{ if(Serial.available())
{ int c=Serial.read();
counter++;
if(counter==1) primo=c;
if(counter==2)
{ secondo=c;
counter=0;
// qui ho primo e secondo caricati come char, es 1b => 1='1'=49 b='b'=98 ascii table
Serial.print(primo);
Serial.print(",");
Serial.println(secondo);
}
}
}
Questo metodo funzionerà solo fino a che si mantiene il sincronismo.
Potrebbe accadere che (per un errore di comunicazione o altro) il secondo diventi il primo. E da li in poi saranno tutti regolarmente scambiati.
Per una comunicazione robusta si dovrebbero inviare alcuni caratteri di sincronismo iniziale e poi i caratteri di dati. E anche un CRC alla fine in modo da risincronizzarsi in caso di errori.
Naturalmente il tutto diventerebbe notevolmente più complesso e non è detto che in questo caso sia possibile e valga la pena di farlo.
Quindi lo scrivo solo per conoscenza, è bene sapere che il problema potrebbe saltar fuori e sapere cosa si dovrebbe fare in caso di necessità.