Go Down

Topic: Come leggere dei Float da una seriale (Read 1 time) previous topic - next topic

ginboni

grazie Leo , dal sito arduino/reference non ho capito come usare la funzione  toCharArray() :)
mi sa che sono duro di "comprendonio" :P
Leo gentilmente riusciresti fare un esempio di come andrebbe usato , grazie per eventuale risposta :)

leo72

Tipo questo:
Code: [Select]
char* tempChar;
DiServizio.toCharArray(tempChar, lunghezza_che_ti_serve);


ginboni

grazie delle delucidazioni Leo, per la funzione "toCharArray" ho usato: "char tempChar[10];" e non "char* tempChar;" se usavo i pointer il compilatore non mi dava errori , ma una volta provato con Arduino 2009 i valori dei float erano sempre a "0" .
Alla fine il programma prova di conversione e acquisizione mi risulta cosi :

String Str_Sensore = "#YPR=-171.11,-156.32,-162.26";

int Pos_Carattere_1;
int Pos_Carattere_2;
int Pos_Carattere_3;

String Di_Servizio_1;
String Di_Servizio_2;
String Di_Servizio_3;

char output_1[9];
char output_2[9];
char output_3[9];

float Variabile_1;
float Variabile_2;
float Variabile_3;


void setup() {
   
  Serial.begin(9600);
 
  delay(3000);

  Serial.println(Str_Sensore); 


  Pos_Carattere_1 = Str_Sensore.indexOf('=');                      // trova la posizione di "="
  Pos_Carattere_2 = Str_Sensore.indexOf(',', Pos_Carattere_1 + 1); // trova la posizione della prima virgola
  Pos_Carattere_3 = Str_Sensore.indexOf(',', Pos_Carattere_2 + 1); // trova la posizione della seconda virgola

  Di_Servizio_1 = Str_Sensore.substring(Pos_Carattere_1 + 1, Pos_Carattere_2 ); // leggo il primo valore
  Di_Servizio_2 = Str_Sensore.substring(Pos_Carattere_2 + 1, Pos_Carattere_3 ); // leggo il secondo valore
  Di_Servizio_3 = Str_Sensore.substring(Pos_Carattere_3 + 1 );                  // leggo il terzo valore

  Di_Servizio_1.toCharArray(output_1, 9);    // copio il tutto in Arry di char
  Di_Servizio_2.toCharArray(output_2, 9);
  Di_Servizio_3.toCharArray(output_3, 9);

  Variabile_1 = atof(output_1);            // estraggo i float
  Variabile_2 = atof(output_2);
  Variabile_3 = atof(output_3);
               
   
  Serial.println(Variabile_1);    // per controllare se la separazione sia avvenuta con successo
  Serial.println(Variabile_2); 
  Serial.println(Variabile_3);   
 
}


void loop() {    }   

grazie a tutti per l'aiuto  :)

ora mi sorge un dubbio c'è un modeo per semplificare questa operazione o programma ??    :smiley-eek: :smiley-mr-green:

leo72


grazie delle delucidazioni Leo, per la funzione "toCharArray" ho usato: "char tempChar[10];" e non "char* tempChar;" se usavo i pointer il compilatore non mi dava errori , ma una volta provato con Arduino 2009 i valori dei float erano sempre a "0" .

L'avevo usata tempo fa, mi pareva di aver usare i puntatori. Ho sbagliato  :smiley-sweat:

Quote

Alla fine il programma prova di conversione e acquisizione mi risulta cosi :
.............

Ricordati di allegare il codice cliccando sull'icona a forma di cancelletto (#) che trovi sopra alle faccine quando scrivi un messaggio, si legge meglio.

Quote

ora mi sorge un dubbio c'è un modeo per semplificare questa operazione o programma ??    :smiley-eek:

Non sempre si può ottimizzare più di tanto. Nel tuo caso non saprei se le ottimizzazioni vanno a complicare il codice oppure a semplificarlo. Se ti funziona e deve fare questo, lascialo com'è.

ginboni

ok , grazie di nuovo per le varie dritte :)

Go Up