// 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() {

}