// Le 8 direzioni principali della rosa dei venti
char* strBussola[9] = {"N", "NE", "E", "SE", "S", "SO", "O", "NO"};
float head; // il dato numerico che mi arriva dalla bussola
int index; // L'indice dell'array che contiene la stringa
// La funzione esegue la scansione degli angoli e restituisce il valore corrispondente all'indice
int trovaIndice(float angolo) {
// Troviamo la posizione dell'array corrispondente, rispetto alle 8 direzioni principali
int _index;
for(_index=0; _index<8; _index++) {
// Aggiungo un offset positivo di 45/2 = 22.5° per evitare numeri negativi
float angoloDirezione = _index * 45.0 + 22.50;
// Calcolo gli estremi della direzione
float angoloMin = angoloDirezione - 22.50;
float angoloMax = angoloDirezione + 22.50;
// Se l'angolo è compreso tra la direzione principale +/ 22.5° ritorno l'indice
if (angolo >= angoloMin && angolo <= angoloMax)
return _index;
}
// Questo potrebbe essere un -1 per gestire eventuali errori
// A questa riga infatti non ci dovrebbe mai arrivare durante l'esecuzione
return _index;
}
void setup() {
Serial.begin(9600);
head = 165.0;
index = trovaIndice(head);
Serial.print("Angolo: ");
Serial.print(head);
Serial.print("; Direzione: ");
Serial.println(strBussola[index]);
head = 205.0;
index = trovaIndice(head);
Serial.print("Angolo: ");
Serial.print(head);
Serial.print("; Direzione: ");
Serial.println(strBussola[index]);
head = 314.5;
index = trovaIndice(head);
Serial.print("Angolo: ");
Serial.print(head);
Serial.print("; Direzione: ");
Serial.println(strBussola[index]);
head = 22.5;
index = trovaIndice(head);
Serial.print("Angolo: ");
Serial.print(head);
Serial.print("; Direzione: ");
Serial.println(strBussola[index]);
}
void loop() {
}