Index: firmware/App/Controllers/SyringePump.c =================================================================== diff -u -rfba69244d94307e50fefaa1e88bcbb979584461e -r9eca7842221b1510b0b7b926a3a792e09b4c80cb --- firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision fba69244d94307e50fefaa1e88bcbb979584461e) +++ firmware/App/Controllers/SyringePump.c (.../SyringePump.c) (revision 9eca7842221b1510b0b7b926a3a792e09b4c80cb) @@ -84,6 +84,7 @@ #define SYRINGE_FORCE_OCCLUSION_DIFF_V 0.5F ///< Force sensor difference (in V) which an occlusion alarm is triggered. #define SYRINGE_FORCE_PLUNGER_THRESHOLD_V 0.25F ///< Force sensor threshold (in V) above which we have engaged with plunger. #define SYRINGE_PUMP_SYRINGE_DETECT_THRESHOLD_V 2.0F ///< Syringe pump syringe detected threshold (in V). +#define SYRINGE_PUMP_SYRINGE_DETECT_DEBOUNCE_TIME_MS ( 0.5 * MS_PER_SECOND ) ///< Syringe pump syringe detect debounce time in milliseconds. #define SYRINGE_PUMP_HOME_DETECT_THRESHOLD_V 0.25F ///< Syringe pump home detected threshold (in V). #define SYRINGE_PUMP_EMPTY_THRESHOLD_V 2.5F ///< Syringe pump empty detected threshold (in V). #define SYRINGE_PUMP_PRELOAD_MARGIN_VOLUME_ML 1.0F ///< Target syringe preload margin volume (in mL). Total to deliver plus this give syringe load position. @@ -255,6 +256,8 @@ static U32 syringePumpEmptyForceCount; ///< Counter for empty syringe detection. +static U32 syringePumpSyringeDetectDebounceStartTime; ///< Syringe pump syringe detect debounce start time. + // ********** private function prototypes ********** static void resetSyringePumpRequestFlags( void ); @@ -924,18 +927,30 @@ * @brief * The isSyringeDetected function determines whether a syringe is currently * detected. - * @details Inputs: syringePumpMeasSyringeDetectionSwitch - * @details Outputs: none + * @details Inputs: syringePumpSyringeDetectDebounceStartTime + * @details Outputs: syringePumpSyringeDetectDebounceStartTime * @return TRUE if syringe detected, FALSE if not *************************************************************************/ BOOL isSyringeDetected( void ) { - BOOL result = FALSE; + // Assume the syringe is there until the debounce time has elapsed + BOOL result = TRUE; - if ( getSyringePumpSyringeDetectorV() >= SYRINGE_PUMP_SYRINGE_DETECT_THRESHOLD_V ) + if ( getSyringePumpSyringeDetectorV() < SYRINGE_PUMP_SYRINGE_DETECT_THRESHOLD_V ) { - result = TRUE; + if ( 0 == syringePumpSyringeDetectDebounceStartTime ) + { + syringePumpSyringeDetectDebounceStartTime = getMSTimerCount(); + } + else if ( TRUE == didTimeout( syringePumpSyringeDetectDebounceStartTime, SYRINGE_PUMP_SYRINGE_DETECT_DEBOUNCE_TIME_MS ) ) + { + result = FALSE; + } } + else + { + syringePumpSyringeDetectDebounceStartTime = 0; + } return result; }