mirror of
https://github.com/Lemonochrme/clover.git
synced 2025-06-08 08:40:50 +02:00
Added many comments
This commit is contained in:
parent
a9b456cef7
commit
90898aa8e5
9 changed files with 260 additions and 0 deletions
|
@ -10,8 +10,26 @@ enum class ComponentType {
|
||||||
|
|
||||||
class Component{
|
class Component{
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Construct a new Component object
|
||||||
|
*
|
||||||
|
* @param ct see ComponentType enum
|
||||||
|
* @param p pin conncted to the Component
|
||||||
|
*/
|
||||||
Component(ComponentType ct, uint8_t p);
|
Component(ComponentType ct, uint8_t p);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the Value as an std::any
|
||||||
|
*
|
||||||
|
* @return std::any recast into the type depending on the component
|
||||||
|
*/
|
||||||
std::any getValue();
|
std::any getValue();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Send the value as an std::any,
|
||||||
|
*
|
||||||
|
* @param data be careful of the component type of the object
|
||||||
|
*/
|
||||||
void sendValue(std::any data);
|
void sendValue(std::any data);
|
||||||
private:
|
private:
|
||||||
ComponentType _type;
|
ComponentType _type;
|
||||||
|
|
|
@ -7,10 +7,32 @@
|
||||||
class DHTComponent
|
class DHTComponent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Construct a new DHTComponent object
|
||||||
|
*
|
||||||
|
* @param type type of DHT given by the DHT_U.h
|
||||||
|
* @param pin the pin where the DHT is connected
|
||||||
|
*/
|
||||||
DHTComponent(uint8_t type, byte pin);
|
DHTComponent(uint8_t type, byte pin);
|
||||||
~DHTComponent();
|
~DHTComponent();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief called once the setup() is done in Arduino
|
||||||
|
*/
|
||||||
void setup();
|
void setup();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the Humidity value
|
||||||
|
*
|
||||||
|
* @return float from 0.0 to 100.0%
|
||||||
|
*/
|
||||||
float getHumidity();
|
float getHumidity();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the Temperature value
|
||||||
|
*
|
||||||
|
* @return float in Celcius
|
||||||
|
*/
|
||||||
float getTemperature();
|
float getTemperature();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
#include "Component.hpp"
|
#include "Component.hpp"
|
||||||
#include <ChainableLED.h>
|
#include <ChainableLED.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Color composed of multiple bytes, rgb
|
||||||
|
*/
|
||||||
struct Color
|
struct Color
|
||||||
{
|
{
|
||||||
byte red;
|
byte red;
|
||||||
|
@ -12,6 +15,9 @@ struct Color
|
||||||
Color operator-(byte value);
|
Color operator-(byte value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief a set of colors to use when powering the led
|
||||||
|
*/
|
||||||
namespace LedColors
|
namespace LedColors
|
||||||
{
|
{
|
||||||
constexpr Color LED_OFF = {0,0,0};
|
constexpr Color LED_OFF = {0,0,0};
|
||||||
|
@ -21,6 +27,9 @@ namespace LedColors
|
||||||
constexpr Color TOO_WET = {0x1B,0x09,0x3F};
|
constexpr Color TOO_WET = {0x1B,0x09,0x3F};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ENUM for the two used LED
|
||||||
|
*/
|
||||||
enum class LedNumber {
|
enum class LedNumber {
|
||||||
LED_HARDWARE = 0,
|
LED_HARDWARE = 0,
|
||||||
LED_PLANT = 1
|
LED_PLANT = 1
|
||||||
|
@ -29,10 +38,36 @@ enum class LedNumber {
|
||||||
class LedComponent
|
class LedComponent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Construct a new Led Component object
|
||||||
|
*
|
||||||
|
* @param pin the pin used to communicate with the LED
|
||||||
|
* @param pin_clock the pin clock with the chainable LED
|
||||||
|
* @param led_number number of LED in the chain
|
||||||
|
*/
|
||||||
LedComponent(byte pin, byte pin_clock, uint8_t led_number);
|
LedComponent(byte pin, byte pin_clock, uint8_t led_number);
|
||||||
~LedComponent();
|
~LedComponent();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief called once the setup() is done in Arduino
|
||||||
|
*/
|
||||||
void setup();
|
void setup();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the Color of the LED.
|
||||||
|
*
|
||||||
|
* @param led_number Selecting the LED to light up
|
||||||
|
* @param color Color of the LED
|
||||||
|
*/
|
||||||
void setColor(LedNumber led_number, Color color);
|
void setColor(LedNumber led_number, Color color);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the Color of the LED.
|
||||||
|
*
|
||||||
|
* @param led_number Selecting the LED to light up
|
||||||
|
* @param color Color of the LED
|
||||||
|
* @param fading_time From 0,0,0 to the Color
|
||||||
|
*/
|
||||||
void setColor(LedNumber led_number, Color color, uint16_t fading_time);
|
void setColor(LedNumber led_number, Color color, uint16_t fading_time);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -14,9 +14,31 @@ public:
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
// Public functions
|
// Public functions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief create all the instanciations of the component
|
||||||
|
*/
|
||||||
void setup();
|
void setup();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the Humidity object reference
|
||||||
|
*
|
||||||
|
* @return Component&
|
||||||
|
*/
|
||||||
Component& getHumidity();
|
Component& getHumidity();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the Led object reference
|
||||||
|
*
|
||||||
|
* @return LedComponent&
|
||||||
|
*/
|
||||||
LedComponent& getLed();
|
LedComponent& getLed();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the DHT object reference
|
||||||
|
*
|
||||||
|
* @return DHTComponent&
|
||||||
|
*/
|
||||||
DHTComponent& getDHT();
|
DHTComponent& getDHT();
|
||||||
private:
|
private:
|
||||||
// Singleton
|
// Singleton
|
||||||
|
|
|
@ -13,10 +13,40 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Public functions
|
// Public functions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the Json Data object
|
||||||
|
*
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
String getJsonData();
|
String getJsonData();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Update the moisture of the internal Data Handler
|
||||||
|
*
|
||||||
|
* @param humidity
|
||||||
|
*/
|
||||||
void updateSoilMoistureData(float humidity);
|
void updateSoilMoistureData(float humidity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Update the moisture of the internal Data Handler
|
||||||
|
*
|
||||||
|
* @param temperature
|
||||||
|
*/
|
||||||
void updateAirTemperatureData(float temperature);
|
void updateAirTemperatureData(float temperature);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Update the moisture of the internal Data Handler
|
||||||
|
*
|
||||||
|
* @param humidity
|
||||||
|
*/
|
||||||
void updateAirHumidityData(float humidity);
|
void updateAirHumidityData(float humidity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Update the moisture of the internal Data Handler
|
||||||
|
*
|
||||||
|
* @param light
|
||||||
|
*/
|
||||||
void updateLightData(float light);
|
void updateLightData(float light);
|
||||||
private:
|
private:
|
||||||
// Singleton
|
// Singleton
|
||||||
|
|
|
@ -45,6 +45,7 @@ void Screen::Setup(uint8_t *font)
|
||||||
airHumidityPicture.SetOffset(OFFSET_ICONS);
|
airHumidityPicture.SetOffset(OFFSET_ICONS);
|
||||||
|
|
||||||
// Static Components
|
// Static Components
|
||||||
|
// Using shared object for inheritance
|
||||||
connectingWindow.Add({std::make_shared<TextBox>(headerSetup),
|
connectingWindow.Add({std::make_shared<TextBox>(headerSetup),
|
||||||
std::make_shared<TextBox>(TextBox("connect", StyleWidth::CENTERED, StyleHeight::CENTERED, U8G2_BTN_BW0))});
|
std::make_shared<TextBox>(TextBox("connect", StyleWidth::CENTERED, StyleHeight::CENTERED, U8G2_BTN_BW0))});
|
||||||
connectionfailedWindow.Add({std::make_shared<TextBox>(headerSetup),
|
connectionfailedWindow.Add({std::make_shared<TextBox>(headerSetup),
|
||||||
|
@ -110,7 +111,9 @@ void Screen::connected(const char *ipaddress, uint8_t timing)
|
||||||
if (timing != 0)
|
if (timing != 0)
|
||||||
{
|
{
|
||||||
_screen->setFont(u8g2_font_3x3basic_tr);
|
_screen->setFont(u8g2_font_3x3basic_tr);
|
||||||
|
// While timing is not finished, incrementing the loading String
|
||||||
_loading.concat(" ");
|
_loading.concat(" ");
|
||||||
|
// Draw the button in inverted mode
|
||||||
_screen->drawButtonUTF8(0, _screen->getDisplayHeight() - 5, U8G2_BTN_INV, _screen->getStrWidth(_loading.c_str()), 0, 0, _loading.c_str());
|
_screen->drawButtonUTF8(0, _screen->getDisplayHeight() - 5, U8G2_BTN_INV, _screen->getStrWidth(_loading.c_str()), 0, 0, _loading.c_str());
|
||||||
_screen->setFont(_font);
|
_screen->setFont(_font);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
|
|
||||||
namespace Display
|
namespace Display
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @brief Each frame of the clover boot animation
|
||||||
|
*/
|
||||||
constexpr Picture CLOVER_FRAMES[] = {
|
constexpr Picture CLOVER_FRAMES[] = {
|
||||||
{clover1_bits, clover1_width, clover1_height},
|
{clover1_bits, clover1_width, clover1_height},
|
||||||
{clover2_bits, clover2_width, clover2_height},
|
{clover2_bits, clover2_width, clover2_height},
|
||||||
|
@ -43,20 +46,33 @@ namespace Display
|
||||||
{clover10_bits, clover10_width, clover10_height},
|
{clover10_bits, clover10_width, clover10_height},
|
||||||
{clover11_bits, clover11_width, clover11_height},
|
{clover11_bits, clover11_width, clover11_height},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Icons per component
|
||||||
|
*/
|
||||||
constexpr Picture ICONS[] = {
|
constexpr Picture ICONS[] = {
|
||||||
{humidity_bits,humidity_width,humidity_height},
|
{humidity_bits,humidity_width,humidity_height},
|
||||||
{thermometer_bits,thermometer_width,thermometer_height},
|
{thermometer_bits,thermometer_width,thermometer_height},
|
||||||
{air_humidity_bits,air_humidity_width,air_humidity_height},
|
{air_humidity_bits,air_humidity_width,air_humidity_height},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Icons per component (warning variant)
|
||||||
|
*/
|
||||||
constexpr Picture ICONS_WARNING[] = {
|
constexpr Picture ICONS_WARNING[] = {
|
||||||
{humidity_warning_bits,humidity_warning_width,humidity_warning_height},
|
{humidity_warning_bits,humidity_warning_width,humidity_warning_height},
|
||||||
{thermometer_warning_bits,thermometer_warning_width,thermometer_warning_height},
|
{thermometer_warning_bits,thermometer_warning_width,thermometer_warning_height},
|
||||||
{air_humidity_warning_bits,air_humidity_warning_width,air_humidity_warning_height},
|
{air_humidity_warning_bits,air_humidity_warning_width,air_humidity_warning_height},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Const from the Screen
|
||||||
constexpr uint8_t MAX_BOOT_FRAMES = 25;
|
constexpr uint8_t MAX_BOOT_FRAMES = 25;
|
||||||
constexpr uint8_t OFFSET_ICONS = 55;
|
constexpr uint8_t OFFSET_ICONS = 55;
|
||||||
constexpr uint8_t OFFSET_TEXT = 75;
|
constexpr uint8_t OFFSET_TEXT = 75;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Used for the pictures icons. Each icon has an index linked to a sensor
|
||||||
|
*/
|
||||||
enum class Sensors {
|
enum class Sensors {
|
||||||
SOIL_MOISTURE = 0,
|
SOIL_MOISTURE = 0,
|
||||||
THERMOMETER,
|
THERMOMETER,
|
||||||
|
@ -73,18 +89,91 @@ namespace Display
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
// Public functions
|
// Public functions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief To be called when the setup() of the Arduino library finished
|
||||||
|
*
|
||||||
|
* @param font font from the U8G2 library.
|
||||||
|
*/
|
||||||
void Setup(uint8_t *font);
|
void Setup(uint8_t *font);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Screen to display when connecting
|
||||||
|
*
|
||||||
|
* @param state from 0 to 3, shows little dots at the end of the text
|
||||||
|
*/
|
||||||
void connecting(uint8_t state=0);
|
void connecting(uint8_t state=0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Screen to display when not connected
|
||||||
|
*/
|
||||||
void notConnected();
|
void notConnected();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Screen to display when connected, a little loading bar is showed.
|
||||||
|
* ! Should use the latest Component Library
|
||||||
|
*
|
||||||
|
* @param ipaddress text to display, an IpAdress is recommended, but it can be a complete URL
|
||||||
|
* @param timing if equals 0, stop the loading.
|
||||||
|
*/
|
||||||
void connected(const char *ipaddress, uint8_t timing);
|
void connected(const char *ipaddress, uint8_t timing);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Screen bootscreen
|
||||||
|
*/
|
||||||
void boot();
|
void boot();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Screen for the main loop with the sensors information
|
||||||
|
*
|
||||||
|
* @param plantHumidity must be a percentage
|
||||||
|
* @param airTemperature must not exceed 99°C
|
||||||
|
* @param airHumidity must be a percentage
|
||||||
|
*/
|
||||||
void loop(const float plantHumidity, const float airTemperature, const float airHumidity);
|
void loop(const float plantHumidity, const float airTemperature, const float airHumidity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the Warning Icon for a given sensor
|
||||||
|
*
|
||||||
|
* @param sensorId the sensor to change icon
|
||||||
|
* @param warning if precised as false, will reset the normal icon
|
||||||
|
*/
|
||||||
void setWarningIcon(Sensors sensorId, bool warning=true);
|
void setWarningIcon(Sensors sensorId, bool warning=true);
|
||||||
|
|
||||||
// Getters
|
// Getters
|
||||||
|
/**
|
||||||
|
* @brief Get the Height of the Screen
|
||||||
|
*
|
||||||
|
* @return uint16_t
|
||||||
|
*/
|
||||||
uint16_t getHeight();
|
uint16_t getHeight();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the Width of the Screen
|
||||||
|
*
|
||||||
|
* @return uint16_t
|
||||||
|
*/
|
||||||
uint16_t getWidth();
|
uint16_t getWidth();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the Screen object
|
||||||
|
*
|
||||||
|
* @return U8G2_SSD1306_128X64_NONAME_F_HW_I2C&
|
||||||
|
*/
|
||||||
U8G2_SSD1306_128X64_NONAME_F_HW_I2C& getScreen();
|
U8G2_SSD1306_128X64_NONAME_F_HW_I2C& getScreen();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the Text Width from a given string
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @return uint16_t depending on the font size, get the text width
|
||||||
|
*/
|
||||||
uint16_t getTextWidth(const char * str);
|
uint16_t getTextWidth(const char * str);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the bootscreen havent finished
|
||||||
|
* @return false if the bootscreen finished
|
||||||
|
*/
|
||||||
bool isBooting();
|
bool isBooting();
|
||||||
private:
|
private:
|
||||||
// Singleton
|
// Singleton
|
||||||
|
|
|
@ -18,10 +18,35 @@ public:
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
// Public functions
|
// Public functions
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief setup the wifi when the Arduino is starting its connections
|
||||||
|
*
|
||||||
|
* @param ssid the name of the wifi
|
||||||
|
* @param password the password of the wifi
|
||||||
|
*/
|
||||||
void setup(const char* ssid, const char* password);
|
void setup(const char* ssid, const char* password);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Calls the Screen Singleton and shows the IP during a certain time.
|
||||||
|
*/
|
||||||
void showIp();
|
void showIp();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The basic loop of the Server, sending JSON data over the port 80.
|
||||||
|
*/
|
||||||
void loop();
|
void loop();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if connected to the wifi
|
||||||
|
* @return false if failed to connect
|
||||||
|
*/
|
||||||
bool isConnected();
|
bool isConnected();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true When finished showing IP and connecting
|
||||||
|
* @return false still in state of connecting
|
||||||
|
*/
|
||||||
bool showBoot();
|
bool showBoot();
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -20,13 +20,29 @@ namespace Warning {
|
||||||
constexpr float AIR_TEMPERATURE_TOO_HOT = 29.0f;
|
constexpr float AIR_TEMPERATURE_TOO_HOT = 29.0f;
|
||||||
constexpr float AIR_TEMPERATURE_TOO_COLD = 14.0f;
|
constexpr float AIR_TEMPERATURE_TOO_COLD = 14.0f;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Different type of status for the LED (memory optimisation)
|
||||||
|
*/
|
||||||
enum class LedMoistureStatus {
|
enum class LedMoistureStatus {
|
||||||
IDLE,
|
IDLE,
|
||||||
DRY,
|
DRY,
|
||||||
WET
|
WET
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Change the LED Color depending on the humidity
|
||||||
|
*
|
||||||
|
* @param soilHumidity
|
||||||
|
*/
|
||||||
void warningLedLoop(const float soilHumidity);
|
void warningLedLoop(const float soilHumidity);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Changing icons of the Screen when some parameters are superior to a certain threashold.
|
||||||
|
*
|
||||||
|
* @param plantMoisture
|
||||||
|
* @param airTemperature
|
||||||
|
* @param airHumidity
|
||||||
|
*/
|
||||||
void warningScreenLoop(const float plantMoisture, const float airTemperature, const float airHumidity);
|
void warningScreenLoop(const float plantMoisture, const float airTemperature, const float airHumidity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue