Annotazioni: vedi lo sketch Pausa.
Senza le variabili acceso1...acceso6 il LOOp so blocca dopo un certo numero di cicli.
NinoAL
/* Candeliere votivo.
Alla pressione del pulsante la
relativa candela rimane accesa
per n. minuti */
# define CONTA 2
# define LED1 8
# define LED2 9
# define LED3 10
# define LED4 11
# define LED5 12
# define LED6 13
int ValueConta = 0;
int lastValueConta = 0;
int contaImpulsi = 0;
int ValueUno = 1;
int ValueDue = 2;
int ValueTre = 3;
int ValueQuattro = 4;
int ValueCinque = 5;
int ValueSei = 6;
byte acceso1 = LOW;
byte acceso2 = LOW;
byte acceso3 = LOW;
byte acceso4 = LOW;
byte acceso5 = LOW;
byte acceso6 = LOW;
unsigned long iMillis1 = 0;
unsigned long iMillis2 = 0;
unsigned long iMillis3 = 0;
unsigned long iMillis4 = 0;
unsigned long iMillis5 = 0;
unsigned long iMillis6 = 0;
int TempoON = 3000;
void setup()
{ pinMode(CONTA, INPUT );
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
pinMode (LED4, OUTPUT);
pinMode (LED5, OUTPUT);
pinMode (LED6, OUTPUT); }
void loop() {
//---------- Leggi pezzi su Pin2 -------------------
ValueConta = digitalRead(CONTA);
if ( ValueConta != lastValueConta)
{ if ( ValueConta == HIGH)
{ contaImpulsi++;
delay(20); }}// DebounceTime
lastValueConta = ValueConta;
if ( ValueConta == HIGH && acceso1 == LOW && contaImpulsi==ValueUno)
{ digitalWrite(LED1, HIGH);
acceso1 = HIGH;
iMillis1 = millis(); }
if ( acceso1 == HIGH && (millis()-iMillis1) > TempoON)
{ digitalWrite(LED1, LOW);
acceso1 = LOW; }
if ( ValueConta == HIGH && acceso2 == LOW && contaImpulsi==ValueDue)
{ digitalWrite(LED2, HIGH);
acceso2 = HIGH;
iMillis2 = millis(); }
if ( acceso2 == HIGH && (millis()-iMillis2) > TempoON)
{ digitalWrite(LED2, LOW);
acceso2 = LOW; }
if ( ValueConta == HIGH && acceso3 == LOW && contaImpulsi==ValueTre)
{ digitalWrite(LED3, HIGH);
acceso3 = HIGH;
iMillis3 = millis(); }
if ( acceso3 == HIGH && (millis()-iMillis3) > TempoON)
{ digitalWrite(LED3, LOW);
acceso3 = LOW; }
if ( ValueConta == HIGH && acceso4 == LOW && contaImpulsi==ValueQuattro)
{ digitalWrite(LED4, HIGH);
acceso4 = HIGH;
iMillis4 = millis(); }
if ( acceso4 == HIGH && (millis()-iMillis4) > TempoON)
{ digitalWrite(LED4, LOW);
acceso4 = LOW; }
if ( ValueConta == HIGH && acceso5 == LOW && contaImpulsi==ValueCinque)
{ digitalWrite(LED5, HIGH);
acceso5 = HIGH;
iMillis5 = millis(); }
if ( acceso5 == HIGH && (millis()-iMillis5) > TempoON)
{ digitalWrite(LED5, LOW);
acceso5 = LOW; }
if ( ValueConta == HIGH && acceso6 == LOW && contaImpulsi==ValueSei)
{ digitalWrite(LED6, HIGH);
acceso6 = HIGH;
iMillis6 = millis(); }
if ( acceso6 == HIGH && (millis()-iMillis6) > TempoON)
{ digitalWrite(LED6, LOW);
acceso6 = LOW; }
if ( contaImpulsi > 5)
{ contaImpulsi= 0; }
}