Questo è il codice che ho sviluppato, e sembra funzionare ...
#define nTimer 3
#define pinLed 13
byte Timer [nTimer] = {10 , 40 , 60 };
byte n;
byte RxCar;
//byte Timer;
void setup() {
Serial.begin(9600);
pinMode(pinLed, OUTPUT);
}
void loop() {
delay (100);
Tmr();
if (Serial.available()) {
RxCar = Serial.read();
Timer[2]=60;
digitalWrite(pinLed,HIGH);
}
}
void Tmr (){
for (n=0;n < nTimer; n++){
if (Timer[n]){ // timer ancora attivo
Timer[n] --; // decrementa
if (!Timer[n]) { // conteggio terminato
switch (n) {
case 0:
Sub0();
break;
case 1:
Sub1();
break;
case 2:
Sub2();
break;
} // switch
} // if
} // if
} // for
} // void Tmr
void Sub0() {
Serial.println("Trascorso 1 sec.");
}
void Sub1() {
Serial.println("Trascorso 4 sec.");
}
void Sub2() {
Serial.println("Trascorso 6 sec.");
digitalWrite(pinLed,LOW);
}
Per la chiamata al timer, per praticità, ho utilizzato delay, ma nella versione defintiva usero millis().
Appena si invia un byte sulla seriale, si accende per 6" il led 13.
Attendo osservazioni