// Projet de session 2022
// Document de départ
// ==============================================
// 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
// ...
// Fin de Lecture du bouton
bool ecran = false;
while(!ecran) //Boucle et permet de garder l'écrans 1 avant que le boutton rouge sois appuyée
{
afficherTemps();
if(digitalRead(BUTTON_PIN))
{
delay(BRUIT_BUTTON); //Bruit qui compense pour le délai du bouton
while(digitalRead(BUTTON_PIN)) //Permet de changer d'écrans seulment quand le bouton est relaché
{
delay(BRUIT_BUTTON);
afficherTemps();
}
ecran = true;
}
}
if (connexionALaCentrale()){
afficherPageEcran(systemeEnLigne);
}
} // setup
// ********************************************************
void loop()
// ********************************************************
{
afficherTemps();
} // loop()
// ********************************************************
void afficherPageEcran(Ecrans ecran, int delai = 0)
// ********************************************************
{
switch (ecran) //
{
case ecranOuverture: //Écran d'ouverture sur le lcd
ecranPrincipal.setCursor(1,0);
ecranPrincipal.print(LCD_ECRAN1_1);
ecranPrincipal.setCursor(0,1);
for (int i = 0; i < 20; i++) //Créer une boucle pour afficher une ligne
{
ecranPrincipal.print('-');
}
ecranPrincipal.setCursor(3,2);
ecranPrincipal.print(LCD_ECRAN1_2);
ecranPrincipal.setCursor(4,3);
ecranPrincipal.print(LCD_ECRAN1_3);
break;
case centraleEcranOuverture: //Écran d'ouverture sur le ILI
//Dessine sur le ILI
ecranCentraleSurveillance.setCursor(ILI_POSITION1);
ecranCentraleSurveillance.setTextColor(ILI9341_RED); //Couleur rouge
ecranCentraleSurveillance.setTextSize(ILI_TAILLE1); //Taille: 3
ecranCentraleSurveillance.println(ILI_ECRAN1_1);
ecranCentraleSurveillance.setTextColor(ILI9341_WHITE); //Couleur white
ecranCentraleSurveillance.println("_____________");
ecranCentraleSurveillance.setCursor(0,120);
ecranCentraleSurveillance.setTextColor(ILI9341_YELLOW); //Couleur jaune
ecranCentraleSurveillance.setTextSize(ILI_TAILLE2); //Taille: 2
ecranCentraleSurveillance.println("Attente de connexion du client ...");
break;
case centraleSystemeEnLigne:
break;
case ecranAuteur:
break;
case ecranInstruction: //Montre les intructions
ecranPrincipal.setCursor(0,0);
ecranPrincipal.print(LCD_ECRAN2_1);
ecranPrincipal.setCursor(0,1);
ecranPrincipal.print(LCD_ECRAN2_2);
ecranPrincipal.setCursor(0,2);
ecranPrincipal.print(LCD_ECRAN2_3);
ecranPrincipal.setCursor(0,3);
ecranPrincipal.print(LCD_ECRAN2_4);
break;
case ecranPIN:
break;
case systemeEnLigne: //Écran sur le lcd et le ILI quand ils sont connectés
ecranPrincipal.setCursor(0,0);
ecranPrincipal.print(LCD_ECRAN3_1);
ecranPrincipal.setCursor(0,1);
for (int i = 0; i < 20; i++)
{
ecranPrincipal.print('-');
}
ecranPrincipal.setCursor(0,2);
ecranPrincipal.print(LCD_ECRAN3_2);
ecranPrincipal.setCursor(0,3);
for (int i = 0; i < 20; i++)
{
ecranPrincipal.print('-');
}
ecranCentraleSurveillance.setCursor(0,170);
ecranCentraleSurveillance.println("Systeme en ligne");
break;
default:
break;
}
delay(delai); //Rajoute un delai si l'appelle de la fonction en donne un
} // afficherPageEcran
// ********************************************************
void initialisationDesAppareils()
// ********************************************************
{
//Initialisation du UART de la centrale
Serial1.begin(UART_VITESSE_CONSOLE);
//Initialisation du UART du système d alarme
Serial3.begin(UART_VITESSE_CONSOLE);
//Initilisation du LCD
ecranPrincipal.begin(LCD_NB_COLONNE,LCD_NB_LIGNE);
//Initialisation du TFT
ecranCentraleSurveillance.begin();
//Initialisation du bouton
pinMode(BUTTON_PIN, INPUT);
//Initialisation du 4-digit
affichageHorloge.init();
affichageHorloge.set(BRIGHTEST);
//Initialisation du RTC
horloge.begin();
} // initialisationDesAppareils
// ********************************************************
boolean connexionALaCentrale()
// ********************************************************
{
// Retourner 'true' ou 'false' selon le cas.
Serial1.write(evenement_systeme_enligne); //Envoie le message
delay(UNE_SECONDE); //Attendre une seconde
if(Serial3.available()) //Seulement si le Serial3 recoit
{
byte message = Serial3.read(); //Met en variable le byte reçu
if(message == evenement_systeme_enligne) //Si le message reçu est le bon retourne true
{
return true;
}
}
return false; //Sinon retourne false
} // connexionALaCentrale
// ********************************************************
void afficherTemps()
// ********************************************************
{
horloge.getTime(); //Actualiser le temps
affichageHorloge.display(0, horloge.hour / 10); // Affiche séparement les dizaines et les unité des heures
affichageHorloge.display(1, horloge.hour % 10);
affichageHorloge.display(2, horloge.minute / 10); // Affiche séparement les dizaines et les unité des minute
affichageHorloge.display(3, horloge.minute % 10);
affichageHorloge.point(chaqueSeconde()); // Affiche les deux points chaque seconde
} // afficherTemps
bool chaqueSeconde()
{
static long momentPresent = millis();
static bool estTrue = false;
if(millis() - momentPresent >= 1000)
{
estTrue = !estTrue; //Inverse la valeur de estTrue
momentPresent = millis();
}
return estTrue; //retourne la valeur de estTrue
}