attachInterrupt è un interrupt esterno, perchè si basa su un segnale che arriva dall'esterno (quindi da un pin)
Il codice funziona (il led lampeggia) ma perché passa più volte nella ISR?
entra nella ISR ogni volta che il registro contatore va in overflow.
C'è modo di stampare il contenuto del contatore?
Serial.println(TCNT1, DEC);
Come fa a incrementare il valore del registro contatore se l'azzeramento avviene nel setup?
appunto, nel setup viene azzerato il registro contatore, però il registro viene incrementato ad ogni overflow del timer. il valore di overflow è settabile tramite un altro registro, quindi è possibile regolare (entro certi limiti eh) il tempo di overflow, e dinque la durata del lampeggio.
Questo è un interrupt interno, perchè viene genarato all'interno del microcontrollore (in questo caso un timer)