Bug funzione delay?

Veramente incredibile!

Arduino prima di chiamare setup() chiama una funzione interna init() che configura i timer in questo modo:

  • timer0, phase-correct PWM, prescaler 64, overflow interrupt
  • timer1, phase-correct PWM 8 bit, prescaler 64
  • timer2, phase-correct PWM 8 bit, prescaler 64

con l'istruzione

TIMSK1 = (1 << OCIE1A) | (1 << TOIE1);

nel codice si abilita overflow interrupt sul timer 1 assieme all'output Compare Match A interrupt.
L'interrupt di overflow si scatena solamente se c'è lo sleep iniziale, da qui il comportamento errato.

La soluzione è

TIMSK1 = (1 << OCIE1A);

In poche parole togliere il clock al timer, ovvero

TCCR1B = 0;

non basta da solo sempre a fermare il timer :fearful:

C'è ancora da investigare secondo me per capire bene il tutto..