Merci pour ta réponse
Le code d'origine fait près de 400 lignes. Mais voici un extrait simplifié (non testé, je ne garantis pas les ";" ).
J'ai préféré travailler avec un delay et deux interruptions plutôt que des millis, car le montage suit tranquillement sa routine la plupart du temps, en réagissant en fonction de ses capteurs. La commande manuelle du montage, via les boutons est très rare, et se produit une à deux fois jour, maximum. L'interruption me permet aussi d'avoir un programme plus réactif, qui obéit rapidement à une commande (ex : si je veux qu'il arrête de faire du bruit, je veux qu'il arrête immédiatement et non pas qu'il mesure tous les autres capteurs avant de vérifier l'interrupteur et d'obéir)
Mais je doute que le problème vienne du code, car le montage fonctionnait correctement avant le branchement du relais, avec le même code.
const byte PIN_BULB = 4;
const byte PIN_SWITCH_LIGHT = 3;
bool isLightOn = false;
void setup() {
Serial.begin(9600);
// initialize pins
pinMode(PIN_SWITCH_LIGHT, INPUT);
pinMode(PIN_BULB, OUTPUT);
digitalWrite(PIN_BULB, LOW);
attachInterrupt(digitalPinToInterrupt(PIN_SWITCH_LIGHT), switchLight, RISING);
}
void loop() {
// fait des trucs à chaque tour de boucle
// fait parfois des trucs, en fonction des mesures des capteurs
delay(1000); // nécessaire pour que chaque actuateur puisse finir sa tâche tranquillement
}
void switchLight(){
Serial.println("Switch light triggered");
isLightOn = !isLightOn;
digitalWrite(PIN_BULB, isLightOn);
}