Advertisement
TolentinoCotesta

strtok() & atof()

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