Index: firmware/App/Monitors/Conductivity.c =================================================================== diff -u -rde5e503e4adc38658ac9d15cdad2b755a3ce566b -rdfbd800e10847db992bd6a9981c26d1f8d763c6f --- firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision de5e503e4adc38658ac9d15cdad2b755a3ce566b) +++ firmware/App/Monitors/Conductivity.c (.../Conductivity.c) (revision dfbd800e10847db992bd6a9981c26d1f8d763c6f) @@ -40,6 +40,7 @@ #define FP_CONDUCTIVITY_DATA_PUBLISH_COUNTER_START_COUNT 41 ///< FP Conductivity data publish counter start count. #define RO_DATA_PUBLISH_COUNTER_START_COUNT 42 ///< FP RO Data publish counter start count. #define RESISTANCE_DATA_PUBLISH_COUNTER_START_COUNT 43 ///< DD Resistance data publish counter start count. +#define CONDUCTIVITY_MAX_FILTER_SIZE_MULTIPLIER ( 252 ) ///< Maximum conductivity filter sample count. #define CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS ( 30 ) ///< Filter conductivity temperature data for given time. Currently set to have 5 samples over 3.5s ( 700ms sample rate ) #define FILTER_SIZE_MULTIPLIER ( 7 ) ///< Conductivity filter size multiplier. #define SIZE_OF_COND_TEMP_ROLLING_AVG ( CONDUCTIVITY_TEMP_SAMPLE_FILTER_MS / TASK_PRIORITY_INTERVAL ) ///< Filtered conductivity temprature moving average sample count. @@ -50,7 +51,7 @@ /// Filter conductivity readings record. typedef struct { - F32 conductivityReadings[ FILTER_SIZE_MULTIPLIER ]; ///< Holds conductivity sample rolling average. + F32 conductivityReadings[ CONDUCTIVITY_MAX_FILTER_SIZE_MULTIPLIER ]; ///< Holds conductivity sample rolling average. U32 conductivityReadingsIdx; ///< Index for next sample in rolling average array. F32 conductivityReadingsTotal; ///< Rolling total - used to calc average. U32 conductivityReadingsCount; ///< Number of samples in rolling average buffer @@ -133,7 +134,7 @@ roRRAvg.ovInitData = 0.0F; roRRAvg.override = OVERRIDE_RESET; roRRSampleIntervalCounter = 0; - conductivityFilterSize = 0; + conductivityFilterSize = FILTER_SIZE_MULTIPLIER; memset( &roRRSamples, 0, sizeof( roRRSamples ) ); @@ -357,14 +358,32 @@ { U32 readingIndex; - for ( readingIndex = 0; readingIndex < FILTER_SIZE_MULTIPLIER; readingIndex++ ) + F32 seedConductivity = filteredcurrentConductivityReadings[ sensor ].data; + BOOL hasPreviousSamples = ( filteredConductivityReadings[ sensor ].conductivityReadingsCount > 0 ); + + for ( readingIndex = 0; readingIndex < CONDUCTIVITY_MAX_FILTER_SIZE_MULTIPLIER; readingIndex++ ) { - filteredConductivityReadings[ sensor ].conductivityReadings[ readingIndex ] = 0.0F; + if ( ( TRUE == hasPreviousSamples ) && ( readingIndex < conductivityFilterSize ) ) + { + filteredConductivityReadings[ sensor ].conductivityReadings[ readingIndex ] = seedConductivity; + } + else + { + filteredConductivityReadings[ sensor ].conductivityReadings[ readingIndex ] = 0.0F; + } } filteredConductivityReadings[ sensor ].conductivityReadingsIdx = 0; - filteredConductivityReadings[ sensor ].conductivityReadingsTotal = 0.0F; - filteredConductivityReadings[ sensor ].conductivityReadingsCount = 0; + if ( TRUE == hasPreviousSamples ) + { + filteredConductivityReadings[ sensor ].conductivityReadingsTotal = seedConductivity * (F32)conductivityFilterSize; + filteredConductivityReadings[ sensor ].conductivityReadingsCount = conductivityFilterSize; + } + else + { + filteredConductivityReadings[ sensor ].conductivityReadingsTotal = 0.0F; + filteredConductivityReadings[ sensor ].conductivityReadingsCount = 0; + } } }