diff --git a/software/include/lib/valve.h b/software/include/lib/valve.h index 2cfbde7..85c7bd8 100644 --- a/software/include/lib/valve.h +++ b/software/include/lib/valve.h @@ -17,8 +17,8 @@ #define VALVE_CHANNEL_CLOSE 1 #define VALVE_ENDPOSITION_CHECK_INTERVAL K_MSEC(100) -#define VALVE_OBSTACLE_THRESHOLD_OPEN_MA 500 -#define VALVE_OBSTACLE_THRESHOLD_CLOSE_MA 500 +#define VALVE_OBSTACLE_THRESHOLD_OPEN_MA 200 +#define VALVE_OBSTACLE_THRESHOLD_CLOSE_MA 200 /** * @brief Represents the static state of the valve (open or closed). diff --git a/software/lib/valve/valve.c b/software/lib/valve/valve.c index 2ba6dca..810af31 100644 --- a/software/lib/valve/valve.c +++ b/software/lib/valve/valve.c @@ -54,7 +54,7 @@ static void valve_work_handler(struct k_work *work) current_ma); current_movement = VALVE_MOVEMENT_ERROR; valve_stop(); - goto work_handler_cleanup; + return; } else if (current_ma > end_current_threshold_open_ma) { k_work_schedule(&valve_work, VALVE_ENDPOSITION_CHECK_INTERVAL); return; @@ -69,7 +69,7 @@ static void valve_work_handler(struct k_work *work) current_ma); current_movement = VALVE_MOVEMENT_ERROR; valve_stop(); - goto work_handler_cleanup; + return; } else if (current_ma > end_current_threshold_close_ma) { k_work_schedule(&valve_work, VALVE_ENDPOSITION_CHECK_INTERVAL); return; @@ -79,12 +79,7 @@ static void valve_work_handler(struct k_work *work) } current_movement = VALVE_MOVEMENT_IDLE; -work_handler_cleanup: - // Reset the movement timer - k_timer_stop(&movement_timer); - - vnd7050aj_set_output_state(vnd7050aj_dev, VALVE_CHANNEL_OPEN, false); - vnd7050aj_set_output_state(vnd7050aj_dev, VALVE_CHANNEL_CLOSE, false); + valve_stop(); } /** @@ -147,9 +142,9 @@ void valve_open(void) vnd7050aj_reset_fault(vnd7050aj_dev); vnd7050aj_set_output_state(vnd7050aj_dev, VALVE_CHANNEL_CLOSE, false); vnd7050aj_set_output_state(vnd7050aj_dev, VALVE_CHANNEL_OPEN, true); - current_state = VALVE_STATE_OPEN; - current_movement = VALVE_MOVEMENT_OPENING; /* Security: assume valve open as - soons as it starts opening */ + current_state = + VALVE_STATE_OPEN; /* Security: assume valve open as soon as it starts opening */ + current_movement = VALVE_MOVEMENT_OPENING; if (max_opening_time_s > 0) { k_timer_start(&movement_timer, K_SECONDS(max_opening_time_s), K_NO_WAIT); }