diff --git a/src/App/App.cpp b/src/App/App.cpp index 4dae346..a0f86a3 100644 --- a/src/App/App.cpp +++ b/src/App/App.cpp @@ -11,28 +11,19 @@ namespace Dough App::App() : config(), ui(), wifi(), - mqtt( - &wifi, - mqttOnConnectCallback, - mqttOnMessageCallback), + mqtt(&wifi, mqttOnConnectCallback, mqttOnMessageCallback), temperatureSensor( - &mqtt, - "temperature", - TemperatureSensor::Instance(), + &mqtt, "temperature", TemperatureSensor::Instance(), TEMPERATURE_AVERAGE_STORAGE, TEMPERATURE_MEASURE_INTERVAL, sensorOnMeasureCallback, MINIMUM_PUBLISH_INTERVAL, sensorOnPublishCallback), humiditySensor( - &mqtt, - "humidity", - HumiditySensor::Instance(), + &mqtt, "humidity", HumiditySensor::Instance(), HUMIDITY_AVERAGE_STORAGE, HUMIDITY_MEASURE_INTERVAL, sensorOnMeasureCallback, MINIMUM_PUBLISH_INTERVAL, sensorOnPublishCallback), distanceSensor( - &mqtt, - "distance", - DistanceSensor::Instance(), + &mqtt, "distance", DistanceSensor::Instance(), DISTANCE_AVERAGE_STORAGE, DISTANCE_MEASURE_INTERVAL, sensorOnMeasureCallback, MINIMUM_PUBLISH_INTERVAL, sensorOnPublishCallback), diff --git a/src/App/App.h b/src/App/App.h index 709318f..ed50aac 100644 --- a/src/App/App.h +++ b/src/App/App.h @@ -2,6 +2,7 @@ #define DOUGH_APP_H #include +#include "UI/UI.h" #include "App/Configuration.h" #include "Data/SensorController.h" #include "Sensors/TemperatureSensor.h" diff --git a/src/Data/SensorController.h b/src/Data/SensorController.h index 316790c..962f145 100644 --- a/src/Data/SensorController.h +++ b/src/Data/SensorController.h @@ -5,7 +5,6 @@ #include "Sensors/SensorBase.h" #include "Data/Measurement.h" #include "Network/MQTT.h" -#include "UI/UI.h" namespace Dough { diff --git a/src/UI/UI.cpp b/src/UI/UI.cpp index 4afbd18..9be1dfe 100644 --- a/src/UI/UI.cpp +++ b/src/UI/UI.cpp @@ -4,10 +4,10 @@ namespace Dough { UI::UI() : onoffButton(ONOFF_BUTTON_PIN), setupButton(SETUP_BUTTON_PIN), - ledBuiltin(LED_BUILTIN), - led1(LED1_PIN), - led2(LED2_PIN), - led3(LED3_PIN) {} + _ledBuiltin(LED_BUILTIN), + _led1(LED1_PIN), + _led2(LED2_PIN), + _led3(LED3_PIN) {} void UI::setup() { @@ -16,10 +16,10 @@ namespace Dough setupButton.setup(); // Setup the LEDs. - ledBuiltin.setup(); - led1.setup(); - led2.setup(); - led3.setup(); + _ledBuiltin.setup(); + _led1.setup(); + _led2.setup(); + _led3.setup(); // Setup a timer interrupt that is used to update the // user interface (a.k.a. "LEDs") in parallel to other activities. @@ -104,66 +104,73 @@ namespace Dough // something else. void UI::updateLEDs() { - ledBuiltin.loop(); - led1.loop(); - led2.loop(); - led3.loop(); + _ledBuiltin.loop(); + _led1.loop(); + _led2.loop(); + _led3.loop(); } void UI::notifyConnectingToWifi() { - led1.blink()->slow(); - led2.off(); - led3.off(); + _led1.blink()->slow(); + _led2.off(); + _led3.off(); } void UI::notifyConnectingToMQTT() { - led1.blink()->fast(); - led2.off(); - led3.off(); + _led1.blink()->fast(); + _led2.off(); + _led3.off(); + } + + void UI::notifyConnected() + { + _led1.on(); + _led2.off(); + _led3.off(); } void UI::notifyWaitingForConfiguration() { - led1.on(); - led2.blink()->slow(); - led3.off(); + _led1.on(); + _led2.blink()->slow(); + _led3.off(); } void UI::notifyCalibrating() { - led1.on(); - led2.blink()->fast(); - led3.off(); + _led1.on(); + _led2.blink()->fast(); + _led3.off(); } void UI::notifyMeasurementsActive() { - led1.on(); - led2.on(); - led3.on(); + _led1.on(); + _led2.on(); + _led3.on(); } void UI::notifyMeasurementsPaused() { - led1.on(); - led2.on(); - led3.pulse(); + _led1.on(); + _led2.on(); + _led3.pulse(); } void UI::notifySensorActivity() { - led3.off(); + _led3.off(); delay(50); - led3.on(); + _led3.on(); } void UI::notifyNetworkActivity() { - led1.off(); + _led1.off(); delay(50); - led1.on(); + _led1.on(); } // Flash all LEDs, one at a time in a synchroneous manner, making @@ -171,17 +178,17 @@ namespace Dough // as a "Hey, I'm awake!" signal from the device after booting up. void UI::_flash_all_leds() { - ledBuiltin.on(); + _ledBuiltin.on(); delay(100); - ledBuiltin.off(); - led1.on(); + _ledBuiltin.off(); + _led1.on(); delay(100); - led1.off(); - led2.on(); + _led1.off(); + _led2.on(); delay(100); - led2.off(); - led3.on(); + _led2.off(); + _led3.on(); delay(100); - led3.off(); + _led3.off(); } } // namespace Dough \ No newline at end of file diff --git a/src/UI/UI.h b/src/UI/UI.h index bfb9bd4..033a91a 100644 --- a/src/UI/UI.h +++ b/src/UI/UI.h @@ -20,10 +20,6 @@ namespace Dough static void setupButtonISR(); Button onoffButton; Button setupButton; - LED ledBuiltin; - LED led1; - LED led2; - LED led3; void processButtonEvents(); void clearButtonEvents(); void updateLEDs(); @@ -31,6 +27,7 @@ namespace Dough void suspend(); void notifyConnectingToWifi(); void notifyConnectingToMQTT(); + void notifyConnected(); void notifyWaitingForConfiguration(); void notifyCalibrating(); void notifyMeasurementsActive(); @@ -39,6 +36,10 @@ namespace Dough void notifyNetworkActivity(); private: + LED _ledBuiltin; + LED _led1; + LED _led2; + LED _led3; void _setupTimerInterrupt(); static UI *_instance; void _flash_all_leds(); diff --git a/src/main.cpp b/src/main.cpp index da71482..bf689f6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,7 @@ #include "main.h" // TOOD: implement the calibration logic -// TODO: don't make sensors instances +// TODO: don't make sensors instances anymore, now they are handled by App as the only singleton // TODO: see what more stuff can be moved to the UI code. Maybe state to UI state translation ought to be there as well DoughBoyState state = CONFIGURING;