#include #include "appcontext.hpp" #include "config.h" #include "debugutil.hpp" #include "light.h" #include "mqtt.h" #include "network.h" #include "ota.h" #include "pin.h" #include "statemachine.hpp" #include "states.hpp" #include "TaskScheduler.h" #include "wifimanager.h" // Network* network = nullptr; // OTAHandler* otaHandler = nullptr; // Mqtt* mqttClient = nullptr; // Light *light = nullptr; // Task *updateTask = nullptr; // Task *mqttTickTask = nullptr; // Task *mqttCheckConnectionTask = nullptr; Task *appStateMachineUpdateTask = nullptr; Pin *pinR = new Pin(ledPinR, true, true, 5000, 0); Pin *pinG = new Pin(ledPinG, true, true, 5000, 1); Pin *pinB = new Pin(ledPinB, true, true, 5000, 2); Pin *pinCW = new Pin(ledPinCW, true, true, 5000, 3); Pin *pinWW = new Pin(ledPinWW, true, true, 5000, 4); AppContext *appContext = new AppContext(); StartState *startState = new StartState(appContext); NetworkInitializeState *networkInitializeState = new NetworkInitializeState(appContext); RunningState *runningState = new RunningState(appContext); StateMachine *stateMachine = nullptr; Scheduler *scheduler = nullptr; void initializeScheduler(); void setup() { Debug::begin(115200); Debug::println("Starting Smart RGB ESP32..."); stateMachine = new StateMachine(); initializeScheduler(); appContext->pinR = pinR; appContext->pinG = pinG; appContext->pinB = pinB; appContext->pinCW = pinCW; appContext->pinWW = pinWW; stateMachine->addStateRaw(startState); stateMachine->addStateRaw(networkInitializeState); stateMachine->addTransition(StateId::StartState, EventId::PinInitialized, StateId::NetworkInitializeState); stateMachine->addStateRaw(runningState); stateMachine->addTransition(StateId::NetworkInitializeState, EventId::WifiConnected, StateId::RunningState); stateMachine->addTransition(StateId::RunningState, EventId::WifiDisconnected, StateId::NetworkInitializeState); stateMachine->setInitialState(StateId::StartState); // light = new Light(pinR, pinG, pinB, pinCW, pinWW, mqttClient, "smart_rgb_light"); } void loop() { scheduler->execute(); // Execute the scheduler to run tasks yield(); // Yield to allow other tasks to run } void initializeScheduler() { scheduler = new Scheduler(); appStateMachineUpdateTask = new Task(TASK_MILLISECOND, TASK_FOREVER, []() { if (stateMachine) { stateMachine->update(); } }, scheduler, true, nullptr, nullptr); // mqttTickTask = new Task(TASK_MILLISECOND * 100, TASK_FOREVER, []() { // Mqtt::poll(); // Poll MQTT client for messages // }, scheduler, true, nullptr, nullptr); // mqttCheckConnectionTask = new Task(TASK_SECOND * 30, TASK_FOREVER, []() { // Mqtt::checkConnection(); // Check MQTT connection status // }, scheduler, true, nullptr, nullptr); }