Se con arduino leggo dalla seriale con Serial.read() e dal pc invio una valore intero composto da 2 cifre, arduino invece che leggere un solo valore ne legge 2.
ho trovato anche un'altra soluzione: leggo i valori 1 ad 1, li moltiplico per la potenza del 10 a seconda se sono decine, centinaia.. e man mano sommo il valore ottenuto ad una variabile.
è un buon metodo?
come faccio a controllare se il valore che arriva è una cifra compresa tra 1 e 9?
uwefed:
C'é un metodo simile ma piú elegante dove aspetta un certo tempo e poich converte.
Quello suggerito vuole sempre il numero di byte fissi.
Ciao Uwe
Una versione modificata del codice che hai riportato come prima risposta potrebbe essere: anzichè imporre un limite di dimensione massima alla variabile tmp, far controllare l'ultimo byte inserito e continuare ad attendersi altre cifre fino a quando non viene inserito il carattere "return". (si utilizza la codifica ascii)
E' un'idea, non ho codici a portata di mano, ma dovrebbe funzionare...
int incomingByte;
char Data[8];
int i;
unsigned long Tempo;
void setup()
{
Serial.begin(9600);
}
void loop(){
do {
if (Serial.available()) {
Data[i] = Serial.read();
i++;
}
if(i<1)Tempo = millis();
} while (i<5&&(millis()-Tempo) < 500);
Data[i] = 0;
incomingByte = atoi(Data);
i=0;
Serial.println(incomingByte);
}
Questo codice prende 5 caratteri dalla seriale oppure anche di meno se non arrivano entro 0,5 secondi e li converte in un int. I numeri possono andare da ca 32000 a ca -32000 (limite variabili del tipo int, visto che lavora con 16 bit.)
Se trasmetti per esempio solo 3 caratteri come 123 lo sketch te li prende e non aspetta finche hai mandato i restanti 2.
Se trasmetti piú di 5 cartteri li vede come 2 trasmissioni di cui la prima é lunga 5 caratteri e la seconda il restante .
Se invio alla seriale qualcosa e subito dopo qualcos'altro, arduino potrebbe "confondersi"?
E se invece che guardare la lunghezza di Serial.available() mettessi un carattere per indicare la fine del messaggio alla fine della stringa che invio e usassi quello per vedere dove finisce?
Il mio esempio é pensato per rasmetere valori che un sogetto umano inserisce nel terminale, percui senza zeri all'inizio e senza carattere di termine. Nel mio esempio puoi scrivre 1 come 32000 e ti arriva il valore senza dover scrivere 00001.
Ciao Uwe