Patrick_M:
così secondo me funzionabool state = false;
unsigned long previousMillis = 0;
const long interval = 5000;
//unsigned long currentMillis; non serve
const byte led = 8;
void setup() {
attachInterrupt(0, interruptLed, RISING);
pinMode(led, OUTPUT);
}
void loop() {
if (state) {
state = false;
previousMillis = millis();
//lcd.backlight();
digitalWrite(led, HIGH);
}
if (millis() - previousMillis >= interval) {
digitalWrite(led, LOW);
}
}
void interruptLed() {
state = true; // meglio così altrimenti hai problemi di debounce
}
Perfetto. Ora funziona tutto a meraviglia.
Standardoil:
Forse, solo forse, devi dichiarare volatile le variabili che usi nella ISR
Siccome non ho ben capito neanche nella reference dell'interrupt di Arduino cosa sia la variabile ISR, seguendo l'intuito ho impostato volatile l'unica variabile che passa per la funzione che richiama l'interrupt:
bool volatile state = false;
In ogni caso ora funziona tutto, come già detto, a meraviglia.
Grazie ad entrambi per il vostro tempo.