Cleanup and structirng
Some checks failed
Test compiling project / test (push) Failing after 1m35s

This commit is contained in:
2024-12-08 19:42:24 +01:00
parent ec332c5f76
commit ff97ae18eb
11 changed files with 155 additions and 130 deletions

6
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,6 @@
{
"files.associations": {
"iostream": "cpp",
"random": "cpp"
}
}

Submodule lib/infinityPV_INA233_Arduino-library added at bc68e03c01

View File

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

View File

@@ -0,0 +1,96 @@
#include "leds.h"
#include <Arduino.h>
#include <ArduinoLog.h>
#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);
}
}
}

View File

@@ -0,0 +1,12 @@
#include <Arduino.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
void display_percentage(float percentage);
void display_error_code(byte err_code);
void display_task(void* parameter);

View File

@@ -1,4 +1,4 @@
#include "global_data.h"
#include "global_data/global_data.h"
NetworkData wifi_data;
NetworkData ethernet_data;

View File

@@ -20,140 +20,24 @@
#include <Preferences.h>
#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) {

View File

@@ -2,8 +2,8 @@
#include <ETH.h>
#include <WiFi.h>
#include "../global_data/defines.h"
#include "../global_data/global_data.h"
#include <Preferences.h>
#include <global_data/global_data.h>
int64_t mac_address = ESP.getEfuseMac();
uint8_t failed_connection_attempts = 0;

View File

@@ -2,8 +2,8 @@
#include <INA233.h>
#include <Preferences.h>
#include <ArduinoLog.h>
#include "../global_data/global_data.h"
#include "Wire.h"
#include <global_data/global_data.h>
#ifdef USE_INA226s

21
src/tools/tools.cpp Normal file
View File

@@ -0,0 +1,21 @@
#include <Arduino.h>
#include "tools.h"
#include <ArduinoLog.h>
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;
}

6
src/tools/tools.h Normal file
View File

@@ -0,0 +1,6 @@
#include <Arduino.h>
#include <global_data/global_data.h>
void printSuffix(Print* _logOutput, int logLevel);
void print_prefix(Print* _logOutput, int logLevel);
bool is_error(ActiveErrors active_errors);