TolentinoCotesta

strtok() & atof()

Apr 8th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. String serialInput = "";
  2. double azimuth = 0.0F, elevation = 0.0F;
  3.  
  4. void setup() {
  5.   Serial.begin(115200);
  6.   Serial.println("strtok() test");
  7. }
  8.  
  9. void loop() {
  10.  
  11.   // Controlliamo se arriva qualcosa dalla seriale
  12.   while (Serial.available()) {        
  13.     char inChar = Serial.read();    
  14.     serialInput += inChar;    
  15.      
  16.     // quando ricevo il carattere di fine linea, significa che ho ricevuto tutto
  17.     if (inChar == '\n') {
  18.       // Ho ricevuto qualcosa, stampiamo per debug ed invochiamo la funzione estraiDati()
  19.       Serial.println("Ho ricevuto dalla seriale: ");
  20.       Serial.println(serialInput);
  21.  
  22.       if (estraiDati(serialInput.c_str()) > -1){      
  23.         // Se tutto è andato come previsto, ora le nostre variabili hanno il nuovo valore ricevuto
  24.         Serial.print("Azimuth: ");
  25.         Serial.println(azimuth);
  26.         Serial.print("Elevation: ");
  27.         Serial.println(elevation);
  28.       }
  29.       else{
  30.         Serial.println("I dati ricevuti dalla seriale non sono validi.");
  31.       }
  32.      
  33.       serialInput = "";
  34.     }
  35.   }
  36.  
  37. }
  38.  
  39.  
  40. int estraiDati(char * str){
  41.   #define NUM_VALS 2
  42.   float values[NUM_VALS];
  43.   char * pch;    
  44.  
  45.   // troviamo il primo "token"    
  46.   pch = strtok (str, " ,");    
  47.   // Siccome sappiamo a priori di dover estrarre solo "n" dati usiamo un for per i token successivi
  48.   for( unsigned int c = 0; c < NUM_VALS; c++){
  49.     double val = 0;
  50.     // Controlliamo che pch sia valido, altrimenti la funzione si blocca
  51.     // in caso positivo, eseguiamo la conversione da stringa a numero float con atof()
  52.     if(pch != NULL)
  53.       val = atof(pch);
  54.     else
  55.     // in caso negativo c'è qualcosa che non va nei dati, usciamo dalla funzione con -1   
  56.       return -1;        
  57.     values[c] = val;    
  58.     pch = strtok (NULL, " ,");
  59.   }      
  60.  
  61.   // Aggiorniamo le variabili con i valori ricevuti
  62.   azimuth = values[0];
  63.   elevation = values[1];  
  64.   return 1;
  65. }
Add Comment
Please, Sign In to add comment