Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -rebd43ef11d75ff69de2eda6aec1142858bc1237e -r7ae6d3a29de6f544da89b10ce8041861a310f2a5 --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision ebd43ef11d75ff69de2eda6aec1142858bc1237e) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 7ae6d3a29de6f544da89b10ce8041861a310f2a5) @@ -39,6 +39,9 @@ #define TARGET_RO_PRESSURE_PSI 130 ///< Target pressure for RO pump. #define TARGET_RO_FLOW_RATE_L 0.3 ///< Target flow rate for RO pump. +#define DELAY_RES_DRAIN_VALVE_MS 1000 ///< Delay reservoir drain valve open by 1 second. +#define DELAY_DRAIN_PUMP_MS 2000 ///< Delay drain pump on by 2 seconds. + // ********** private data ********** static DG_DRAIN_STATE_T drainState = DG_DRAIN_STATE_START; ///< Currently active drain state. @@ -76,18 +79,16 @@ if ( DG_RESERVOIR_1 == inactiveReservoir ) { - setValveState( VRD1, VALVE_STATE_OPEN ); + setValveStateDelayed( VRD1, VALVE_STATE_OPEN, DELAY_RES_DRAIN_VALVE_MS ); } else if ( DG_RESERVOIR_2 == inactiveReservoir ) { - setValveState( VRD2, VALVE_STATE_OPEN ); + setValveStateDelayed( VRD2, VALVE_STATE_OPEN, DELAY_RES_DRAIN_VALVE_MS ); } #endif - // set initial actuator states setValveState( VDR, VALVE_STATE_DRAIN_C_TO_NO ); - - setDrainPumpTargetRPM( TARGET_DRAIN_PUMP_RPM ); + setDrainPumpTargetRPMDelayed( TARGET_DRAIN_PUMP_RPM, DELAY_DRAIN_PUMP_MS ); setROPumpTargetFlowRate( TARGET_RO_FLOW_RATE_L, TARGET_RO_PRESSURE_PSI ); } @@ -110,7 +111,10 @@ switch ( drainState ) { case DG_DRAIN_STATE_START: - drainState = DG_DRAIN_STATE_DRAIN; + if ( TRUE == isDrainPumpOn() ) + { + drainState = DG_DRAIN_STATE_DRAIN; + } break; case DG_DRAIN_STATE_DRAIN: