From ecd176042ecbaa5047ab0f6cbf1fb0a9e8753f3c Mon Sep 17 00:00:00 2001 From: Harald Barth Date: Mon, 26 Oct 2020 00:56:25 +0100 Subject: [PATCH] checkAll() only checks one now (and should be renamed) --- DCCEXParser.cpp | 3 +-- Sensors.cpp | 31 +++++++++++++++++-------------- Sensors.h | 1 + 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/DCCEXParser.cpp b/DCCEXParser.cpp index e958ce5..712313c 100644 --- a/DCCEXParser.cpp +++ b/DCCEXParser.cpp @@ -360,8 +360,7 @@ void DCCEXParser::parse(Print *stream, byte *com, bool blocking) return; case 'Q': // SENSORS - Sensor::checkAll(NULL); // Update, don't print changes - Sensor::printAll(stream); // Print all + Sensor::printAll(stream); return; case 's': // diff --git a/Sensors.cpp b/Sensors.cpp index e0913a2..b9a9c9d 100644 --- a/Sensors.cpp +++ b/Sensors.cpp @@ -72,26 +72,27 @@ decide to ignore the return and only react to triggers. /////////////////////////////////////////////////////////////////////////////// // -// checks all defined sensors and prints _changed_ sensor states +// checks one defined sensors and prints _changed_ sensor state // to stream unless stream is NULL in which case only internal -// state is updated +// state is updated. Then advances to next sensor which will +// be checked att next invocation. // /////////////////////////////////////////////////////////////////////////////// void Sensor::checkAll(Print *stream){ + + if (firstSensor == NULL) return; + if (readingSensor == NULL) readingSensor=firstSensor; + readingSensor->signal=readingSensor->signal*(1.0-SENSOR_DECAY)+digitalRead(readingSensor->data.pin)*SENSOR_DECAY; - for(Sensor * tt=firstSensor;tt!=NULL;tt=tt->nextSensor){ - tt->signal=tt->signal*(1.0-SENSOR_DECAY)+digitalRead(tt->data.pin)*SENSOR_DECAY; - - if(!tt->active && tt->signal<0.5){ - tt->active=true; - if (stream != NULL) StringFormatter::send(stream, F(""), tt->data.snum); - } else if(tt->active && tt->signal>0.9){ - tt->active=false; - if (stream != NULL) StringFormatter::send(stream, F(""), tt->data.snum); - } - } // loop over all sensors - + if(!readingSensor->active && readingSensor->signal<0.5){ + readingSensor->active=true; + if (stream != NULL) StringFormatter::send(stream, F(""), readingSensor->data.snum); + } else if(readingSensor->active && readingSensor->signal>0.9){ + readingSensor->active=false; + if (stream != NULL) StringFormatter::send(stream, F(""), readingSensor->data.snum); + } + readingSensor=readingSensor->nextSensor; } // Sensor::checkAll /////////////////////////////////////////////////////////////////////////////// @@ -159,6 +160,7 @@ bool Sensor::remove(int n){ else pp->nextSensor=tt->nextSensor; + if (readingSensor==tt) readingSensor=tt->nextSensor; free(tt); return true; @@ -196,3 +198,4 @@ void Sensor::store(){ /////////////////////////////////////////////////////////////////////////////// Sensor *Sensor::firstSensor=NULL; +Sensor *Sensor::readingSensor=NULL; diff --git a/Sensors.h b/Sensors.h index 717da69..901d1e5 100644 --- a/Sensors.h +++ b/Sensors.h @@ -31,6 +31,7 @@ struct SensorData { struct Sensor{ static Sensor *firstSensor; + static Sensor *readingSensor; SensorData data; boolean active; float signal;