Go Down

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

leo72


Consiglio il seguente metodo:

Numero da inviare 1234,56

Moltiplica x 100 = 123456

Ma così si presuppone di poter manipolare il dispositivo inviante. Però lui usa un sensore che spedisce in quel formato per cui può lavorare solo sui dati in arrivo, non su quelli in partenza.

astrobeed


Ma così si presuppone di poter manipolare il dispositivo inviante. Però lui usa un sensore che spedisce in quel formato per cui può lavorare solo sui dati in arrivo, non su quelli in partenza.


Volendo può facilmente modificare il software della Razor imu, sopra c'è un 328 e il relativo sketch Arduino è disponibile, anzi esistono più varianti di quel software.

leo72



Ma così si presuppone di poter manipolare il dispositivo inviante. Però lui usa un sensore che spedisce in quel formato per cui può lavorare solo sui dati in arrivo, non su quelli in partenza.


Volendo può facilmente modificare il software della Razor imu, sopra c'è un 328 e il relativo sketch Arduino è disponibile, anzi esistono più varianti di quel software.

Bene, non lo sapevo.

ginboni

grazie per i vari interventi :)
astrobeed is è vero che sulla Razor IMU c'è un 328, ma tale sensore comunica con il mondo "esterno" tramite seriale o in "Wire" per cui non mi serve modificare il SW interno a sensore :)
Ho guardato in giro e ho scritto 2 righe di programma che è il seguente :

String Str_Sensore = String("#YPR=1.71,0.32,2.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;

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 valore che mi interessa
  Di_Servizio_2 = Str_Sensore.substring(Pos_Carattere_2 + 1, Pos_Carattere_3 ); // leggo il valore che mi interessa
  Di_Servizio_3 = Str_Sensore.substring(Pos_Carattere_3 + 1 ); // leggo il valore che mi interessa


//Variabile_1 = atof(Di_Servizio_1.getChars());
//Variabile_2 = atof(Di_Servizio_2.getChars());
//Variabile_3 = atof(Di_Servizio_3.getChars());

   
               
   
  Serial.println(Di_Servizio_1);    // per controllare se la separazione sia avvenuta con successo
  Serial.println(Di_Servizio_2); 
  Serial.println(Di_Servizio_3);   
 
}


void loop() {    }

con questo riesco a separare i vari valori , ma restano ancora delle strighe, non riesco a convertirle in variabili float vere propie ,
ho provato usate la funzione "atof()" , ma il compilatore mi da un errore , che il seguente :

'Class String' has no member named'getChars'

Ho cercato in internet la funzione "atof()" , funzione di C, ma non ho capito come usarla in Arduino :)

leo72


ho provato usate la funzione "atof()" , ma il compilatore mi da un errore , che il seguente :

'Class String' has no member named'getChars'

Ho cercato in internet la funzione "atof()" , funzione di C, ma non ho capito come usarla in Arduino :)

Il compilatore ha ragione dato che l'oggetto String di Arduino non ha il metodo getChars ma bensì toCharArray():
http://arduino.cc/en/Reference/StringToCharArray

Copia in un array di char* il contenuto della stringa DiServizio e poi il risultato dallo in pasto a atof.

Go Up