Numeri e monitor seriale

Buongiorno, chiedo supporto per questa mia particolarità: con un keypad collegato ad un lcd, scrivo correttamente i numeri, ma da monitor seriale vengono scritti e gestiti in ASCII (scrivo 1 e interpreta 49, scrivo 2 e interpreta 50 ecc…) ! Devo eseguire dei calcoli per muovere un divisore meccanico, come posso fare per per far calcolare il numero non in ASCII? Grazie mille

Riceverai il codice ASCII dei caratteri. Poiché i numeri sono sequenziali nella tabella ASCII, a partire da zero, se sottrai il codice per '0' ottieni il valore decimale

char r = ...;  // il carattere ASCII che ricevi
int v = - 1; //  -1 per dire errore  

if (r >= '0' && r <= '9') v = r - '0';

if (v != -1) {
  // v è il valore decimale.
}  else {
  // errore
} 

potresti anche usare isdigit() per verificare se il carattere che ricevi è una cifra

Come ti ha scritto J-M-L, fortunatamente, in ASCII i numero sono codificati da 0x30 (per il numero 0) a 0x39 (per il numero 9) quindi se ad un char che contiene un numero ASCII sottrai il valore esadecimale 0x30 (che poi è il carattere 0) ti resterà un valore che è esattamente il numero in decimale :smiley:

Guglielmo

Perfetto vi ringrazio entrambi!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.