Conversione di una stringa in un array e successivamente in int

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

Hai ragione, sorry

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