/*
-----------------------------------------------------------------------
Projet: Épreuve synthèse - volet B -2022
Nom du fichier: exam synthèse
Auteur: Lilianne Bilodeau
Date: 2022.12.19
-----------------------------------------------------------------------
Description: detecteur de mouvement qui envoie et échange des messages
module Arduino mega
-----------------------------------------------------------------------
1-tentative
2-if available
3-nom case 1(sys enligne)
4-successsss
5-detecteur mouvement
6-aviser centrale
7-nom fonction enoyer msg
8-if available
9-msg recu +nom
-----------------------------------------------------------------------
*/
#include "synthese.h"
// ********************************************************
// Déclaration des fonctions
void initialisationDesAppareils();
// ********************************************************
// ********************************************************
// Variables Globales
LiquidCrystal_I2C ecranPrincipal(LCD_ADRESSE_I2C, LCD_NB_COLONNE, LCD_NB_LIGNE);
// ********************************************************
// ********************************************************
// Début du programme
// ********************************************************
// ********************************************************
void setup()
// ********************************************************
{
Serial.begin(UART_VITESSE_CONSOLE);
initialisationDesAppareils();
ecranPrincipal.setCursor(0, 1);
ecranPrincipal << "Connexion ....";
// NOTE: ===> Il faut remplacer 'connexionALaCentrale()' par
if (envoyerMessageVersLaCentrale(evenement_systeme_enligne) == ACK_evenement_systeme_enligne)
{
ecranPrincipal.setCursor(0, 2);
ecranPrincipal << "Systeme en ligne";
}
}
// ********************************************************
void loop()
// ********************************************************
{
bool alarmeON = true;
afficherTempsEcoule();
if (digitalRead(DETECTEUR_MOUVEMENT_ENTREE))
{
digitalWrite(LED_R, HIGH);
Serial << "DETECTEUR_MOUVEMENT_ENTREE\n";
ecranPrincipal.clear();
ecranPrincipal << "Detection mouvement";
Serial << "Aviser la centrale de l'intrusion\n";
envoyerMessageVersLaCentrale(evenement_detection_mouvement);
while (digitalRead(DETECTEUR_MOUVEMENT_ENTREE)); // S'assurer que le détecteur est détendu.
ecranPrincipal.clear();
}
static int nbFoisBouton = 0;
if (digitalRead(BOUTON))
{
delay(5);
envoyerMessageVersLaCentrale(evenement_bouton_panique);
delay(500);
digitalWrite(LED_V, HIGH);
delay(500);
digitalWrite(LED_V, LOW);
while (digitalRead(BOUTON));
delay(5);
}
} // loop()
// ********************************************************
void initialisationDesAppareils()
// ********************************************************
{
pinMode(LED_R, OUTPUT);
pinMode(LED_V, OUTPUT);
pinMode(BOUTON, INPUT);
ecranPrincipal.begin(LCD_NB_COLONNE, LCD_NB_LIGNE);
ecranPrincipal.backlight();
ecranPrincipal << "Initialisation...";
UART_SYSTEME_ALARME.begin(UART_VITESSE_CENTRALE);
UART_CENTRALE.begin(UART_VITESSE_CENTRALE);
pinMode(DETECTEUR_MOUVEMENT_ENTREE, INPUT);
} // initialisationDesAppareils
// ********************************************************
boolean envoyerMessageVersLaCentrale(codesAlarme message)
// ********************************************************
{
byte codeAlarme;
Serial << F("envoyerMessageVersLaCentrale") << endl;
UART_SYSTEME_ALARME.write(message);
delay(DELAI_TRANSMISSION_MESSAGE);
//2---
if (UART_CENTRALE.available()) {
Serial << F("UART_CENTRALE.available()") << endl;
/*Serial << F("La centrale a reçu le message: ");*/
codeAlarme = UART_CENTRALE.read();
switch (codeAlarme) {
case evenement_systeme_enligne:
//1---
Serial << F("Tentative de connexion à la centrale ...") << endl;
UART_SYSTEME_ALARME.write(evenement_systeme_enligne);
delay(DELAI_TRANSMISSION_MESSAGE);
Serial << F("evenement_systeme_enligne") << endl;
Serial << F("Succes: Connexion à la centrale ...") << endl;
UART_CENTRALE.write(ACK_evenement_systeme_enligne);
//afficherPageEcran(centraleSystemeEnLigne);
return ACK_evenement_systeme_enligne;
break;
case evenement_detection_mouvement:
Serial << F("evenement_detection_mouvement") << endl;
UART_CENTRALE.write(ACK_evenement_detection_mouvement);
digitalWrite(LED_R, LOW);
return ACK_evenement_detection_mouvement;
break;
case evenement_bouton_panique:
UART_CENTRALE.write(ACK_evenement_bouton_panique);
return ACK_evenement_bouton_panique;
break;
default:
Serial << "Evenement non traité" << endl;
break;
} // switch
} // if available()
return false;
} // connexionALaCentrale
// ***************************************************
void afficherTempsEcoule()
// ***************************************************
{
static unsigned long depart = millis();
if (millis() - depart < UNE_SECONDE) return;
char bufferLigneLCD[21]; // Vecteur pour construire le message à afficher
depart = millis(); // Réinitialiser le temps qui passe ...
unsigned long tempsEcoule = millis() / 1000;
int secondes = tempsEcoule % 60;
int minutes = (tempsEcoule / 60 ) % 60;
int heures = (tempsEcoule / 3600 ) % 24;
int jours = 0;
snprintf(bufferLigneLCD, LCD_NB_COLONNE + 1, "Actif: %03d, %02d:%02d:%02d", 0, heures, minutes, secondes );
ecranPrincipal.setCursor(LCD_PREMIERE_COLONNE, LCD_LIGNE4);
ecranPrincipal.print(bufferLigneLCD);
} // afficherTemps()
// ********************************************************
// Fin du programme
// ********************************************************