Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- String serialInput = "";
- double azimuth = 0.0F, elevation = 0.0F;
- void setup() {
- Serial.begin(115200);
- Serial.println("strtok() test");
- }
- void loop() {
- // Controlliamo se arriva qualcosa dalla seriale
- while (Serial.available()) {
- char inChar = Serial.read();
- serialInput += inChar;
- // quando ricevo il carattere di fine linea, significa che ho ricevuto tutto
- if (inChar == '\n') {
- // Ho ricevuto qualcosa, stampiamo per debug ed invochiamo la funzione estraiDati()
- Serial.println("Ho ricevuto dalla seriale: ");
- Serial.println(serialInput);
- if (estraiDati(serialInput.c_str()) > -1){
- // Se tutto è andato come previsto, ora le nostre variabili hanno il nuovo valore ricevuto
- Serial.print("Azimuth: ");
- Serial.println(azimuth);
- Serial.print("Elevation: ");
- Serial.println(elevation);
- }
- else{
- Serial.println("I dati ricevuti dalla seriale non sono validi.");
- }
- serialInput = "";
- }
- }
- }
- int estraiDati(char * str){
- #define NUM_VALS 2
- float values[NUM_VALS];
- char * pch;
- // troviamo il primo "token"
- pch = strtok (str, " ,");
- // Siccome sappiamo a priori di dover estrarre solo "n" dati usiamo un for per i token successivi
- for( unsigned int c = 0; c < NUM_VALS; c++){
- double val = 0;
- // Controlliamo che pch sia valido, altrimenti la funzione si blocca
- // in caso positivo, eseguiamo la conversione da stringa a numero float con atof()
- if(pch != NULL)
- val = atof(pch);
- else
- // in caso negativo c'è qualcosa che non va nei dati, usciamo dalla funzione con -1
- return -1;
- values[c] = val;
- pch = strtok (NULL, " ,");
- }
- // Aggiorniamo le variabili con i valori ricevuti
- azimuth = values[0];
- elevation = values[1];
- return 1;
- }
Add Comment
Please, Sign In to add comment