Merci @fdufnews ton code marche super bien. J'avais essayé ce code mais il y avait des beugs. Grace à toi j'ai encore découvert une fonction /* ...*/ . C'est bien pratique.
J'ai juste changé a la fin du code "digitalWrite(ledPin[i], LOW); par etatsensor[i] = LOW; pour ne pas avoir de "faux " positif au redémarrage.
Je met le nouveau code "propre" si quelqu'un en a besoin.
Je laisse le sujet ouvert, pour vous montrer le résultat final, si le projet est approuvé par mes supérieurs.
J'ai bien avancé sur les panneaux de contrôles, maintenant il faut que ça plaise.
En tout cas merci pour cette collaboration (apprentissage).
```cpp
#include <LiquidCrystal.h> // library:
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7); // Pin Parameters: (RS, E, D4, D5, D6, D7):
const int sensorPin[6] = { 40, 41, 42, 43, 44, 45 }; // capteur de porte
int etatsensor[6]; //Variable etat capteur
const int ResetPin = 8; // boutton poussoir pour le reset
const int buttonOnOff = 9; // boutton poussoir pour le ON / OFF
const int ledPin[6] = { 26, 27, 28, 29, 30, 31 }; // led d'information porte ouverte
const int statusLed = 24;
const int buzzer = 10; // broche buzzer
const int ledLCD = 36; // broche lumiere (ecran lcd) broche A
const int lumiere2 = 38; // broche lumiere
const int lumiere1 = 39; // broche lumiere
bool sensorsActive = true; // condition alarme active ou pas (ligne 157)
char message[17] = "";
void setup() {
for (int i=0; i < 6; i++) {
pinMode(sensorPin[i], INPUT_PULLUP);
}
pinMode(ResetPin, INPUT_PULLUP);
pinMode(buttonOnOff, INPUT_PULLUP);
for (int i=0; i < 6; i++) {
pinMode(ledPin[i], OUTPUT);
}
pinMode(statusLed, OUTPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(buzzer, LOW); // Le buzzer est eteint au debut
pinMode(ledLCD, OUTPUT);
digitalWrite(ledLCD, LOW); // La affichage lcd éteint au début
pinMode(lumiere2, OUTPUT);
digitalWrite(lumiere2, HIGH); // La lumiere est éteinte au début
pinMode(lumiere1, OUTPUT);
digitalWrite(lumiere1, HIGH); // La lumiere est éteinte au début
lcd.begin(16, 2);
}
void loop() {
if (sensorsActive) {
for (int i=0; i < 6; i++) {
etatsensor[i] = etatsensor[i] == HIGH ? etatsensor[i] : digitalRead(sensorPin[i]); // Lire la valeur du capteur
}
lcd.clear();
sprintf(message, "3GA=%1d 3P=%1d 3PA=%1d", etatsensor[0], etatsensor[1], etatsensor[2]);
lcd.setCursor(0, 0); // Choix de la position et de la ligne (1)
lcd.print(message);
sprintf(message, "2GA=%1d 2P=%1d 2PA=%1d", etatsensor[3], etatsensor[4], etatsensor[5]);
lcd.setCursor(0, 1);
lcd.print(message);
if (sensorsActive) {
for (int i=0; i < 6; i++) {
if (etatsensor[i] == HIGH) { // Si le capteur est déclenché
digitalWrite(ledPin[i], HIGH); // Allumer la LED
digitalWrite(lumiere2, LOW); // Activer le relai
digitalWrite(buzzer, HIGH);
digitalWrite(ledLCD, HIGH);
digitalWrite(lumiere1, LOW);
}
}
}
if (digitalRead(ResetPin) == LOW) {
for (int i=0; i < 6; i++) {
digitalWrite(ledPin[i], LOW);
etatsensor[i] = LOW;
}
digitalWrite(lumiere2, HIGH);
digitalWrite(lumiere1, HIGH);
digitalWrite(ledLCD, LOW);
}
if (digitalRead(buttonOnOff) == LOW) {
sensorsActive = false;
digitalWrite(statusLed, HIGH);
for (int i=0; i < 6; i++) {
digitalWrite(ledPin[i], LOW);
}
digitalWrite(buzzer, LOW);
digitalWrite(ledLCD, HIGH);
digitalWrite(lumiere2, HIGH);
digitalWrite(lumiere1, HIGH);
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("SYSTEME");
lcd.setCursor(4, 1);
lcd.print("INNACTIF");
delay(3000);
digitalWrite(ledLCD, LOW);
lcd.clear();
}
} else {
if (digitalRead(buttonOnOff) == LOW) {
sensorsActive = true;
digitalWrite(statusLed, LOW);
digitalWrite(ledLCD, HIGH);
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("SYSTEME");
lcd.setCursor(5, 1);
lcd.print("ACTIF");
delay(3000);
digitalWrite(ledLCD, LOW);
lcd.clear();
for (int i=0; i < 6; i++) {
etatsensor[i] = LOW;
}
}
}
delay(200);
}