Go Down

Topic: ricevere da seriale un numero intero ed inserirlo in una variabile (Read 787 times) previous topic - next topic

Castigo

so che la seriale invia un solo byte alla volta ed è in codice ASCII perciò trattandosi di numeri bisogna sottrarre a ciascun numero il valore 48 ma trattandosi di un numero di + cifre per esempio 15 io dovrei sapere il numero di cifre ed elevare i valori ^10*(n-1) e con n intendo il numero di cifre.
così mi è stato consigliato assegnare ad n = Serial.avaiable(); (spero sia scritto giusto XD) ma qui sorge il mio problema non sò perchè mi da sempre come risultato 1 anche se io invio 1000000000000 come numero come posso risolvere
grazie mille e scusate la continua rottura XD

toti94

Serial.avaliable restituisce 1 se è stato ricevuto qualcosa e 0 se non è stato ricevuto niente
Ho fatto anche io lo stesso errore XD

nid69ita

#2
Jun 29, 2013, 11:46 pm Last Edit: Jun 30, 2013, 10:19 am by nid69ita Reason: 1
Perchè available() dice quanti caratteri disponibili ci sono sulla seriale, perciò >=1 (true) e 0 (falso) se non c'e' sono

EDIT: specificato meglio
my name is IGOR, not AIGOR

cyberhs

Quote
Perchè available() dice solo se c'e' un carattere disponibile sulla seriale, perciò 1 (vero) se c'e'  e 0 (falso) se non c'e'


Quote
Serial.avaliable restituisce 1 se è stato ricevuto qualcosa e 0 se non è stato ricevuto niente


Ma siete sicuri?
Quote
Syntax
Serial.available()
Arduino Mega only:
Serial1.available()
Serial2.available()
Serial3.available()
Parameters
none
Returns
the number of bytes available to read

cyberhs

il numero intero più grande che puoi gestire direttamente senza l'ausilio di librerie matematiche corrisponde ad un unsigned long (4.294.967.296) e contando le cifre sono al massimo 10.

Castigo

ok ma quindi come faccio a sapere di quante cifre è il numero che inserisco??? perchè solo sapendo questo posso fare la conversione ad intero

Castigo

mi è venuta un'idea e vi chiedo se può essere accettabile il numero inserito va da 1 a massimo direi 3 cifre a meno che i prof non decidano di passare tutta la giornata a girare il potenziometro XD quindi se io prendo 3 valori ASCII e li inserisco in 3 variabili a se per esempio scelgono 1 devono inserire 001 se scelgono 10 sarà 010 perchè al momento non vedo soluzione soprattutto perchè altrimenti se io invio dal monitor seriale il numero 10 mi legge solo lo 0 si può con qualche for strano fargli leggere tutti i caratteri che io inserisco???

nid69ita

Beh, esiste anche la Serial.ReadBytesUntil()
http://arduino.cc/en/Serial/ReadBytesUntil

e la Serial.ParseInt()
http://arduino.cc/en/Serial/ParseInt

che posso essere utili.
Inoltre se hai le cifre dentro ad una stringa (array di caratteri) terminato da '\0' allora puoi usare la atoi() o la atol()
http://www.cplusplus.com/reference/cstdlib/atoi/?kw=atoi
my name is IGOR, not AIGOR

Castigo

la parseInt(); è grandiosa esattamente quello che cercavo

nid69ita

Se risolvi potresti:
1. aggiungere al titolo [Risolto] modificando il tuo primo post.
2. aggiungere un post dove alleghi il tuo codice, potrà essere utile ad altri   :D
my name is IGOR, not AIGOR


Go Up