Piuttosto che usare i float, se proprio ti servono i mezzi gradi, usa gli int moltiplicando i gradi per 10! Esempio:
byte dir=(head+225)/450;
if(dir==8) dir=0;
Vedo che nel tuo codice c'è già:
int trovaIndice(float angolo)
{
int _index;
for (_index=0; _index<8; _index++)
{
float angoloDirezione = _index*45.0+22.50;
float angoloMin = angoloDirezione-22.50;
float angoloMax = angoloDirezione+22.50;
if (angolo>=angoloMin && angolo<=angoloMax)
return _index;
}
return _index;
}
Con angolo da 0 a 3599 anziché da 0 a 359,9 diventerebbe:
byte trovaIndice(int angolo)
{
return (angolo+225)/450.0+0.5; // .0 e +0.5, se vuoi, sono per l'arrotondamento.
}
ma a quel punto puoi usare direttamente la formula, senza metterla in una funzione.