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 <string.h>
#include <vector>
#include <algorithm>
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);
}

View file

@ -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;

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;
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;
}
}
@ -80,3 +81,4 @@ void TextBox::updateString(String str)
}
u8g2_uint_t TextBox::getStyle() { return _style; }
uint16_t TextBox::getTextWidth() { return _textWidth; }
StyleWidth TextBox::getStyleWidth() { return _styleWidth; }

View file

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

View file

@ -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();

View file

@ -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

View file

@ -18,7 +18,7 @@ Component humidity(ComponentType::Analog, PIN_A0);
void setup()
{
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);
}
@ -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<float>(std::any_cast<int>(humidity.getValue())));
Serial.println(dataHandler.getJsonData());
delay(1000);
// When showing IP, delay is faster.
delay(serverHandler.showNext() ? 1000 : 250);
serverHandler.loop();
}