#include "TFT_eSPI.h" #include "RTC_SAMD51.h" #include "DateTime.h" RTC_SAMD51 rtc; TFT_eSPI tft; // nous incluons ici toutes les librairies necessaires pour le bon fonctionnement du projet int X_MAX = 320; int Y_MAX = 240; int visit_total = 0; // Initialize visit_total to 0 int affluence = 0; // Initialize affluence to 0 int ancien_visit_total = 0; int ancien_affluence = 0; int y = Y_MAX/5; int background = TFT_GREEN; int etatmessage15 = 0; DateTime now = DateTime(F(__DATE__), F(__TIME__)); //toutes les variables globales utiliser durant le projet void setup() { rtc.begin(); tft.begin(); tft.setRotation(3); // Orientation de l'écran tft.fillScreen(background); // Fond d'écran de couleure verte au départ Serial.begin(115200); while (!Serial) // attente de la communication série { tft.setTextColor(TFT_BLACK); tft.setTextSize(3); tft.drawString("Need Serial Com", 10, 100); } tft.setTextColor(TFT_GREEN); tft.drawString("Need Serial Com", 10, 100); // On enlève le message pinMode(WIO_KEY_A, INPUT_PULLUP); pinMode(WIO_KEY_B, INPUT_PULLUP); pinMode(WIO_KEY_C, INPUT_PULLUP); pinMode(WIO_5S_PRESS, INPUT_PULLUP); pinMode(WIO_5S_UP, INPUT_PULLUP); affiche(); // fonction qui affiche les visiteurs totaux et le nombre actuel affBandeauBleu(); // fonction qui affiche le bandeau bleu affHeure(); // fonction qui affiche l'heure sur le bandeau bleu rtc.adjust(now); // utile pour l'heure } void loop() { // appel en continue afin de mettre à jour le nombre de visiteur, // puis pour modifier l'heure // et enfin pour afficher le message qui s'affiche toutes les 15 minutes visiteur(); affHeure(); message15(); message(); } void affBandeauBleu() { tft.fillRect(0, 0, X_MAX, y, TFT_BLUE); tft.drawChar(10, 10, '+', TFT_BLACK, TFT_BLUE, 3); tft.drawChar(80, 10, '-', TFT_BLACK, TFT_BLUE, 3); tft.setTextColor(TFT_BLACK); tft.setTextSize(3); tft.drawString("RAZ", 155, 10); tft.drawChar(275, 10, ':', TFT_BLACK, TFT_BLUE, 3); //sprintf(&s,"%d + %d = %d", a, b, c); } void affHeure() { tft.setTextColor(TFT_BLUE); tft.drawNumber(now.hour(), 240, 10); tft.drawNumber(now.minute(), 285, 10); now = rtc.now(); tft.setTextColor(TFT_BLACK); tft.drawNumber(now.hour(), 240, 10); tft.drawNumber(now.minute(), 285, 10); } void message15(){ if(now.minute() == 0 || now.minute() == 15 || now.minute() == 30 || now.minute() == 45 || now.minute() == 60){ if(etatmessage15 == 0 ){ Serial.println("--------"); Serial.print("heure : "); Serial.print(now.hour()); Serial.print(":"); Serial.println(now.minute()); Serial.print("visiteur : "); Serial.println(visit_total); Serial.print("affluence : "); Serial.println(affluence); Serial.println("--------"); etatmessage15 = 1; } } if(now.minute() != 0 && now.minute() != 15 && now.minute() != 30 && now.minute() != 45 && now.minute() != 60 ){ etatmessage15 = 0; } } void message(){ String val; val = Serial.readString(); Serial.print(val); if(val != NULL){ tft.setTextColor(TFT_BLACK); tft.setTextSize(3); tft.drawString("Nouveau Message !", 10, 50); } } void visiteur() { int etat = 0; if (digitalRead(WIO_KEY_B) == LOW) { ancien_affluence = affluence; affluence = affluence -1; // Decrease affluence if(affluence < 0){ affluence = 0; } if(affluence <= 10){ background = TFT_GREEN; tft.fillScreen(background); // Green background affiche(); affBandeauBleu(); affHeure(); } efface(); affiche(); } else if (digitalRead(WIO_KEY_C) == LOW) { ancien(); affluence = affluence +1; // incrémente l'affluence visit_total = visit_total +1; // Incrémente visit_total if(affluence == 11) tone(WIO_BUZZER, 442); // buzzer dès qu'il monte à 11, pas quand il redescend if(affluence > 10){ background = TFT_RED; // background rouge tft.fillScreen(background); // background vert affiche(); affBandeauBleu(); // réaffiche le bandeau bleu noTone(WIO_BUZZER); // arrêt du buzzer affHeure(); //réaffiche l'heure } efface(); // efface le nombre précédent affiche(); // affiche le nouveau nombre } else if (digitalRead(WIO_KEY_A) == LOW) { tft.setTextColor(TFT_BLACK); tft.setTextSize(3); tft.drawString("Confirmez ?", 110, 200); etat = compteur(); if(etat == 1){ ancien(); visit_total = 0; affluence = 0; etat = 0; Serial.println("remise à 0 !!! "); Serial.println("--------"); Serial.print("heure : "); Serial.print(now.hour()); Serial.print(":"); Serial.println(now.minute()); Serial.print("visiteur : "); Serial.println(visit_total); Serial.print("affluence : "); Serial.println(affluence); Serial.println("--------"); } tft.setTextColor(background); tft.setTextSize(3); tft.drawString("Confirmez ?", 110, 200); efface(); affiche(); background = TFT_GREEN; tft.fillScreen(background); // Green background affiche(); affBandeauBleu(); affHeure(); } delay(200); } void ancien(){ ancien_visit_total = visit_total; ancien_affluence = affluence; } void efface(){ tft.setTextColor(background); tft.setTextSize(3); tft.drawString("visit_total", 10, 100); tft.drawNumber(ancien_visit_total, 250, 100); tft.drawString("affluence", 10, 150); tft.drawNumber(ancien_affluence, 250, 150); } void affiche(){ tft.setTextColor(TFT_BLACK); tft.setTextSize(3); tft.drawString("visit_total", 10, 100); tft.drawNumber(visit_total, 250, 100); tft.drawString("affluence", 10, 150); tft.drawNumber(affluence, 250, 150); } int compteur(){ int i = 5; while( i > 0){ delay(1000); i--; if(digitalRead(WIO_5S_PRESS) == LOW){ return 1; } } return 0; }