Added Loading screen when connected. Showing basic loop when finished. Fixed padding.

This commit is contained in:
Yohan Boujon 2023-11-27 23:06:42 +01:00
parent 72ac1f20df
commit cf50debfd0
7 changed files with 50 additions and 15 deletions

View file

@ -1,6 +1,7 @@
#include "Screen.hpp" #include "Screen.hpp"
#include <string.h> #include <string.h>
#include <vector> #include <vector>
#include <algorithm>
using namespace Display; using namespace Display;
@ -10,6 +11,7 @@ Screen::Screen()
_screen->begin(); _screen->begin();
_width = _screen->getDisplayWidth(); _width = _screen->getDisplayWidth();
_height = _screen->getDisplayHeight(); _height = _screen->getDisplayHeight();
_loading = "";
} }
Screen::~Screen() Screen::~Screen()
@ -34,6 +36,7 @@ uint16_t Screen::setupHeader(const uint16_t w_padding, const uint16_t h_padding)
// calculating y position // calculating y position
const uint16_t y = FONT_SIZE + ((w_padding + 1) * 2); 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->drawButtonUTF8(w_padding, y, U8G2_BTN_INV, _screen->getDisplayWidth(), h_padding, w_padding, "Clover Setup");
_screen->setFont(_font);
return y; return y;
} }
@ -67,8 +70,9 @@ void Screen::connecting(uint8_t state)
_screen->sendBuffer(); _screen->sendBuffer();
} }
void Screen::connected(const char *ipaddress) void Screen::connected(const char *ipaddress, uint8_t timing)
{ {
// Displaying connecting text and setup bar. // Displaying connecting text and setup bar.
_screen->clearBuffer(); _screen->clearBuffer();
const auto setupPadding = setupHeader(); const auto setupPadding = setupHeader();
@ -76,7 +80,16 @@ void Screen::connected(const char *ipaddress)
// Reactive Component // Reactive Component
connectedWindow.Update(2, ipaddress); connectedWindow.Update(2, ipaddress);
// Displaying // 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(); _screen->sendBuffer();
} }
@ -84,7 +97,7 @@ void Screen::loop()
{ {
_screen->clearBuffer(); // clear the internal memory _screen->clearBuffer(); // clear the internal memory
_screen->setFont(_font); _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 _screen->sendBuffer(); // transfer internal memory to the display
delay(1000); delay(1000);
} }

View file

@ -7,7 +7,7 @@
namespace Display namespace Display
{ {
constexpr uint8_t FONT_SIZE=8; constexpr uint8_t FONT_SIZE=6;
class Screen class Screen
{ {
@ -21,7 +21,7 @@ namespace Display
// Public functions // Public functions
void Setup(uint8_t *font); void Setup(uint8_t *font);
void connecting(uint8_t state = 0); void connecting(uint8_t state = 0);
void connected(const char *ipaddress); void connected(const char *ipaddress, uint8_t timing);
void loop(); void loop();
// Getters // Getters
uint16_t getHeight(); uint16_t getHeight();
@ -43,6 +43,7 @@ namespace Display
uint8_t *_font; uint8_t *_font;
uint16_t _width; uint16_t _width;
uint16_t _height; uint16_t _height;
String _loading;
// Static Components // Static Components
Components connectingWindow; Components connectingWindow;

View file

@ -32,16 +32,17 @@ void Components::Display(StyleHeight sh, uint16_t offset, uint16_t padding)
const auto centeredOffset = (Screen::GetInstance().getHeight() - totalTextSize) - offset; const auto centeredOffset = (Screen::GetInstance().getHeight() - totalTextSize) - offset;
for (size_t i = 0; i < _boxes.size(); i++) 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) switch (sh)
{ {
case StyleHeight::TOP: 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; break;
case StyleHeight::CENTERED: 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; break;
case StyleHeight::BOTTOM: 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; break;
} }
} }
@ -80,3 +81,4 @@ void TextBox::updateString(String str)
} }
u8g2_uint_t TextBox::getStyle() { return _style; } u8g2_uint_t TextBox::getStyle() { return _style; }
uint16_t TextBox::getTextWidth() { return _textWidth; } uint16_t TextBox::getTextWidth() { return _textWidth; }
StyleWidth TextBox::getStyleWidth() { return _styleWidth; }

