Problema pulsanti led millis

Ci sono diversi approcci, quello indicato da pgiagno è il più generale con cui affronti qualsiasi problema che richieda diverse fasi di funzionamento (o diversi processi in "parallelo").

In un caso come questo si può anche ragionare a livello più basso, abbiamo una tabella:

 s1  s2 | l1  l2
-----------------
  0   0 |  0   0
  1   0 |  0  blk
  1   1 |  1   0

da cui si vede che il LED1 è comandato semplicemente dall'and di s1 e s2:

digitalWrite(PIN_LED1, s1 && s2);

e abbiamo una condizione di lampeggio:

cond = s1 & !s2;

dopo di che serve un blinker comandato da questa condizione. Se è falsa uscita blinker 0 e blinker disattivo:

if (!cond) {  q = 0;   act = 0;  }

se vera possiamo essere alla prima attivazione, e quindi impostiamo uscita 'q' alta, blinker attivo, e ci salviamo il tempo di sistema per la temporizzazione:

else if (!act) {  q = 1;   act = 1;   t = millis();  }

oppure possiamo essere già in conteggio, e allora ad ogni timeout invertiamo l'uscita (e "ricarichiamo il tempo di sistema):

else if (millis()-t >= 500) {  q ^= 1;  t = millis();  }

Il blinker si comporta quindi in questo modo:

545675456

non resta che comandare il LED2 con l'uscita del blinker:

digitalWrite(PIN_LED2, q);