fsm->act_pos = 0; // reset position
fsm->current_state = &fsm_homing_fw_up; // move to fsm_stop
fsm->ans_can = 0;
- can_send_now = true;
+ can_send_status();
PRINT_STR(fsm->type,"FSM_HOMING_BW: EVENT_DO reached endswitch\n");
}
fsm->current_state = &fsm_homing_fw_5;
}
else
- {
+ { /* PUSHER */
fsm->current_state = &fsm_stop; // move to fsm_stop
- can_flags &= ~fsm->init_flag;
- can_send_now = true;
PRINT_STR(fsm->type,"fsm_homing_bw_zero: EVENT_DO reached endswitch\n");
}
}
break;
case EVENT_EXIT:
- fsm_homing_block = FSM_PUSHER; // release pusher
- can_flags &= ~fsm->init_flag;
break;
default:break;
}
}
+void fsm_wait_for_pusher_init(struct fsm *fsm, events my_event){
+ switch (my_event) {
+ case EVENT_ENTRY:
+ can_flags &= ~fsm->init_flag;
+ break;
+ case EVENT_DO:
+ if ((can_flags & LIFT_PUSHER_INIT) == 0) {
+ fsm->current_state = &fsm_stop; // move to fsm_homing_bw
+ }
+ break;
+ default:;
+ }
+}
+
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void fsm_stop(struct fsm *fsm, events my_event){
switch(my_event){
case EVENT_ENTRY:
+ can_flags &= ~fsm->init_flag;
+ can_send_status();
fsm->set_engine(fsm->motor_dir , ENG_STOP);
PRINT_STR(fsm->type,"FSM_STOP: EVENT_ENTRY \n");
break;
fsm->set_engine(fsm->motor_dir, ENG_STOP);
fsm->current_state = &fsm_stop; // move to fsm_homing_bw
// fsm->ans_can = fsm->act_pos;
- can_send_now = true;
+ can_send_status();
if(fsm->motor_dir == ENGINE_DIR_FW)
can_flags |= fsm->endsw_flag;
PRINT_STR(fsm->type,"fsm_move: EVENT_DO reached endswitch \n");
fsm->set_engine(fsm->motor_dir, ENG_STOP);
fsm->current_state = &fsm_wait; // move to fsm_homing_bw
fsm->ans_can = fsm->req_pos;
- can_send_now = true;
- can_send_now = true;
+ can_send_status();
PRINT_STR(fsm->type,"fsm_move: EVENT_DO reached target \n");
}
break;
case EVENT_DO:
+ fsm->ans_can = fsm->act_pos;
if((fsm->timeout_glob + TIME_WAIT) >+ time_ms)
{
PRINT_STR(fsm->type,"FSM_WAIT: EVENT_DO wait time done \n");