Added many comments

This commit is contained in:
Yohan Boujon 2023-12-22 14:28:34 +01:00
parent a9b456cef7
commit 90898aa8e5
9 changed files with 260 additions and 0 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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