Serial.read()

Ho letto nel forum che se scrivo:

nome_variabile = Serial.read();

mi restitusice l'ASCII del carattere che mando dal serial monitor.
mentro se scrivo:

nome_variabile = Serial.read() - '0';

e mando dal serial monitor un numero mi ridà il numero che ho mandato e non l'ASCII del numero.

sapete perchè succede questo?? nell reference non c'è scritto niente :frowning:

osserva la tabella ascii... lo 0 e' ina casella che vale, per esempio, 16.

quindi quando scrivi 0 nella seriale, viene inviato in realta' il suo valore ascii, ovvero 16.

a questo punto, quando tu fai ValoreLetto-'0', ('0' restituisce il valore ascii dello 0, quindi 16), stai riconvertendo il valore ascii in valore numerico.

ovvio che se applichi questo sistema a una lettera, otterrai dei valori! sta a te capire quali osservando la tabella ascii

Per correttezza, lo '0' vale 48 in ASCII, l''1' 49, il '2' 50 ecc...

Per la chiarezza 48 in decimale mentre 0x30 in esadecimale.

con " ... - '0';" sottrai dan numero ricevuto via seriale il numero dello "zero" e cosí ricevi la cifra inviata non il codice ASHII del carattere "zero".
nello stesso modo puoi scrivere:
"... -48;"
Ciao Uwe