View file

@ -31,6 +31,7 @@ namespace Display
void updateString(String str); void updateString(String str);
u8g2_uint_t getStyle(); u8g2_uint_t getStyle();
uint16_t getTextWidth(); uint16_t getTextWidth();
StyleWidth getStyleWidth();
private: private:
void Calculate(); void Calculate();
String _text; String _text;

View file

@ -1,7 +1,7 @@
#include "ServerHandler.hpp" #include "ServerHandler.hpp"
#include "Screen.hpp" #include "Screen.hpp"
ServerHandler::ServerHandler() : server(80) { ServerHandler::ServerHandler() : server(80), display_time(0) {
} }
ServerHandler::~ServerHandler() {} ServerHandler::~ServerHandler() {}
@ -17,17 +17,24 @@ void ServerHandler::setup(const char* ssid, const char* password) { // On utilis
state >= 3 ? state = 0: state++; state >= 3 ? state = 0: state++;
} }
auto ip = WiFi.localIP().toString();
Display::Screen::GetInstance().connected(ip.c_str());
server.begin(); server.begin();
server.on("/", [this]() { this->handleRoot(); }); // fonction lamda pour gérer les requettes get server.on("/", [this]() { this->handleRoot(); }); // fonction lamda pour gérer les requettes get
} }
void ServerHandler::loop() { void ServerHandler::loop() {
if(display_time < MAX_TIME)
{
Display::Screen::GetInstance().connected(WiFi.localIP().toString().c_str(),display_time);
display_time++;
}
server.handleClient(); server.handleClient();
} }
bool ServerHandler::showNext()
{
return (display_time >= MAX_TIME);
}
void ServerHandler::handleRoot() { void ServerHandler::handleRoot() {
auto& dataHandler = DataHandler::GetInstance(); auto& dataHandler = DataHandler::GetInstance();
String jsonFormattedData = dataHandler.getJsonData(); String jsonFormattedData = dataHandler.getJsonData();

View file

@ -6,6 +6,8 @@
#include "DataHandler.hpp" #include "DataHandler.hpp"
constexpr uint8_t MAX_TIME = 28;
class ServerHandler { class ServerHandler {
public: public:
// Singleton // Singleton
@ -17,6 +19,8 @@ public:
// Public functions // Public functions
void setup(const char* ssid, const char* password); void setup(const char* ssid, const char* password);
void loop(); void loop();
// Return if the screen needs to be changed.
bool showNext();
private: private:
// Singleton // Singleton
@ -27,6 +31,7 @@ private:
// Private variables/functions // Private variables/functions
void handleRoot(); void handleRoot();
ESP8266WebServer server; ESP8266WebServer server;
uint8_t display_time;
}; };
#endif #endif

View file

@ -18,7 +18,7 @@ Component humidity(ComponentType::Analog, PIN_A0);
void setup() void setup()
{ {
Serial.begin(9600); Serial.begin(9600);
Display::Screen::GetInstance().Setup(const_cast<uint8_t*>(u8g2_font_helvB08_tr)); Display::Screen::GetInstance().Setup(const_cast<uint8_t*>(u8g2_font_profont10_tr));
ServerHandler::GetInstance().setup(ssid, pswd); ServerHandler::GetInstance().setup(ssid, pswd);
} }
@ -26,12 +26,18 @@ void loop()
{ {
auto& serverHandler = ServerHandler::GetInstance(); auto& serverHandler = ServerHandler::GetInstance();
auto& dataHandler = DataHandler::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); dataHandler.updateTemperatureData(random(1800, 2200) / 100.0);
// 0 -> air(0), 0-300 -> dry(20), 300-700 -> humid (580), 700-950 -> water(940) // 0 -> air(0), 0-300 -> dry(20), 300-700 -> humid (580), 700-950 -> water(940)
dataHandler.updateHumidityData(static_cast<float>(std::any_cast<int>(humidity.getValue()))); dataHandler.updateHumidityData(static_cast<float>(std::any_cast<int>(humidity.getValue())));
Serial.println(dataHandler.getJsonData()); Serial.println(dataHandler.getJsonData());
delay(1000); // When showing IP, delay is faster.
delay(serverHandler.showNext() ? 1000 : 250);
serverHandler.loop(); serverHandler.loop();
} }