From 52060259cecd1919bb6b1f8d3dc6327e92b8c835 Mon Sep 17 00:00:00 2001 From: Barbudor Date: Sat, 8 Apr 2023 21:31:50 +0200 Subject: [PATCH] improve ADC_CT (#18369) --- tasmota/tasmota_xsns_sensor/xsns_02_analog.ino | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino b/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino index acc697e81..247d8b67c 100644 --- a/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino +++ b/tasmota/tasmota_xsns_sensor/xsns_02_analog.ino @@ -469,7 +469,8 @@ void AdcGetCurrentPower(uint8_t idx, uint8_t factor) { uint16_t analog_max = 0; if (0 == Adc[idx].param1) { - for (uint32_t i = 0; i < samples; i++) { + unsigned long tstart=millis(); + while (millis()-tstart < 35) { analog = analogRead(Adc[idx].pin); if (analog < analog_min) { analog_min = analog; @@ -477,9 +478,11 @@ void AdcGetCurrentPower(uint8_t idx, uint8_t factor) { if (analog > analog_max) { analog_max = analog; } - delay(1); } + //AddLog(0, PSTR("min: %u, max:%u, dif:%u"), analog_min, analog_max, analog_max-analog_min); Adc[idx].current = (float)(analog_max-analog_min) * ((float)(Adc[idx].param2) / 100000); + if (Adc[idx].current < (((float)Adc[idx].param4) / 10000.0)) + Adc[idx].current = 0.0; } else { analog = AdcRead(Adc[idx].pin, 5);