@@ -220,10 +220,14 @@ void setup() {
220220 pinMode (SSR_PIN_2 , OUTPUT );
221221 pinMode (INPUT_PIN , INPUT_PULLDOWN );
222222 pinMode (SIGNAL_PIN , OUTPUT );
223+ pinMode (BATTERY_LED_PIN_1 , OUTPUT );
224+ pinMode (BATTERY_LED_PIN_2 , OUTPUT );
223225
224226 digitalWrite (SSR_PIN_1 , LOW );
225227 digitalWrite (SSR_PIN_2 , LOW );
226228 digitalWrite (SIGNAL_PIN , HIGH );
229+ digitalWrite (BATTERY_LED_PIN_1 , LOW );
230+ digitalWrite (BATTERY_LED_PIN_2 , LOW );
227231
228232 // ADC setup (ESP32-C3): 12-bit readings, extended input range.
229233 analogReadResolution (12 );
@@ -237,6 +241,8 @@ void setup() {
237241 lastHeater2State = (digitalRead (SSR_PIN_2 ) == HIGH );
238242 lastSignalPinState = (digitalRead (SIGNAL_PIN ) == LOW );
239243 lastInputPinState = (digitalRead (INPUT_PIN ) == HIGH );
244+ lastBatteryLed1State = (digitalRead (BATTERY_LED_PIN_1 ) == HIGH );
245+ lastBatteryLed2State = (digitalRead (BATTERY_LED_PIN_2 ) == HIGH );
240246
241247 const uint8_t savedBootMode = getAndClearBootMode ();
242248 if (savedBootMode == BOOT_MODE_NORMAL ) {
@@ -428,6 +434,24 @@ void loop() {
428434 const bool batt2OffNow = batt2Sample.offNow ;
429435 const bool batt2OnNow = batt2Sample.onNow ;
430436
437+ // Battery presence LEDs: ON when battery is stably detected as ON.
438+ // Avoid flicker in the hysteresis band by only updating on stable ON/OFF.
439+ if (batt1OnNow && !lastBatteryLed1State) {
440+ lastBatteryLed1State = true ;
441+ digitalWrite (BATTERY_LED_PIN_1 , HIGH );
442+ } else if (batt1OffNow && lastBatteryLed1State) {
443+ lastBatteryLed1State = false ;
444+ digitalWrite (BATTERY_LED_PIN_1 , LOW );
445+ }
446+
447+ if (batt2OnNow && !lastBatteryLed2State) {
448+ lastBatteryLed2State = true ;
449+ digitalWrite (BATTERY_LED_PIN_2 , HIGH );
450+ } else if (batt2OffNow && lastBatteryLed2State) {
451+ lastBatteryLed2State = false ;
452+ digitalWrite (BATTERY_LED_PIN_2 , LOW );
453+ }
454+
431455 // Persist last known battery presence mask (bit0 = battery1, bit1 = battery2)
432456 // only when it changes, to avoid unnecessary EEPROM wear.
433457 uint8_t currentMask = 0 ;
0 commit comments