salve stò cercando di convertire una stringa ricevuta dalla seriale del tipo:
String Valori;
valori="1 1 0 1 25 35 20 21 22 23 1 45 235";
le posizioni sono fisse quindi avevo pensato di usare:
assegna = valori.substring(2,3); //prendo il secondo "1"
statogoccia2 = int(assegna); //converto assegna in int e lo passo alla variabile che devo aggiornare
ma mi dice che non può convertire:
error: cannot convert 'String' to 'int' in assignment
Substring(2,3) parte dal terzo carattere della stringa (0,1,2) e estrae una stringa di 3 caratteri. Quindi cerchi di mettere '1 0' in una variabile di tipo int.
secondo me dovresti costruire il parser in modo che cerchi gli spazi ed inserisca in un buffer i caratteri letti per poi convertirli in numeri interi con il comando atoi e schiaffarli nell'array.
innanzitutto grazie, allora ho corretto il substring
assegna = valori.substring(0,1);
lcd.print(assegna);
lcd.print("-");
assegna= int(assegna);
ora nel primo assegna ho il valore giusto, ma poi non riesco a convertirlo ne con atoi ne con int
Che vuol dire che non riesci a convertirlo? Cmq segui il consiglio di brainbooster e cerca gli spazi, anche perchè non credo tu sappia se i numeri sono a una, due o tre cifre, giusto?
N
Per "non riesco a convertirlo" intendo che mi da errore il compilatore dicendo che non posso convertire string to int
Allora la composizione della stringa è fissa, quindi sono sicuro dei valori che gli passerò.
assegna = valori.substring(0,1);
String fresh_from_serial = assegna;
char this_char[fresh_from_serial.length() + 1];
fresh_from_serial.toCharArray(this_char, sizeof(this_char));
int my_integer_data = atoi(this_char);
statogoccia2=my_integer_data;
lcd.print(my_integer_data);
con questo codice riesco a prendere il primo 1, ho fatto anche prove cambiando il primo carattere mettendoci lo 0 e funziona
assegna = valori.substring(2,1);
String fresh_from_serial = assegna;
char this_char[fresh_from_serial.length() + 1];
fresh_from_serial.toCharArray(this_char, sizeof(this_char));
int my_integer_data = atoi(this_char);
statogoccia2=my_integer_data;
lcd.print(my_integer_data);
passando al secondo 1 ritorna sempre 0 stessa cosa per tutti gli altri valori che vado ad estrarre, se stampo assegna mi stampa una cosa del genere
" 1 " (spazi prima e dopo) ma valori.substring(2,1); prende solo 1 carattere giusto dalla posizione 2?
allora trovato il problema:
valori.substring(X,Y);
x carattere di inizio
y carattere di fine, non la lunghezza
superp:
Hai ragione, sorry
grazie comunque dell'aiuto
posto il codice nel caso servisse a qualcuno, è un pò macchinoso ma funziona!
//statogoccia1 (bis)
assegna = valori.substring(6,7);
fresh_from_serial = assegna;
this_char[fresh_from_serial.length() + 1];
fresh_from_serial.toCharArray(this_char, sizeof(this_char));
my_integer_data = atoi(this_char);
statogoccia1=my_integer_data;
//lcd.print(my_integer_data);
//lcd.print("-");
//durata1
assegna = valori.substring(8,9);
fresh_from_serial = assegna;
this_char[fresh_from_serial.length() + 1];
fresh_from_serial.toCharArray(this_char, sizeof(this_char));
my_integer_data = atoi(this_char);
int decimale = my_integer_data * 10;
assegna = valori.substring(9,10);
fresh_from_serial = assegna;
this_char[fresh_from_serial.length() + 1];
fresh_from_serial.toCharArray(this_char, sizeof(this_char));
my_integer_data = atoi(this_char);
decimale+=my_integer_data;
duratagoccia1=decimale;
//lcd.print(decimale);
//lcd.print("-");
nella prima parte converte una stringa da un carattere a int, nella seconda parte converte una stringa di due caratteri in un int