// Projet de session 2022
// Auteur: Nathaniel Courtemanche
// Date:
// ==============================================
// Insérez ICI le commentaire d'entête du fichier
// ==============================================
#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);
// ********************************************************
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
byte etatBouton = digitalRead(BOUTON);
delay(DELAI_FILTRE_BRUIT_BOUTON);
/* while (etatBouton == true)
{
etatBouton = digitalRead(BOUTON);
delay(DELAI_FILTRE_BRUIT_BOUTON);
}*/
// Fin de Lecture du bouton
if (connexionALaCentrale()){
afficherPageEcran(systemeEnLigne);
}
} // setup
// ********************************************************
void loop()
// ********************************************************
{
afficherTemps();
} // loop()
// ********************************************************
void afficherPageEcran(Ecrans ecran, int delai = 0)
// ********************************************************
{
switch(ecran) {
case ecranOuverture:
ecranPrincipal.setCursor(COLONNE_DEBUT, LIGNE_DEBUT);
ecranPrincipal.print(F(FR_TITRE));
ecranPrincipal.setCursor(COLONNE_DEBUT, LIGNE_DEUX);
ecranPrincipal.print(F(LIGNE));
ecranPrincipal.setCursor(COLONNE_VERSION, LIGNE_TROIS);
ecranPrincipal.print(F(FR_VERSION));
ecranPrincipal.setCursor(COLONNE_PAR, LIGNE_QUATRE);
ecranPrincipal.print(F(PAR));
break;
case centraleEcranOuverture:
ecranCentraleSurveillance.setCursor(25, 20);
ecranCentraleSurveillance.setTextColor(ILI9341_RED);
ecranCentraleSurveillance.setTextSize(3);
ecranCentraleSurveillance.print(F(CENTRALE_DEBUT));
for(int i = 0; i < LARGEUR_ILI; i++)
{
ecranCentraleSurveillance.drawPixel(i, LIGNE_CENTRALE, ILI9341_WHITE);
}
ecranCentraleSurveillance.setCursor(0, 100);
ecranCentraleSurveillance.setTextColor(ILI9341_YELLOW);
ecranCentraleSurveillance.setTextSize(2);
ecranCentraleSurveillance.print(F(ATTENTE));
break;
case ecranInstruction:
ecranPrincipal.clear();
ecranPrincipal.setCursor(COLONNE_DEBUT, LIGNE_DEBUT);
ecranPrincipal.print(F(INSTRUCTION_LIGNE1));
ecranPrincipal.setCursor(COLONNE_DEBUT, LIGNE_DEUX);
ecranPrincipal.print(F(INSTRUCTION_LIGNE2));
ecranPrincipal.setCursor(COLONNE_DEBUT, LIGNE_TROIS);
ecranPrincipal.print(F(INSTRUCTION_LIGNE3));
ecranPrincipal.setCursor(COLONNE_DEBUT, LIGNE_QUATRE);
ecranPrincipal.print(F(INSTRUCTION_LIGNE4));
break;
case systemeEnLigne:
ecranPrincipal.clear();
ecranPrincipal.setCursor(COLONNE_SYSTEME, LIGNE_DEBUT);
ecranPrincipal.print("Systeme en ligne");
ecranPrincipal.setCursor(COLONNE_DEBUT, LIGNE_DEUX);
ecranPrincipal.print(F(LIGNE));
ecranPrincipal.setCursor(COLONNE_FIN, LIGNE_TROIS);
ecranPrincipal.print("Fin de l'etape 01");
ecranPrincipal.setCursor(COLONNE_DEBUT, LIGNE_QUATRE);
ecranPrincipal.print(LIGNE);
ecranCentraleSurveillance.setCursor(0, 150);
ecranCentraleSurveillance.setTextColor(ILI9341_YELLOW);
ecranCentraleSurveillance.setTextSize(2);
ecranCentraleSurveillance.print("Systeme en ligne");
break;
case centraleSystemeEnLigne:
break;
}
delay(delai);
} // afficherPageEcran
// ********************************************************
void initialisationDesAppareils()
// ********************************************************
{
Serial1.begin(UART_VITESSE); //Initialisation du UART de la centrale
Serial3.begin(UART_VITESSE); //Initialisation du UART du système d alarme
ecranPrincipal.begin(LCD_NB_COLONNE, LCD_NB_LIGNE); //Initialisation de la LCD
ecranCentraleSurveillance.begin(); //Initialisation du TFT
pinMode(BOUTON, INPUT); //Initialisation du bouton
horloge.begin(); //Initialisation du 4-digit
affichageHorloge.init(); //Initialisation du RTC
affichageHorloge.set(LUMIERE);
} // initialisationDesAppareils
// ********************************************************
boolean connexionALaCentrale()
// ********************************************************
{
Serial1.write(evenement_systeme_enligne);
delay(1000);
if(Serial3.available()) {
Serial << F(TENTATIVE);
byte unMessage = Serial3.read();
if(unMessage == evenement_systeme_enligne) {
Serial << F(SUCCESS);
return true;
}
else
{
return false;
}
}// Retourner 'true' ou 'false' selon le cas.
} // connexionALaCentrale
// ********************************************************
void afficherTemps()
// ********************************************************
{
static unsigned long int momentPresent = millis();
horloge.getTime();
affichageHorloge.point(true);
affichageHorloge.display(0, horloge.hour /10);
affichageHorloge.display(1, horloge.hour % 10);
affichageHorloge.display(2, horloge.minute /10);
affichageHorloge.display(3, horloge.minute % 10);
affichageHorloge.point(false);
if (millis() - momentPresent >= UNE_SECONDE) {
momentPresent = millis();
}
} // afficherTemps