Bonjour, je reviens vers vous pour donner suite au projet. Les demandes ont progressés, à savoir la desactivation d'une partie des capteurs. Pour situer ce sont des étages.
il n'y a plus de LED de notification pour chaque porte et tout se fera sur l'affichage du LCD. Il y aura un suplément de 4 capteurs et un ecran 20x4, mais je vais tester cette solution avant d'acheter du matériel.
Mon but est de mettre 3 panneaux de controle identiques en parrallèle pour les 3 chambres de maitre d'internat.
Encore merci pour toutes vos informations.
[code]
#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 buttonZone3 = 30; // bouton poussoir zone 3
const int buttonZone2 = 31; // bouton poussoir zone 2
const int statusLed = 24; // led statut ON OFF
const int ledAlerte = 26; // led notification alerte
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 = false; // condition alarme active ou pas
bool zone3Active = true; // condition zone 3
bool zone2Active = true; // condition zone 2
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);
pinMode(buttonZone3, INPUT_PULLUP);
pinMode(buttonZone2, INPUT_PULLUP);
pinMode(statusLed, OUTPUT);
digitalWrite(statusLed, HIGH);
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
pinMode (ledAlerte, OUTPUT);
digitalWrite (ledAlerte, LOW);
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 des capteurs
}
bool buttonZone3State = digitalRead(buttonZone3); //declare la surveillance des bool
bool buttonZone2State = digitalRead(buttonZone2);
if (!buttonZone3State) { // Desactivation ou Activation du 3 eme étage
zone3Active = !zone3Active;
digitalWrite(ledLCD, HIGH);
if (zone3Active) {
lcd.clear();
sprintf(message, "3eme ETAGE");
lcd.setCursor(3, 0);
lcd.print(message);
sprintf(message, "ACTIF");
lcd.setCursor(5, 1);
lcd.print(message);
delay(1000);
digitalWrite(ledLCD, LOW);
}
if (!zone3Active) {
lcd.clear();
sprintf(message, "3eme ETAGE");
lcd.setCursor(3, 0);
lcd.print(message);
sprintf(message, "INNACTIF");
lcd.setCursor(4, 1);
lcd.print(message);
delay(1000);
digitalWrite(ledLCD, LOW);
}
}
if (!buttonZone2State) { // Desactivation ou Activation du 2 eme étage
zone2Active = !zone2Active;
digitalWrite(ledLCD, HIGH);
if (zone2Active) {
lcd.clear();
sprintf(message, "2eme ETAGE");
lcd.setCursor(3, 0); //
lcd.print(message);
sprintf(message, "ACTIF");
lcd.setCursor(5, 1);
lcd.print(message);
delay(1000);
digitalWrite(ledLCD, LOW);
}
if (!zone2Active) {
lcd.clear();
sprintf(message, "2eme ETAGE");
lcd.setCursor(3, 0);
lcd.print(message);
sprintf(message, "INNACTIF");
lcd.setCursor(4, 1);
lcd.print(message);
delay(1000);
digitalWrite(ledLCD, LOW);
}
}
if (!zone3Active) { // Désactiver les capteurs de la zone 3 si zone3Active est false // dit quoi faire quand bool false
for (int i=0; i < 3; i++) {
etatsensor[i] = LOW;
}
}
if (!zone2Active) { // Désactiver les capteurs de la zone 2 si zone2Active est false
for (int i=3; i < 6; i++) {
etatsensor[i] = LOW;
}
}
if ((sensorsActive) && (zone3Active) && (zone2Active)){ // Affichage si toutes les zones sont Actives
lcd.clear();
sprintf(message, "3GA=%1d 3P=%1d 3PA=%1d", etatsensor[0], etatsensor[1], etatsensor[2]);
lcd.setCursor(0, 0);
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) && (!zone3Active) && (zone2Active) ){ // Affichage si zones 3 est Desactivé
lcd.clear();
sprintf(message, "3 INNACTIF");
lcd.setCursor(3, 0);
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) && (!zone2Active) && (zone3Active)){ // Affichage si zones 2 est Désactivé
lcd.clear();
sprintf(message, "3GA=%1d 3P=%1d 3PA=%1d", etatsensor[0], etatsensor[1], etatsensor[2]);
lcd.setCursor(0, 0);
lcd.print(message);
sprintf(message, "2 INNACTIF");
lcd.setCursor(3, 1);
lcd.print(message);
}
if ((sensorsActive) && (!zone2Active) && (!zone3Active) ){ // Affichage si toutes les zones sont Désactivés
lcd.clear();
sprintf(message, "3 INNACTIF");
lcd.setCursor(3, 0);
lcd.print(message);
sprintf(message, "2 INNACTIF");
lcd.setCursor(3, 1);
lcd.print(message);
}
if (sensorsActive){
for (int i=0; i < 6; i++) {
if (etatsensor[i] == HIGH) { // Si le capteur est déclenché
digitalWrite(lumiere2, LOW);
digitalWrite(buzzer, HIGH);
digitalWrite(ledLCD, HIGH);
digitalWrite(lumiere1, LOW);
digitalWrite (ledAlerte, HIGH);
}
}
}
if (digitalRead(ResetPin) == LOW) { //si appuis sur reset
for (int i=0; i < 6; i++) {
etatsensor[i] = LOW;
}
digitalWrite(ledLCD, HIGH);
digitalWrite(buzzer, LOW);
digitalWrite(lumiere2, HIGH);
digitalWrite(lumiere1, HIGH);
digitalWrite(ledAlerte, LOW);
delay(1500);
digitalWrite(ledLCD, LOW);
}
if (digitalRead(buttonOnOff) == LOW) { // si appuis sur boutton ON OFF
sensorsActive = false;
digitalWrite(statusLed, HIGH);
digitalWrite(buzzer, LOW);
digitalWrite(ledLCD, HIGH);
digitalWrite(lumiere2, HIGH);
digitalWrite(lumiere1, HIGH);
digitalWrite(ledAlerte, LOW);
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("SYSTEME");
lcd.setCursor(4, 1);
lcd.print("INNACTIF");
delay(2000);
digitalWrite(ledLCD, LOW);
lcd.clear();
}
} else {
if (digitalRead(buttonOnOff) == LOW) {
sensorsActive = true;
digitalWrite(statusLed, LOW);
digitalWrite(ledLCD, HIGH);
digitalWrite(ledAlerte, LOW);
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("SYSTEME");
lcd.setCursor(5, 1);
lcd.print("ACTIF");
delay(2000);
digitalWrite(ledLCD, LOW);
lcd.clear();
for (int i=0; i < 6; i++) {
etatsensor[i] = LOW;
}
}
}
delay(200);
}
[/code]