mirror of
https://github.com/Lemonochrme/clover.git
synced 2025-06-08 16:50:50 +02:00
Added Loading screen when connected. Showing basic loop when finished. Fixed padding.
This commit is contained in:
parent
72ac1f20df
commit
cf50debfd0
7 changed files with 50 additions and 15 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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; }
|
|
@ -31,6 +31,7 @@ namespace Display
|
|||
void updateString(String str);
|
||||
u8g2_uint_t getStyle();
|
||||
uint16_t getTextWidth();
|
||||
StyleWidth getStyleWidth();
|
||||
private:
|
||||
void Calculate();
|
||||
String _text;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
Loading…
Add table
Reference in a new issue