From e53c48dd964cc605e7431a1325f605860d7545cf Mon Sep 17 00:00:00 2001 From: Florian Date: Fri, 27 Jan 2023 14:35:39 -0600 Subject: [PATCH] [ONOFF] - Improve Led display (#1430) Improve Led display when limits are reached --- main/User_config.h | 18 +++++++++++++++++- main/ZactuatorONOFF.ino | 26 ++++++++++---------------- main/config_ONOFF.h | 2 +- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/main/User_config.h b/main/User_config.h index a52b9f8473..7e071b12d9 100644 --- a/main/User_config.h +++ b/main/User_config.h @@ -452,9 +452,13 @@ int lowpowermode = DEFAULT_LOW_POWER_MODE; # define SendReceiveIndicatorOFF() digitalWrite(LED_SEND_RECEIVE, !LED_SEND_RECEIVE_ON) # define InfoIndicatorON() digitalWrite(LED_INFO, LED_INFO_ON) # define InfoIndicatorOFF() digitalWrite(LED_INFO, !LED_INFO_ON) +# define CriticalIndicatorON() // Not used #else // Management of Errors, reception/emission and informations indicators with RGB LED # include CRGB leds[FASTLED_IND_NUM_LEDS]; +# ifdef FASTLED_IND_DATA_GPIO2 // Only used for Critical Indicator +CRGB leds2[FASTLED_IND_NUM_LEDS]; +# endif # ifndef RGB_LED_POWER # define RGB_LED_POWER -1 // If the RGB Led is linked to GPIO pin for power define it here # endif @@ -471,12 +475,15 @@ CRGB leds[FASTLED_IND_NUM_LEDS]; # ifndef FASTLED_ERROR_LED # define FASTLED_ERROR_LED 0 // First Led # endif +# ifndef FASTLED_CRITICAL_LED +# define FASTLED_CRITICAL_LED 0 // First Led +# endif # define SetupIndicators() \ pinMode(RGB_LED_POWER, OUTPUT); \ digitalWrite(RGB_LED_POWER, HIGH); \ FastLED.addLeds(leds, FASTLED_IND_NUM_LEDS); \ - FastLED.setBrightness(FASTLED_BRIGHTNESS); + FastLED.setBrightness(FASTLED_BRIGHTNESS) # define ErrorIndicatorON() \ leds[FASTLED_ERROR_LED] = CRGB::Orange; \ FastLED.show() @@ -495,6 +502,15 @@ CRGB leds[FASTLED_IND_NUM_LEDS]; # define InfoIndicatorOFF() \ leds[FASTLED_INFO_LED] = CRGB::Black; \ FastLED.show() +# ifdef FASTLED_IND_DATA_GPIO2 +// For the critical ON indicator there is no method to turn it off, the only way is to unplug the device +// This enable to have persistence of the indicator to inform the user +# define CriticalIndicatorON() \ + FastLED.addLeds(leds2, FASTLED_IND_NUM_LEDS); \ + FastLED.setBrightness(FASTLED_BRIGHTNESS); \ + leds2[FASTLED_INFO_LED] = CRGB::Red; \ + FastLED.show() +# endif #endif #ifdef ESP8266 diff --git a/main/ZactuatorONOFF.ino b/main/ZactuatorONOFF.ino index 0e170502dc..a40c52b4ba 100644 --- a/main/ZactuatorONOFF.ino +++ b/main/ZactuatorONOFF.ino @@ -119,14 +119,11 @@ void overLimitTemp(void* pvParameters) { float internalTempc = intTemperatureRead(); Log.trace(F("Internal temperature of the ESP32 %F" CR), internalTempc); // We switch OFF the actuator if the temperature of the ESP32 is more than MAX_TEMP_ACTUATOR two consecutive times, so as to avoid false single readings to trigger the relay OFF. - if (internalTempc > MAX_TEMP_ACTUATOR && previousInternalTempc > MAX_TEMP_ACTUATOR && digitalRead(ACTUATOR_ONOFF_GPIO) == ACTUATOR_ON) { - Log.error(F("[ActuatorONOFF] OverTemperature detected ( %F > %F ) switching OFF Actuator" CR), internalTempc, MAX_TEMP_ACTUATOR); - ActuatorTrigger(); - for (int i = 0; i < 30; i++) { - ErrorIndicatorON(); - vTaskDelay(200); - ErrorIndicatorOFF(); - vTaskDelay(200); + if (internalTempc > MAX_TEMP_ACTUATOR && previousInternalTempc > MAX_TEMP_ACTUATOR) { + if (digitalRead(ACTUATOR_ONOFF_GPIO) == ACTUATOR_ON) { // This could be with thew previous condition, but it is better to trigger the digitalRead only if the previous condition is met + Log.error(F("[ActuatorONOFF] OverTemperature detected ( %F > %F ) switching OFF Actuator" CR), internalTempc, MAX_TEMP_ACTUATOR); + ActuatorTrigger(); + CriticalIndicatorON(); } } previousInternalTempc = internalTempc; @@ -143,14 +140,11 @@ void overLimitCurrent(void* pvParameters) { float current = getRN8209current(); Log.trace(F("RN8209 Current %F" CR), current); // We switch OFF the actuator if the current of the RN8209 is more than MAX_CURRENT_ACTUATOR. - if (current > MAX_CURRENT_ACTUATOR && digitalRead(ACTUATOR_ONOFF_GPIO) == ACTUATOR_ON) { - Log.error(F("[ActuatorONOFF] OverCurrent detected ( %F > %F ) switching OFF Actuator" CR), current, MAX_CURRENT_ACTUATOR); - ActuatorTrigger(); - for (int i = 0; i < 30; i++) { - ErrorIndicatorON(); - vTaskDelay(200); - ErrorIndicatorOFF(); - vTaskDelay(200); + if (current > MAX_CURRENT_ACTUATOR) { + if (digitalRead(ACTUATOR_ONOFF_GPIO) == ACTUATOR_ON) { // This could be with thew previous condition, but it is better to trigger the digitalRead only if the previous condition is met + Log.error(F("[ActuatorONOFF] OverCurrent detected ( %F > %F ) switching OFF Actuator" CR), current, MAX_CURRENT_ACTUATOR); + ActuatorTrigger(); + CriticalIndicatorON(); } } vTaskDelay(TimeBetweenReadingCurrent); diff --git a/main/config_ONOFF.h b/main/config_ONOFF.h index 8e14f5b090..c3ee1ffeb6 100644 --- a/main/config_ONOFF.h +++ b/main/config_ONOFF.h @@ -57,7 +57,7 @@ extern void MQTTtoONOFF(char* topicOri, JsonObject& RFdata); # define TimeBetweenReadingIntTemp 5000 // Time interval between internal temp measurement to switch off the relay if MAX_TEMP_ACTUATOR is reached #endif #ifndef TimeBetweenReadingCurrent -# define TimeBetweenReadingCurrent 1000 // Time interval between internal temp measurement to switch off the relay if MAX_TEMP_ACTUATOR is reached +# define TimeBetweenReadingCurrent 1000 // Time interval between internal current measurement to switch off the relay if MAX_TEMP_ACTUATOR is reached #endif /*-------------------PIN DEFINITIONS----------------------*/ // default pin, if not set into the MQTT json