From ff97ae18eb51835b0220835a2dd2eaa2bbc6817e Mon Sep 17 00:00:00 2001 From: Tobias Date: Sun, 8 Dec 2024 19:42:24 +0100 Subject: [PATCH] Cleanup and structirng --- .vscode/settings.json | 6 ++ lib/infinityPV_INA233_Arduino-library | 1 + platformio.ini | 2 +- src/external_interfacing/leds.cpp | 96 ++++++++++++++++++ src/external_interfacing/leds.h | 12 +++ src/global_data/global_data.cpp | 2 +- src/main.cpp | 135 ++------------------------ src/networking/networking.cpp | 2 +- src/sensor/sensor.cpp | 2 +- src/tools/tools.cpp | 21 ++++ src/tools/tools.h | 6 ++ 11 files changed, 155 insertions(+), 130 deletions(-) create mode 100644 .vscode/settings.json create mode 160000 lib/infinityPV_INA233_Arduino-library create mode 100644 src/external_interfacing/leds.cpp create mode 100644 src/external_interfacing/leds.h create mode 100644 src/tools/tools.cpp create mode 100644 src/tools/tools.h diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f9a309a --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "iostream": "cpp", + "random": "cpp" + } +} \ No newline at end of file diff --git a/lib/infinityPV_INA233_Arduino-library b/lib/infinityPV_INA233_Arduino-library new file mode 160000 index 0000000..bc68e03 --- /dev/null +++ b/lib/infinityPV_INA233_Arduino-library @@ -0,0 +1 @@ +Subproject commit bc68e03c01b931a65f384ad57c014ef1c6872d56 diff --git a/platformio.ini b/platformio.ini index 8ad159e..bda3745 100644 --- a/platformio.ini +++ b/platformio.ini @@ -19,5 +19,5 @@ lib_deps = bblanchon/ArduinoJson@^6.21.3 ArduinoLog upload_protocol = espota -upload_port = 192.168.5.181 +upload_port = 192.168.5.242 lib_extra_dirs = libs diff --git a/src/external_interfacing/leds.cpp b/src/external_interfacing/leds.cpp new file mode 100644 index 0000000..2a59450 --- /dev/null +++ b/src/external_interfacing/leds.cpp @@ -0,0 +1,96 @@ +#include "leds.h" +#include +#include +#include "tools/tools.h" + +extern ActiveErrors active_errors; +extern WaterData water_data; + +void display_percentage(float percentage) +{ + digitalWrite(LED_RED, 0); + + if (percentage > 0) { + digitalWrite(LED_1, 1); + } else { + digitalWrite(LED_1, 0); + } + if (percentage > 20) { + digitalWrite(LED_2, 1); + } else { + digitalWrite(LED_2, 0); + } + if (percentage > 40) { + digitalWrite(LED_3, 1); + } else { + digitalWrite(LED_3, 0); + } + if (percentage > 60) { + digitalWrite(LED_4, 1); + } else { + digitalWrite(LED_4, 0); + } + if (percentage > 80) { + digitalWrite(LED_5, 1); + } else { + digitalWrite(LED_5, 0); + } + + if (percentage > 10) { + delay(3000); + } else if (percentage > 0) { + for (int i = 0; i < 3; i++) { + digitalWrite(LED_1, 1); + delay(500); + digitalWrite(LED_1, 0); + delay(500); + } + } else if (percentage <= 0) { + for (int i = 0; i < 15; i++) { + digitalWrite(LED_1, 1); + delay(100); + digitalWrite(LED_1, 0); + delay(100); + } + } +} + +void display_error_code(byte err_code) +{ + digitalWrite(LED_RED, 1); + digitalWrite(LED_1, bitRead(err_code, 0)); + digitalWrite(LED_2, bitRead(err_code, 1)); + digitalWrite(LED_3, bitRead(err_code, 2)); + digitalWrite(LED_4, bitRead(err_code, 3)); + digitalWrite(LED_5, bitRead(err_code, 4)); +} + +void display_task(void* parameter) +{ + while (true) { + if (!is_error(active_errors)) { + // We have no error, refresh status display and wait half a second + display_percentage(water_data.percentage); + } else { + Log.verbose("Error detected"); + + // We have an error, display error code for 3 seconds and then water level for 3 seconds + if (active_errors.voltage_low) { + display_error_code(1); + delay(3000); + } else if (active_errors.voltage_high) { + display_error_code(2); + delay(3000); + } else if (active_errors.current_low) { + display_error_code(3); + delay(3000); + } else if (active_errors.current_high) { + display_error_code(4); + delay(3000); + } else { + delay(3000); + } + display_percentage(water_data.percentage); + } + } +} \ No newline at end of file diff --git a/src/external_interfacing/leds.h b/src/external_interfacing/leds.h new file mode 100644 index 0000000..2b6d858 --- /dev/null +++ b/src/external_interfacing/leds.h @@ -0,0 +1,12 @@ +#include + +#define LED_1 4 +#define LED_2 2 +#define LED_3 15 +#define LED_4 13 +#define LED_5 12 +#define LED_RED 14 + +void display_percentage(float percentage); +void display_error_code(byte err_code); +void display_task(void* parameter); \ No newline at end of file diff --git a/src/global_data/global_data.cpp b/src/global_data/global_data.cpp index aee4177..be63f6c 100644 --- a/src/global_data/global_data.cpp +++ b/src/global_data/global_data.cpp @@ -1,4 +1,4 @@ -#include "global_data.h" +#include "global_data/global_data.h" NetworkData wifi_data; NetworkData ethernet_data; diff --git a/src/main.cpp b/src/main.cpp index bcc5a9a..12698a6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -20,140 +20,24 @@ #include -#include "global_data/global_data.h" #include "sensor/sensor.h" +#include "external_interfacing/leds.h" +#include "tools/tools.h" -#define LED_1 4 -#define LED_2 2 -#define LED_3 15 -#define LED_4 13 -#define LED_5 12 -#define LED_RED 14 +Preferences prefs; + +extern WaterData water_data; +extern DeviceTelemetry telemetry; +extern NetworkData wifi_data; +extern NetworkData ethernet_data; +extern SensorData shunt_data; extern "C" int rom_phy_get_vdd33(); -extern NetworkData wifi_data; -extern NetworkData ethernet_data; -extern DeviceTelemetry telemetry; - -extern SensorData shunt_data; -extern WaterData water_data; - -extern ActiveErrors active_errors; - -Preferences prefs; - AsyncWebServer server(80); #define FORMAT_LITTLEFS_IF_FAILED true -void display_percentage(float percentage) -{ - digitalWrite(LED_RED, 0); - - if (percentage > 0) { - digitalWrite(LED_1, 1); - } else { - digitalWrite(LED_1, 0); - } - if (percentage > 20) { - digitalWrite(LED_2, 1); - } else { - digitalWrite(LED_2, 0); - } - if (percentage > 40) { - digitalWrite(LED_3, 1); - } else { - digitalWrite(LED_3, 0); - } - if (percentage > 60) { - digitalWrite(LED_4, 1); - } else { - digitalWrite(LED_4, 0); - } - if (percentage > 80) { - digitalWrite(LED_5, 1); - } else { - digitalWrite(LED_5, 0); - } - - if (percentage > 10) { - delay(3000); - } else if (percentage > 0) { - for (int i = 0; i < 3; i++) { - digitalWrite(LED_1, 1); - delay(500); - digitalWrite(LED_1, 0); - delay(500); - } - } else if (percentage <= 0) { - for (int i = 0; i < 15; i++) { - digitalWrite(LED_1, 1); - delay(100); - digitalWrite(LED_1, 0); - delay(100); - } - } -} - -void display_error_code(byte err_code) -{ - digitalWrite(LED_RED, 1); - digitalWrite(LED_1, bitRead(err_code, 0)); - digitalWrite(LED_2, bitRead(err_code, 1)); - digitalWrite(LED_3, bitRead(err_code, 2)); - digitalWrite(LED_4, bitRead(err_code, 3)); - digitalWrite(LED_5, bitRead(err_code, 4)); -} - -bool is_error() -{ - return active_errors.voltage_high || active_errors.voltage_low || active_errors.current_high || active_errors.current_low; -} - -void printSuffix(Print* _logOutput, int logLevel) -{ - _logOutput->print(CR); -} - -void print_prefix(Print* _logOutput, int logLevel) -{ - _logOutput->print("WATERMETER - C"); - _logOutput->print(xPortGetCoreID()); - _logOutput->print(" - "); - _logOutput->print(pcTaskGetName(xTaskGetCurrentTaskHandle())); - _logOutput->print(" - "); -} - -void display_task(void* parameter) -{ - while (true) { - if (!is_error()) { - // We have no error, refresh status display and wait half a second - display_percentage(water_data.percentage); - } else { - Log.verbose("Error detected"); - - // We have an error, display error code for 3 seconds and then water level for 3 seconds - if (active_errors.voltage_low) { - display_error_code(1); - delay(3000); - } else if (active_errors.voltage_high) { - display_error_code(2); - delay(3000); - } else if (active_errors.current_low) { - display_error_code(3); - delay(3000); - } else if (active_errors.current_high) { - display_error_code(4); - delay(3000); - } else { - delay(3000); - } - display_percentage(water_data.percentage); - } - } -} void collect_internal_telemetry_task(void* parameter) { @@ -168,7 +52,6 @@ void collect_internal_telemetry_task(void* parameter) } - String processor(const String& var) { if (var == level_sensor_range_key) { diff --git a/src/networking/networking.cpp b/src/networking/networking.cpp index 0622a49..e6bb3a2 100644 --- a/src/networking/networking.cpp +++ b/src/networking/networking.cpp @@ -2,8 +2,8 @@ #include #include #include "../global_data/defines.h" -#include "../global_data/global_data.h" #include +#include int64_t mac_address = ESP.getEfuseMac(); uint8_t failed_connection_attempts = 0; diff --git a/src/sensor/sensor.cpp b/src/sensor/sensor.cpp index 885b74c..276dd8d 100644 --- a/src/sensor/sensor.cpp +++ b/src/sensor/sensor.cpp @@ -2,8 +2,8 @@ #include #include #include -#include "../global_data/global_data.h" #include "Wire.h" +#include #ifdef USE_INA226s diff --git a/src/tools/tools.cpp b/src/tools/tools.cpp new file mode 100644 index 0000000..113104d --- /dev/null +++ b/src/tools/tools.cpp @@ -0,0 +1,21 @@ +#include +#include "tools.h" +#include + +void printSuffix(Print* _logOutput, int logLevel) +{ + _logOutput->print(CR); +} + +void print_prefix(Print* _logOutput, int logLevel) +{ + _logOutput->print("WATERMETER - C"); + _logOutput->print(xPortGetCoreID()); + _logOutput->print(" - "); + _logOutput->print(pcTaskGetName(xTaskGetCurrentTaskHandle())); + _logOutput->print(" - "); +} + +bool is_error(ActiveErrors active_errors) { + return active_errors.current_high || active_errors.current_low || active_errors.level_high || active_errors.level_low || active_errors.voltage_high || active_errors.voltage_low; +} \ No newline at end of file diff --git a/src/tools/tools.h b/src/tools/tools.h new file mode 100644 index 0000000..629e7a2 --- /dev/null +++ b/src/tools/tools.h @@ -0,0 +1,6 @@ +#include +#include + +void printSuffix(Print* _logOutput, int logLevel); +void print_prefix(Print* _logOutput, int logLevel); +bool is_error(ActiveErrors active_errors); \ No newline at end of file