Domanda semplice sugli interi seriale

Perchè se inizializzo un valore come intero e lo faccio leggere dall'arduino tramite seriale (dal Serial monitor) mi restituisce un valore diverso?

per esempio se invio 1 mi restituisce 49, se invio 2 mi restituisce 50 ecc...

ricordo di averlo già riscontrato una volta sto problema da qualche altra parte e di averlo risolto ma per il momento non ricordo come :smiley:

ti stampa il valore del carattere, se guardi l'ascii table vedrai che il carattere 1 ha valore decimale 49

per vedere quello che ti invia la seriale dovresti inizializzare la variabile come char.

detto questo nn è chiaro se tu fai un serial print con arduino perchè in quel caso la soluzione potrebbe essere:

Serial.print(var,DEC);

al massimo posta un pezzo di codice che così si capisce meglio :wink:

Spero di non aver creato ulteriore confusione

Ciao Manu

if (Serial.available() > 0)
{
digitalPin = Serial.read();
}

Questo è il pezzetto di codice, vorrei inviare da tastiera un valore intero ma il Serial.read() non posso settarlo come DEC, come potrei fare?

prova con una struttura case a trasformare i numeri in arrivo nei numeri che vuoi tu e poi li elabori

beh a questo punto se tu invii da una tastiera ovviamente questa ti manda un char e non un int, quindi la soluzione che mi viene così al volo può essere:

se non ti interessa fare operazioni matematiche leggi tutto come char.

se invece vuoi ricevere dei numeri per ad esempio fare dei calcoli:

char read_tastiera;
int temp_numero;
int numero;

read_tastiera = Serial.read();
temp_numero = (int)(read_tastiera);

if((temp_numero<=57)&&(temp_numero>=48))
{
numero = temp_numero - 48;
Serial.Print(numero,DEC);  // ristampo il numero ricevuto
}
else
{
Serial.Print(read_tastiera);  // ristampo il carattere ricevuto
}

a parte il fatto che l'ho buttato giù così senza fare il debug.....
l'idea è che se quello che ricevi è un carattere corrispondente a un numero da 0 a 9 ((int)(read_tastiera) compreso tra 48 e 57) lo converti in intero (quindi se char=0 int=48 e via dicendo) e gli sottrai 48 in modo da ottenere veramente interi che vanno da 0 a 9, se invece ricevi un qualsiasi altro carattere lo consideri così com'è. Forse ci sono soluzioni + efficaci ma... dovrebbe funzionare.

Fammi sapere e spero di non averti complicato la vita.

Ciao Manu