Mi aiutate a modificare questo codice ?

Ciao a tutti !
Avrei bisogno un piccolo aiuto per modificare questo pezzo di codice:

Il programma ora funziona così:
premendo (e rilasciando) un tasto si eccita un relè collegato ad una lampadina, premendolo (e rilasciandolo) una seconda volta si diseccita. (una specie di relè passo passo insomma). Se però si preme il pulsante per più di 500ms quando il relè è eccitato vengono inviati al dimmer SX13 (con comando seriale) 4 byte che ne fanno variale la luminosità su 3 livelli (da alta a media, da media a bassa, da bassa a media ...).

Il codice funziona ma vorrei migliorarlo in questo modo:
per variare la luminosità ora sono costretto a premere e rilasciare il pulsante più volte. Io vorrei invece che tenendo premuto il tasto per più di 500ms la luce cambi di intensità (ogni 1000ms) e che si fermi al rilascio.

Spero di essere stato abbastanza chiaro

Grazie mille !

UltimoStatoPulsante16 = StatoPulsante16;
StatoPulsante16 = digitalRead(Ingresso16);
if (UltimoStatoPulsante16 == HIGH && StatoPulsante16 == LOW)
ton16 = millis();
if (UltimoStatoPulsante16 == LOW && StatoPulsante16 == HIGH)
{
toff16 = millis();
if ((toff16-ton16) <= 500)
ContaImpulsi16++;
if ((toff16 - ton16 > 500) && (ContaImpulsi16 % 2 ))
{
dimmer++;
if (dimmer == 4) dimmer = 0;
}
if (! (ContaImpulsi16 % 2 ))
{
digitalWrite(Uscita16,LOW);
dimmer = 0;
}
if (ContaImpulsi16 % 2 )
{
digitalWrite(Uscita16,HIGH);
}
switch (dimmer)
{
case 0:
Serial1.print ('L', BYTE);
Serial1.print (0xFF, BYTE);
Serial1.print (0xFF, BYTE);
Serial1.print (0xFF, BYTE);
break;

case 1:
Serial1.print ('L', BYTE);
Serial1.print (0xFF, BYTE);
Serial1.print (0xAA, BYTE);
Serial1.print (0xAA, BYTE);
break;

case 2:
Serial1.print ('L', BYTE);
Serial1.print (0xFF, BYTE);
Serial1.print (0x55, BYTE);
Serial1.print (0x55, BYTE);
break;

case 3:
Serial1.print ('L', BYTE);
Serial1.print (0xFF, BYTE);
Serial1.print (0xAA, BYTE);
Serial1.print (0xAA, BYTE);
}
}

Mi basta anche solo un aiutino ... un suggerimento ... io ho finito le idee ! UP !!! :-[

Io farei cosi...
Segna in una variabile il risultato della funzione millis, cosi' hai un punto di riferimento di tempo appena inizi a premere il pulsante. Poi continua a valutarla nel loop, se e' maggiore di 500, tra 500 e 1000 e tra 1000 e 1500, ad esempio. Per ogni stato di tempo puoi variare il colore del tuo led.
Fede

Si ci avevopensato: volevo usare il case:

case1: quando il tempo è da 0 a 500ms
se rilascio spengo la luce
case2: quando il tempo è da 500 a 1000ms
imposto la luminosità media
case3: quando il tempo è da 1000 a 1500ms
imposto la luminosità bassa

il problema è che siccome il comando ad dimmer viene inviato via seriale, non posso continuare a inviare comandi seriali ad ogni loop, volevo inviarlo una sola volta quando entro nel case.

Ah comunque forse non mi sono espresso bene, comunque è un dimmer per regolare l'intensità delle lampade ad incandescenza l'SX13

E perche' non puoi inviare il comando solo quando entri nel caso giusto?
Fede