Changed CounterType 1 to micros() and implemented stall detection

This commit is contained in:
hkrupp 2018-08-09 13:24:13 +02:00
parent acbc76614a
commit 432a812dc3

View File

@ -21,13 +21,13 @@
* Counter sensors (water meters, electricity meters etc.) * Counter sensors (water meters, electricity meters etc.)
\*********************************************************************************************/ \*********************************************************************************************/
unsigned long last_counter_timer[MAX_COUNTERS]; // Last counter time in milli seconds unsigned long last_counter_timer[MAX_COUNTERS]; // Last counter time in micro seconds
void CounterUpdate(byte index) void CounterUpdate(byte index)
{ {
unsigned long counter_debounce_time = millis() - last_counter_timer[index -1]; unsigned long counter_debounce_time = micros() - last_counter_timer[index -1];
if (counter_debounce_time > Settings.pulse_counter_debounce) { if (counter_debounce_time > Settings.pulse_counter_debounce * 1000) {
last_counter_timer[index -1] = millis(); last_counter_timer[index -1] = micros();
if (bitRead(Settings.pulse_counter_type, index -1)) { if (bitRead(Settings.pulse_counter_type, index -1)) {
RtcSettings.pulse_counter[index -1] = counter_debounce_time; RtcSettings.pulse_counter[index -1] = counter_debounce_time;
} else { } else {
@ -98,7 +98,7 @@ void CounterShow(boolean json)
for (byte i = 0; i < MAX_COUNTERS; i++) { for (byte i = 0; i < MAX_COUNTERS; i++) {
if (pin[GPIO_CNTR1 +i] < 99) { if (pin[GPIO_CNTR1 +i] < 99) {
if (bitRead(Settings.pulse_counter_type, i)) { if (bitRead(Settings.pulse_counter_type, i)) {
dtostrfd((double)RtcSettings.pulse_counter[i] / 1000, 3, counter); dtostrfd((double)RtcSettings.pulse_counter[i] / 1000000, 6, counter);
} else { } else {
dsxflg++; dsxflg++;
dtostrfd(RtcSettings.pulse_counter[i], 0, counter); dtostrfd(RtcSettings.pulse_counter[i], 0, counter);
@ -124,6 +124,7 @@ void CounterShow(boolean json)
#endif // USE_WEBSERVER #endif // USE_WEBSERVER
} }
} }
if(bitRead(Settings.pulse_counter_type, i)) RtcSettings.pulse_counter[i]=0xFFFFFFFF; // Set Timer to max in case of no more interrupts due to stall of measured device
} }
if (json) { if (json) {
if (header) { if (header) {