Files
waterlevel-software/src/external_interfacing/leds.cpp
tobimai eeaac9548e
Some checks failed
Test compiling project / test (push) Failing after 1m34s
Rework logging
2025-03-10 23:33:41 +01:00

96 lines
2.5 KiB
C++

#include "leds.h"
#include <Arduino.h>
#include <Elog.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 {
logger.log(0, DEBUG, "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);
}
}
}