From cf50debfd0f70f1fd468af9fe26655b2e5c9dd64 Mon Sep 17 00:00:00 2001 From: Yohan Boujon Date: Mon, 27 Nov 2023 23:06:42 +0100 Subject: [PATCH] Added Loading screen when connected. Showing basic loop when finished. Fixed padding. --- embedded/lib/Component/Screen.cpp | 19 ++++++++++++++++--- embedded/lib/Component/Screen.hpp | 5 +++-- embedded/lib/Component/ScreenComponents.cpp | 10 ++++++---- embedded/lib/Component/ScreenComponents.hpp | 1 + embedded/lib/ServerHandler/ServerHandler.cpp | 15 +++++++++++---- embedded/lib/ServerHandler/ServerHandler.hpp | 5 +++++ embedded/src/main.cpp | 10 ++++++++-- 7 files changed, 50 insertions(+), 15 deletions(-) diff --git a/embedded/lib/Component/Screen.cpp b/embedded/lib/Component/Screen.cpp index 006731e..1cfeeb8 100644 --- a/embedded/lib/Component/Screen.cpp +++ b/embedded/lib/Component/Screen.cpp @@ -1,6 +1,7 @@ #include "Screen.hpp" #include #include +#include using namespace Display; @@ -10,6 +11,7 @@ Screen::Screen() _screen->begin(); _width = _screen->getDisplayWidth(); _height = _screen->getDisplayHeight(); + _loading = ""; } Screen::~Screen() @@ -34,6 +36,7 @@ uint16_t Screen::setupHeader(const uint16_t w_padding, const uint16_t h_padding) // calculating y position const uint16_t y = FONT_SIZE + ((w_padding + 1) * 2); _screen->drawButtonUTF8(w_padding, y, U8G2_BTN_INV, _screen->getDisplayWidth(), h_padding, w_padding, "Clover Setup"); + _screen->setFont(_font); return y; } @@ -67,8 +70,9 @@ void Screen::connecting(uint8_t state) _screen->sendBuffer(); } -void Screen::connected(const char *ipaddress) +void Screen::connected(const char *ipaddress, uint8_t timing) { + // Displaying connecting text and setup bar. _screen->clearBuffer(); const auto setupPadding = setupHeader(); @@ -76,7 +80,16 @@ void Screen::connected(const char *ipaddress) // Reactive Component connectedWindow.Update(2, ipaddress); // Displaying - connectedWindow.Display(StyleHeight::CENTERED, setupPadding + 5, 2); + connectedWindow.Display(StyleHeight::CENTERED, setupPadding, 4); + + // Creating loading timing + if(timing !=0) + { + _screen->setFont(u8g2_font_3x3basic_tr); + _loading.concat(" "); + _screen->drawButtonUTF8(0, _screen->getDisplayHeight()-5, U8G2_BTN_INV, _screen->getStrWidth(_loading.c_str()), 0, 0, _loading.c_str()); + _screen->setFont(_font); + } _screen->sendBuffer(); } @@ -84,7 +97,7 @@ void Screen::loop() { _screen->clearBuffer(); // clear the internal memory _screen->setFont(_font); - _screen->drawStr(0, 10, "Hello World!"); // write something to the internal memory + _screen->drawStr(0, 10, "Hello Plant!"); // write something to the internal memory _screen->sendBuffer(); // transfer internal memory to the display delay(1000); } diff --git a/embedded/lib/Component/Screen.hpp b/embedded/lib/Component/Screen.hpp index 30a13b0..06cb975 100644 --- a/embedded/lib/Component/Screen.hpp +++ b/embedded/lib/Component/Screen.hpp @@ -7,7 +7,7 @@ namespace Display { - constexpr uint8_t FONT_SIZE=8; + constexpr uint8_t FONT_SIZE=6; class Screen { @@ -21,7 +21,7 @@ namespace Display // Public functions void Setup(uint8_t *font); void connecting(uint8_t state = 0); - void connected(const char *ipaddress); + void connected(const char *ipaddress, uint8_t timing); void loop(); // Getters uint16_t getHeight(); @@ -43,6 +43,7 @@ namespace Display uint8_t *_font; uint16_t _width; uint16_t _height; + String _loading; // Static Components Components connectingWindow; diff --git a/embedded/lib/Component/ScreenComponents.cpp b/embedded/lib/Component/ScreenComponents.cpp index 917a4a4..c1cd4d6 100644 --- a/embedded/lib/Component/ScreenComponents.cpp +++ b/embedded/lib/Component/ScreenComponents.cpp @@ -32,16 +32,17 @@ void Components::Display(StyleHeight sh, uint16_t offset, uint16_t padding) const auto centeredOffset = (Screen::GetInstance().getHeight() - totalTextSize) - offset; for (size_t i = 0; i < _boxes.size(); i++) { + const auto x = (_boxes[i].getStyleWidth() == StyleWidth::CENTERED) ? _boxes[i].getX() : _boxes[i].getX()+padding*i; switch (sh) { case StyleHeight::TOP: - Screen::GetInstance().getScreen().drawButtonUTF8(_boxes[i].getX()+padding*i, (i * FONT_SIZE)+offset+padding*i, _boxes[i].getStyle(), _boxes[i].getTextWidth(), padding, padding, _boxes[i].getString()); + Screen::GetInstance().getScreen().drawButtonUTF8(x, (i * FONT_SIZE)+offset+padding*i, _boxes[i].getStyle(), _boxes[i].getTextWidth(), padding, padding, _boxes[i].getString()); break; case StyleHeight::CENTERED: - Screen::GetInstance().getScreen().drawButtonUTF8(_boxes[i].getX()+padding*i, ((centeredOffset / 2)+i*FONT_SIZE)+offset+padding*i, _boxes[i].getStyle(), _boxes[i].getTextWidth(), padding, padding, _boxes[i].getString()); + Screen::GetInstance().getScreen().drawButtonUTF8(x, ((centeredOffset / 2)+i*FONT_SIZE)+offset+padding*i, _boxes[i].getStyle(), _boxes[i].getTextWidth(), padding, padding, _boxes[i].getString()); break; case StyleHeight::BOTTOM: - Screen::GetInstance().getScreen().drawButtonUTF8(_boxes[i].getX()+padding*i, (centeredOffset + i * FONT_SIZE)+offset+padding*i, _boxes[i].getStyle(), _boxes[i].getTextWidth(), padding, padding, _boxes[i].getString()); + Screen::GetInstance().getScreen().drawButtonUTF8(x, (centeredOffset + i * FONT_SIZE)+offset+padding*i, _boxes[i].getStyle(), _boxes[i].getTextWidth(), padding, padding, _boxes[i].getString()); break; } } @@ -79,4 +80,5 @@ void TextBox::updateString(String str) Calculate(); } u8g2_uint_t TextBox::getStyle() { return _style; } -uint16_t TextBox::getTextWidth() { return _textWidth; } \ No newline at end of file +uint16_t TextBox::getTextWidth() { return _textWidth; } +StyleWidth TextBox::getStyleWidth() { return _styleWidth; } \ No newline at end of file diff --git a/embedded/lib/Component/ScreenComponents.hpp b/embedded/lib/Component/ScreenComponents.hpp index a783588..1a606eb 100644 --- a/embedded/lib/Component/ScreenComponents.hpp +++ b/embedded/lib/Component/ScreenComponents.hpp @@ -31,6 +31,7 @@ namespace Display void updateString(String str); u8g2_uint_t getStyle(); uint16_t getTextWidth(); + StyleWidth getStyleWidth(); private: void Calculate(); String _text; diff --git a/embedded/lib/ServerHandler/ServerHandler.cpp b/embedded/lib/ServerHandler/ServerHandler.cpp index 0cf585c..6983c88 100644 --- a/embedded/lib/ServerHandler/ServerHandler.cpp +++ b/embedded/lib/ServerHandler/ServerHandler.cpp @@ -1,7 +1,7 @@ #include "ServerHandler.hpp" #include "Screen.hpp" -ServerHandler::ServerHandler() : server(80) { +ServerHandler::ServerHandler() : server(80), display_time(0) { } ServerHandler::~ServerHandler() {} @@ -17,17 +17,24 @@ void ServerHandler::setup(const char* ssid, const char* password) { // On utilis state >= 3 ? state = 0: state++; } - auto ip = WiFi.localIP().toString(); - Display::Screen::GetInstance().connected(ip.c_str()); - server.begin(); server.on("/", [this]() { this->handleRoot(); }); // fonction lamda pour gérer les requettes get } void ServerHandler::loop() { + if(display_time < MAX_TIME) + { + Display::Screen::GetInstance().connected(WiFi.localIP().toString().c_str(),display_time); + display_time++; + } server.handleClient(); } +bool ServerHandler::showNext() +{ + return (display_time >= MAX_TIME); +} + void ServerHandler::handleRoot() { auto& dataHandler = DataHandler::GetInstance(); String jsonFormattedData = dataHandler.getJsonData(); diff --git a/embedded/lib/ServerHandler/ServerHandler.hpp b/embedded/lib/ServerHandler/ServerHandler.hpp index 3ea8757..bf233ae 100644 --- a/embedded/lib/ServerHandler/ServerHandler.hpp +++ b/embedded/lib/ServerHandler/ServerHandler.hpp @@ -6,6 +6,8 @@ #include "DataHandler.hpp" +constexpr uint8_t MAX_TIME = 28; + class ServerHandler { public: // Singleton @@ -17,6 +19,8 @@ public: // Public functions void setup(const char* ssid, const char* password); void loop(); + // Return if the screen needs to be changed. + bool showNext(); private: // Singleton @@ -27,6 +31,7 @@ private: // Private variables/functions void handleRoot(); ESP8266WebServer server; + uint8_t display_time; }; #endif diff --git a/embedded/src/main.cpp b/embedded/src/main.cpp index 47f681a..8659b95 100644 --- a/embedded/src/main.cpp +++ b/embedded/src/main.cpp @@ -18,7 +18,7 @@ Component humidity(ComponentType::Analog, PIN_A0); void setup() { Serial.begin(9600); - Display::Screen::GetInstance().Setup(const_cast(u8g2_font_helvB08_tr)); + Display::Screen::GetInstance().Setup(const_cast(u8g2_font_profont10_tr)); ServerHandler::GetInstance().setup(ssid, pswd); } @@ -26,12 +26,18 @@ void loop() { auto& serverHandler = ServerHandler::GetInstance(); auto& dataHandler = DataHandler::GetInstance(); + auto& screen = Display::Screen::GetInstance(); + + // If serverHandler finished showing ip. + if (serverHandler.showNext()) + screen.loop(); dataHandler.updateTemperatureData(random(1800, 2200) / 100.0); // 0 -> air(0), 0-300 -> dry(20), 300-700 -> humid (580), 700-950 -> water(940) dataHandler.updateHumidityData(static_cast(std::any_cast(humidity.getValue()))); Serial.println(dataHandler.getJsonData()); - delay(1000); + // When showing IP, delay is faster. + delay(serverHandler.showNext() ? 1000 : 250); serverHandler.loop(); } \ No newline at end of file