// Projet de session 2022
// Document de départ;
// ==============================================
// Projet: Projet de session 2022
// Auteur: Anthony Olaru
// Date: 2022.12.02
// ==============================================
#include "mesdefines.h"
// NOTE IMPORTANTE: Ne placez aucune macro, enum, déclaration de fonctions,
// const,include (sauf pour 'mesdefines.h),dans ce fichier.
// Déclaration des objets à portée globale:
TM1637 affichageHorloge(CLK, DIO);
DS1307 horloge;
Adafruit_ILI9341 ecranCentraleSurveillance = Adafruit_ILI9341(TFT_CS, TFT_DC);
LiquidCrystal_I2C ecranPrincipal(LCD_ADRESSE_I2C, LCD_NB_COLONNE, LCD_NB_LIGNE);
// ******************************************************** LCD_ADRESSE_I2C,LCD_NB_COLONNE,,,,LCD_NB_LIGNE
void setup()
// ********************************************************
{
Serial.begin(UART_VITESSE_CONSOLE);
//NOTE: Placer une chaine de caractères entre F() permet de la stocker
// dans la mémoire programme au lieu de la mémoire variable.
//
// Étant donné qu'il n'y a pas beaucoup de mémoire variable,
// c'est une bonne pratique.
Serial << F(MSG_DEMARRAGE_DU_PROJET);
Serial << F(MSG_PROJET_PAR);
Serial << F(MSG_DEBUT_INIT);
initialisationDesAppareils();
Serial << F(MSG_FIN_INIT);
afficherPageEcran(centraleEcranOuverture);
afficherPageEcran(ecranOuverture, UNE_SECONDE * 2);
afficherPageEcran(ecranInstruction);
// Début de Lecture du bouton et affichage de l'heure en mode non bloquant
int bouton = 0;
while(bouton == 0)
{
if (digitalRead(BUTTON))
{
Serial << "Bouton enfoncé\n";
delay(5);
// Permet d'éviter que le bouton reste enfoncé
bouton++;
while (digitalRead(BUTTON));
delay(5);
}
}
// Fin de Lecture du bouton
if (connexionALaCentrale())
{
afficherPageEcran(systemEnLigne);
}
while(bouton == 0)
{
if (digitalRead(BUTTON))
{
Serial << "Bouton enfoncé\n";
delay(5);
// Permet d'éviter que le bouton reste enfoncé
bouton++;
while (digitalRead(BUTTON));
delay(5);
}
}
// Fin de Lecture du bouton
if (connexionALaCentrale())
{
afficherPageEcran(ecranAuteur);
}
} // setup
// ********************************************************
void loop()
// ********************************************************
{
afficherTemps();
if (Alarmes( evenement_dection_mouvement))
{
afficherPageEcran(ecranPIN);
}
} // loop()
// ********************************************************
void afficherPageEcran(Ecrans ecran, int delai = 0)
// ********************************************************
{
switch(ecran)
{
// Afficher l'écran 1
case ecranOuverture:
ecranPrincipal.backlight();
ecranPrincipal.setCursor(0,0);
ecranPrincipal.print(F(titre));
ecranPrincipal.setCursor(0,1);
ecranPrincipal.print(F(separateur));
ecranPrincipal.setCursor(0,2);
ecranPrincipal.print(F(etape));
ecranPrincipal.setCursor(0,3);
ecranPrincipal.print(F(matricule));
Serial << "afficherPageEcran\n";
break;
// Afficher l'écran 1 du ILI9341
case centraleEcranOuverture:
Serial << "Debut ecranCentraleSurveillance\n";
ecranCentraleSurveillance.setCursor(26, 26);
ecranCentraleSurveillance.setTextColor(ILI9341_RED);
ecranCentraleSurveillance.setTextSize(3);
ecranCentraleSurveillance.print(SURVEILLANCE);
ecranCentraleSurveillance.setCursor(10, 80);
ecranCentraleSurveillance.setTextColor(ILI9341_WHITE);
ecranCentraleSurveillance.setTextSize(2);
ecranCentraleSurveillance.print(separateur_ILI9341);
ecranCentraleSurveillance.setCursor(0, 110);
ecranCentraleSurveillance.setTextColor(ILI9341_YELLOW);
ecranCentraleSurveillance.print(ATTENTE_CLIENT);
Serial << "Fin ecranCentraleSurveillance\n";
break;
// Afficher l'écran 2 du LCD
case ecranInstruction:
delay(2000);
Serial << "Debut ecranInstruction\n";
ecranPrincipal.clear();
ecranPrincipal.print(MESSAGE_LIGNE1);
ecranPrincipal.setCursor(0,1);
ecranPrincipal.print(MESSAGE_LIGNE2);
ecranPrincipal.setCursor(0,2);
ecranPrincipal.print(MESSAGE_LIGNE3);
ecranPrincipal.setCursor(0,3);
ecranPrincipal.print(MESSAGE_LIGNE4);
Serial << "Fin ecranInstruction\n";
break;
// Afficher l'écran 3 sur ILI et LCD
case systemEnLigne:
Serial << "Debut systemeEnLigne\n";
ecranPrincipal.clear();
ecranPrincipal.setCursor(2,0);
ecranPrincipal.print(SYSTEME_EN_LIGNE);
ecranPrincipal.setCursor(0,1);
ecranPrincipal.print(separateur);
ecranPrincipal.setCursor(0,2);
ecranPrincipal.print(FIN_ETAPE);
ecranPrincipal.setCursor(0,3);
ecranPrincipal.print(separateur);
ecranCentraleSurveillance.setCursor(0, 158);
ecranCentraleSurveillance.print(SYSTEME_EN_LIGNE);
Serial << "Fin systemeEnLigne\n";
break;
case ecranAuteur:
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
Serial << "Debut ecranAuteur\n";
ecranPrincipal.clear();
ecranPrincipal.setCursor(1,0);
ecranPrincipal.print("Alarme 420-1c4 inc");
ecranPrincipal.setCursor(0,1);
ecranPrincipal.print("--------------------");
ecranPrincipal.setCursor(0,3);
ecranPrincipal.print("Actif: 000, 00:0 :");
int secondes = 00;
int minutes = 0;
int val = 0;
int pirState = LOW;
while (secondes <= 60)
{
ecranPrincipal.setCursor(18,3);
ecranPrincipal.print(secondes);
ecranPrincipal.setCursor(16,3);
ecranPrincipal.print(minutes);
secondes++;
delay(1000);
if(secondes == 60)
{
secondes = 0;
minutes ++;
}
}
Serial << "Fin ecranAuteur\n";
break;
}
} // afficherPageEcran
// ********************************************************
void initialisationDesAppareils()
// ********************************************************
{
///Initialisation du UART de la centrale
Serial3.begin(UART_VITESSE_3);
//Initialisation du UART du système d alarme
Serial1.begin(UART_VITESSE_1);
//Initilisation du LCD
ecranPrincipal.begin(LCD_NB_COLONNE, LCD_NB_LIGNE);
//Initialisation du TFT
ecranCentraleSurveillance.begin();
//Initialisation du bouton
pinMode(BUTTON, INPUT);
//Initialisation du 4-digit
affichageHorloge.init();
//Initialisation du RTC
horloge.begin();
// Initialisation de la LED
pinMode(LED, OUTPUT);
// Initialisation du SENSOR
pinMode(SENSOR, INPUT);
} // initialisationDesAppareils
// ********************************************************
boolean connexionALaCentrale()
// ********************************************************
{
// Retourner 'true' ou 'false' selon le cas.
Serial1.write(true);
delay(1000);
if(Serial3.available())
{
return true;
}
return true;
} // connexionALaCentrale
// ********************************************************
void afficherTemps()
// ********************************************************
{
#ifdef SET_TIME
horloge.fillByYMD(2021,10,26);
horloge.fillByHMS(11,27,00);
horloge.fillDayOfWeek(TUE);
horloge.setTime();
#endif
horloge.getTime();
affichageHorloge.set(BRIGHT_TYPICAL);
float heureDecimale = horloge.hour + float(horloge.minute) / 100 ;
} // afficherTemps
//boolean(evenement_detection_mouvement)
//{
// int pirState = LOW;
// int val = 0;
// val = digitalRead(SENSOR); // read input value
// if (val == HIGH) { // check if the input is HIGH
// digitalWrite(LED, HIGH); // turn LED ON
// if (pirState == LOW) {
// // we have just turned on
// Serial.println("Motion detected!");
// // We only want to print on the output change, not state
// pirState = HIGH;
// }
// } else {
// digitalWrite(LED, LOW); // turn LED OFF
// if (pirState == HIGH) {
// // we have just turned of
// Serial.println("Motion ended!");
// // We only want to print on the output change, not state
// pirState = LOW;
// }
// }
//}