#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 { 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); } } }