#include #include #include #include "ServerHandler.hpp" #include "Component.hpp" #include "Screen.hpp" #ifdef SSID_CLOVER const char* ssid = SSID_CLOVER; #endif #ifdef PSWD_CLOVER const char* pswd = PSWD_CLOVER; #endif Component humidity(ComponentType::Analog, PIN_A0); void setup() { Serial.begin(9600); Display::Screen::GetInstance().Setup(const_cast(u8g2_font_busdisplay8x5_tr)); ServerHandler::GetInstance().setup(ssid, pswd); Serial.print("Connected to WiFi. IP address: "); Serial.println(WiFi.localIP()); pinMode(D5, OUTPUT); digitalWrite(D5, LOW); } void loop() { // Creating variables to access singletons auto& serverHandler = ServerHandler::GetInstance(); auto& dataHandler = DataHandler::GetInstance(); auto& screen = Display::Screen::GetInstance(); // Could not connect after setup: Showing screen failure if(!serverHandler.isConnected()) { screen.notConnected(); return; } // Server showing IP if(!serverHandler.showBoot()) { serverHandler.showIp(); delay(250); return; } // When Screen can boot (isBooting) and Server finished showing IP (showBoot) if(screen.isBooting() && serverHandler.showBoot()) { screen.boot(); delay(100); return; } // Data gathered from various sensors // 0 -> air(0), 0-300 -> dry(20), 300-700 -> humid (580), 700-950 -> water(940) auto soilHumidityData = static_cast(std::any_cast(humidity.getValue())); auto airTemperatureData = random(150, 300) / 10.0; auto airHumidityData = random(0, 1000) / 10.0; auto lightData = random(0, 1000) / 10.0; // Updating the data handler dataHandler.updateSoilMoistureData(soilHumidityData); dataHandler.updateAirTemperatureData(airTemperatureData); dataHandler.updateAirHumidityData(airHumidityData); dataHandler.updateLightData(lightData); // Screen showing screen.loop(soilHumidityData,airTemperatureData,airHumidityData,lightData); if (soilHumidityData < 550) { Serial.println("Soil humidity low. Please water the plant."); digitalWrite(D5, HIGH); } else if (soilHumidityData >= 550 && soilHumidityData <= 680) { Serial.println("Idle..."); digitalWrite(D5, LOW); } else { Serial.println("Soil too wet."); digitalWrite(D5, LOW); delay(400); digitalWrite(D5, HIGH); delay(400); } serverHandler.loop(); }