This commit is contained in:
96
src/external_interfacing/leds.cpp
Normal file
96
src/external_interfacing/leds.cpp
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user