From d4396b4e2abbb04a6aace0f6b76726998cc352e7 Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 17 Nov 2023 20:44:17 +0100 Subject: [PATCH 1/8] add reset time config --- config.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config.ini b/config.ini index c8e382c..ac3ca14 100644 --- a/config.ini +++ b/config.ini @@ -26,3 +26,5 @@ build_flags = -D PIXEL_PIN=4 -D PIXEL_COUNT=24 + + -D RESET_TIME=60000 -- 2.47.1 From 213456b6abeafe800056172e2bbc7760dc34a238 Mon Sep 17 00:00:00 2001 From: Clement Date: Fri, 17 Nov 2023 21:40:02 +0100 Subject: [PATCH 2/8] fix encodeur update --- lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp b/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp index 2b0edd4..af456f9 100644 --- a/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp +++ b/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp @@ -45,6 +45,9 @@ SwitchableEncodeur* SwitchableEncodeur::getInstance() { bool SwitchableEncodeur::update() { bool sortie = false; long newPosition = this->read()/4; + if(newPosition <= 0){ + newPosition = 0; + } if (newPosition != this->oldPosition || this->menu != this->oldMenu) { this->oldMenu = this->menu; this->oldPosition = newPosition; @@ -62,4 +65,5 @@ int SwitchableEncodeur::getValue() { void SwitchableEncodeur::resetValue() { this->oldPosition = 0; + this->readAndReset(); } -- 2.47.1 From cf3f14bb0705dad0351cd1f7a6bed9c51ca821fd Mon Sep 17 00:00:00 2001 From: Clement Date: Sat, 18 Nov 2023 19:03:33 +0100 Subject: [PATCH 3/8] first alog fonctionnel --- include/Program.h | 20 +++++++++- src/Program.cpp | 97 ++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 110 insertions(+), 7 deletions(-) diff --git a/include/Program.h b/include/Program.h index c49730f..8f39a37 100644 --- a/include/Program.h +++ b/include/Program.h @@ -10,7 +10,12 @@ #include "SwitchableEncodeur.h" #include "LedLib.h" - +enum MainMenu{ + INITIAL_STATE, + GET_START_HOUR, + SELECT_END_HOUR, + SEND_TO_DISCORD +}; class Program { public: @@ -46,6 +51,19 @@ private: * @param[in] timeEnd LabOuest closing time */ void sendTime(String timeEnd); + + //state of the button + MainMenu menu; + + //temps de reset in ms + ulong resetMillis; + + //numéro de led de dépard + int nLedStart; + + // apres midi + bool pm; + }; #endif diff --git a/src/Program.cpp b/src/Program.cpp index 102fdb1..08d6677 100644 --- a/src/Program.cpp +++ b/src/Program.cpp @@ -28,10 +28,9 @@ Program::Program() { this->discord = new DiscordAPI(DISCORD_HOOK); // startup NTP this->ntpUDP = new WiFiUDP(); - this->timeClient = new NTPClient(*this->ntpUDP, "pool.ntp.org", 3600*2);//*2 = gnt+2 + this->timeClient = new NTPClient(*this->ntpUDP, "pool.ntp.org", 3600*1);//*2 = gnt+2 this->timeClient->update(); - //this->sendTime("18h12"); // Startup Rotary this->encoder = new SwitchableEncodeur(ENCODER_DT, ENCODER_CLK, ENCODER_SWITCH, 3); @@ -41,6 +40,8 @@ Program::Program() { this->ledLib->okBlink(); + this->menu=MainMenu::INITIAL_STATE; + this->resetMillis = 0; } void Program::sendTime(String timeEnd){ @@ -50,14 +51,98 @@ void Program::sendTime(String timeEnd){ start += (String)(startQuater * 15); } this->discord->sendHeure(start, timeEnd); + this->nLedStart = 0; + this->pm = false; } void Program::loop() { + switch (this->menu){ + case MainMenu::INITIAL_STATE: // feault state + this->encoder->resetValue(); + this->ledLib->actLed(0,0); + break; + + case MainMenu::GET_START_HOUR:{ // get NTP Hour + //TODO: géré heure d'été et d'hiver + this->timeClient->update(); + int hour = this->timeClient->getHours(); + int min = this->timeClient->getMinutes(); + if(hour >= 12){ + hour -= 12; + this->pm = true; + }else{ + this->pm = false; + } + this->nLedStart = hour*2; + if(min >= 30){ + this->nLedStart++; + } + this->menu=MainMenu::SELECT_END_HOUR; + this->resetMillis = millis(); + //TODO: géré les mardi et jeudi + Serial.print("hour :"); + Serial.print(hour); + Serial.print(" min :"); + Serial.println(min); + break;} + + case MainMenu::SELECT_END_HOUR: // select Close hour + this->ledLib->actLed(this->encoder->getValue(), this->nLedStart); + break; + + case MainMenu::SEND_TO_DISCORD:{ // send value to discord + String strTime = ""; + int endLed = this->encoder->getValue(); + int hour = (this->nLedStart + endLed)/2; + if(this->pm){ + hour += 12; + } + strTime += hour; + strTime += "h"; + if(this->nLedStart % 2 == 1){ + if(endLed % 2 == 1){ + strTime += "30"; + } + }else{ + if(endLed % 2 == 0){ + strTime += "30"; + } + } + Serial.println(strTime); + Serial.print("Start : "); + Serial.print(this->nLedStart); + Serial.print(" End : "); + Serial.print(endLed); + Serial.print(" hour : "); + Serial.print(hour); + Serial.println(); + + this->sendTime(strTime); + this->menu = MainMenu::INITIAL_STATE; + } + break; + + default: + break; + } + // MAJ encodeur if(this->encoder->update()){ - Serial.print(this->encoder->getValue()); - this->ledLib->actLed(this->encoder->getValue(), 5); - Serial.print(" "); - Serial.println(this->encoder->getMenu()); + if(this->encoder->getMenu() == 1 && this->menu == MainMenu::INITIAL_STATE){//passage de l'état initial au 1er état + this->menu = MainMenu::GET_START_HOUR; + } + if(this->encoder->getMenu() == 2 && this->menu == MainMenu::SELECT_END_HOUR){//validation du choix de l'heure + this->menu = MainMenu::SEND_TO_DISCORD; + } + // Serial.print(this->encoder->getValue()); + // this->ledLib->actLed(this->encoder->getValue(), 10); + // Serial.print(" "); + // Serial.println(this->encoder->getMenu()); + } + // Reseteur + if(this->resetMillis + RESET_TIME == millis()){ + this->encoder->resetMenu(); + this->resetMillis = millis(); + this->menu = MainMenu::INITIAL_STATE; } // delay(1000); -- 2.47.1 From e0e9fb0bcab00f2817eca27a86299d78ce489ad9 Mon Sep 17 00:00:00 2001 From: Clement Date: Sat, 18 Nov 2023 19:33:38 +0100 Subject: [PATCH 4/8] fix main alogo error --- src/Program.cpp | 50 ++++++++++++++++--------------------------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/src/Program.cpp b/src/Program.cpp index 08d6677..57cac54 100644 --- a/src/Program.cpp +++ b/src/Program.cpp @@ -79,46 +79,43 @@ void Program::loop() { } this->menu=MainMenu::SELECT_END_HOUR; this->resetMillis = millis(); + this->ledLib->okBlink();//TODO: faire en sorte d'avoir une led d'alumé par defaut //TODO: géré les mardi et jeudi - Serial.print("hour :"); - Serial.print(hour); - Serial.print(" min :"); - Serial.println(min); break;} - case MainMenu::SELECT_END_HOUR: // select Close hour this->ledLib->actLed(this->encoder->getValue(), this->nLedStart); break; - case MainMenu::SEND_TO_DISCORD:{ // send value to discord String strTime = ""; + bool min = false; int endLed = this->encoder->getValue(); int hour = (this->nLedStart + endLed)/2; if(this->pm){ hour += 12; } - strTime += hour; - strTime += "h"; + if(hour >= 24){ + hour -= 24; + } if(this->nLedStart % 2 == 1){ if(endLed % 2 == 1){ - strTime += "30"; + hour -=1; + min = true; } }else{ if(endLed % 2 == 0){ - strTime += "30"; + hour -=1; + min = true; } } + strTime += hour; + strTime += "h"; + if(min)strTime += "30"; Serial.println(strTime); - Serial.print("Start : "); - Serial.print(this->nLedStart); - Serial.print(" End : "); - Serial.print(endLed); - Serial.print(" hour : "); - Serial.print(hour); - Serial.println(); - - this->sendTime(strTime); + //this->sendTime(strTime); this->menu = MainMenu::INITIAL_STATE; + this->encoder->resetMenu(); + this->encoder->resetValue(); + this->ledLib->okBlink(); } break; @@ -144,21 +141,6 @@ void Program::loop() { this->resetMillis = millis(); this->menu = MainMenu::INITIAL_STATE; } - // delay(1000); - - // this->timeClient->update(); - - // int currentHour = this->timeClient->getHours(); - // Serial.print("Hour: "); - // Serial.println(currentHour); - - // int currentMinute = this->timeClient->getMinutes(); - // Serial.print("Minutes: "); - // Serial.println(currentMinute); - - // int currentSecond = this->timeClient->getSeconds(); - // Serial.print("Seconds: "); - // Serial.println(currentSecond); // int currentDayOfWeek = this->timeClient->getDay(); // Serial.print("Day of week: "); -- 2.47.1 From 8c19ae96fa97a7aa42c5c8eb9500745f7726e9f9 Mon Sep 17 00:00:00 2001 From: Clement Date: Sat, 18 Nov 2023 19:34:41 +0100 Subject: [PATCH 5/8] rm commented code --- src/Program.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Program.cpp b/src/Program.cpp index 57cac54..9466cc2 100644 --- a/src/Program.cpp +++ b/src/Program.cpp @@ -130,10 +130,6 @@ void Program::loop() { if(this->encoder->getMenu() == 2 && this->menu == MainMenu::SELECT_END_HOUR){//validation du choix de l'heure this->menu = MainMenu::SEND_TO_DISCORD; } - // Serial.print(this->encoder->getValue()); - // this->ledLib->actLed(this->encoder->getValue(), 10); - // Serial.print(" "); - // Serial.println(this->encoder->getMenu()); } // Reseteur if(this->resetMillis + RESET_TIME == millis()){ -- 2.47.1 From 2e593cb4e08082e156227d6788336f23974e4354 Mon Sep 17 00:00:00 2001 From: Clement Date: Sat, 18 Nov 2023 19:44:39 +0100 Subject: [PATCH 6/8] add encodeur set value --- lib/SwitchableEncodeur/include/SwitchableEncodeur.h | 7 +++++++ lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/lib/SwitchableEncodeur/include/SwitchableEncodeur.h b/lib/SwitchableEncodeur/include/SwitchableEncodeur.h index bfa57f5..a0006a7 100644 --- a/lib/SwitchableEncodeur/include/SwitchableEncodeur.h +++ b/lib/SwitchableEncodeur/include/SwitchableEncodeur.h @@ -39,6 +39,13 @@ public: */ int getValue(); + /** + * @brief set the encodeur value + * + * @param val the new encodeur value + */ + void setValue(int val); + /** * @brief update the encodeur value * diff --git a/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp b/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp index af456f9..f0200e4 100644 --- a/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp +++ b/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp @@ -67,3 +67,7 @@ void SwitchableEncodeur::resetValue() { this->oldPosition = 0; this->readAndReset(); } + +void SwitchableEncodeur::setValue(int val){ + this->write(val*4); +} -- 2.47.1 From 92493c7d8f91dae3d7e1ec27fcda095191daa491 Mon Sep 17 00:00:00 2001 From: Clement Date: Sat, 18 Nov 2023 19:51:23 +0100 Subject: [PATCH 7/8] gestion mardi/vendredi --- src/Program.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/Program.cpp b/src/Program.cpp index 9466cc2..7f68b52 100644 --- a/src/Program.cpp +++ b/src/Program.cpp @@ -57,7 +57,7 @@ void Program::sendTime(String timeEnd){ void Program::loop() { switch (this->menu){ - case MainMenu::INITIAL_STATE: // feault state + case MainMenu::INITIAL_STATE: // default state this->encoder->resetValue(); this->ledLib->actLed(0,0); break; @@ -67,6 +67,7 @@ void Program::loop() { this->timeClient->update(); int hour = this->timeClient->getHours(); int min = this->timeClient->getMinutes(); + int day = this->timeClient->getDay(); if(hour >= 12){ hour -= 12; this->pm = true; @@ -79,8 +80,11 @@ void Program::loop() { } this->menu=MainMenu::SELECT_END_HOUR; this->resetMillis = millis(); - this->ledLib->okBlink();//TODO: faire en sorte d'avoir une led d'alumé par defaut - //TODO: géré les mardi et jeudi + if(day == 2 || day == 5){ + this->encoder->setValue(21-this->nLedStart); + }else{ + this->encoder->setValue(1); + } break;} case MainMenu::SELECT_END_HOUR: // select Close hour this->ledLib->actLed(this->encoder->getValue(), this->nLedStart); @@ -90,12 +94,7 @@ void Program::loop() { bool min = false; int endLed = this->encoder->getValue(); int hour = (this->nLedStart + endLed)/2; - if(this->pm){ - hour += 12; - } - if(hour >= 24){ - hour -= 24; - } + if(this->pm)hour += 12; if(this->nLedStart % 2 == 1){ if(endLed % 2 == 1){ hour -=1; @@ -107,11 +106,11 @@ void Program::loop() { min = true; } } + if(hour >= 24)hour -= 24; strTime += hour; strTime += "h"; if(min)strTime += "30"; - Serial.println(strTime); - //this->sendTime(strTime); + this->sendTime(strTime); this->menu = MainMenu::INITIAL_STATE; this->encoder->resetMenu(); this->encoder->resetValue(); @@ -137,6 +136,8 @@ void Program::loop() { this->resetMillis = millis(); this->menu = MainMenu::INITIAL_STATE; } + //TODO: gestion cas d'erreur (pas de wifi, discord down,...) + //TODO: gestion d'une ouverture de plus de 12h avec les led (chagement de couleur) // int currentDayOfWeek = this->timeClient->getDay(); // Serial.print("Day of week: "); -- 2.47.1 From 76a224688292156594ce9b803625c5acc19b6d5b Mon Sep 17 00:00:00 2001 From: Clement Date: Sun, 3 Dec 2023 12:23:52 +0100 Subject: [PATCH 8/8] fix negatif number --- lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp b/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp index f0200e4..907bb02 100644 --- a/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp +++ b/lib/SwitchableEncodeur/src/SwitchableEncodeur.cpp @@ -45,13 +45,14 @@ SwitchableEncodeur* SwitchableEncodeur::getInstance() { bool SwitchableEncodeur::update() { bool sortie = false; long newPosition = this->read()/4; - if(newPosition <= 0){ + if(newPosition < 0){ newPosition = 0; + this->readAndReset(); } if (newPosition != this->oldPosition || this->menu != this->oldMenu) { this->oldMenu = this->menu; this->oldPosition = newPosition; - if(this->oldPosition < 0){ + if(this->oldPosition <= 0){ this->oldPosition = 0; } sortie = true; -- 2.47.1