96 lines
2.5 KiB
C++
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);
|
|
}
|
|
}
|
|
} |