Visti i problemi di millis() vorrei sapere come faccio a fare un reset automatico.
Non puoi resettare un AVR utilizzando direttamente un suo pin perché il tempo per cui è necessario tenere reset a 0 è maggiore del tempo dopo il quale le periferiche vengono disabilitate, pin che vanno in alta impedenza, dall''inizio delle operazioni di reset.
Eventualmente puoi resettare a comando utilizzando un monostabile che si occupa di mantenere il pin reset a 0 per tutto il tempo necessario indipendentemente dal fatto che il comando che l'ha avviato non è più disponibile.
Per quanto riguarda la millis è possibile resettarla a piacere quando ti pare, p.e. non appena raggiunge un certo conteggio, basta che metti nelle definizioni globali dello sketch la seguente riga :
extern unsigned long timer0_millis;
Dopo di che per resettare la millis :
timer0_millis = 0;