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 "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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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; }
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue