In realtà è solo una molla posizionata al centro sulla base ed un'altra posizionata sulla testa. Quando ruota la testa di 360° le molle si toccano chiudendo il circuito.
Inoltre l'avevo già definita così la funzione inverti_rotazione, questo è il codice:
[ ... ]
// quando il circuito è chiuso sul pin ho 0 altrimenti 1
digitalWrite(inizio, HIGH); // pin dell'interrupt
attachInterrupt(1, inverti_rotazione, FALLING );
[ ... ]
void inverti_rotazione()
{
avanza = 1;
rotazione = !rotazione;
}
Solo che alla prima accensione l'interruttore è chiuso, quindi il pin è a 0. Non appena si apre il pin passa a 1 e si verifica l'interrupt?!?! Ma non dovrebbe verificarsi quando passa da 1 a 0 se dichiaro FALLING ?