static void wait_for_cmd(struct fsm *fsm, enum event event);
static void move(struct fsm *fsm, enum event event);
static void homing(struct fsm *fsm, enum event event);
+static void stop(void);
static void homing(struct fsm *fsm, enum event event)
time_start=timer_msec;
break;
case EVENT_DO:
- //homing with 3s timeout
+ //homing with 8s timeout
engine_A_dir(ENGINE_DIR_FW);
- engine_A_pwm(50);
+ engine_A_pwm(20);
if(fsm->flags & CAN_LIFT_SWITCH_DOWN){
- engine_A_pwm(0);
+ stop();
fsm->act_pos=0;
fsm->current_state = wait_for_cmd;
fsm->flags |= CAN_LIFT_HOMED;
fsm->can_req_homing=0;
// fsm->can_req_position = 0x54E2;
}
- else if (timer_msec >= (time_start + 3000)) {
- engine_A_pwm(0);
+ else if (timer_msec >= (time_start + 8000)) {
+ stop();
fsm->current_state = wait_for_cmd;
fsm->flags |= CAN_LIFT_TIMEOUT;
fsm->flags &= ~CAN_LIFT_HOMED;
break;
case EVENT_DO:
fsm->flags &= ~CAN_LIFT_INITIALIZING;
+ fsm->current_state = wait_for_cmd;
break;
case EVENT_EXIT:
break;
//homing if push home button
if (fsm->flags & CAN_LIFT_SWITCH_HOME){
fsm->current_state=homing;
+ break;
}
//homing if match start, but did not homing before start
if ((fsm->can_req_homing) && !(fsm->flags & CAN_LIFT_HOMED)){
fsm->current_state=homing;
+ break;
}
do_control(fsm, 2);
if (fsm->can_req_position != last_can_req_pos &&
// up = (up+1)%12;
deb_led_change(LEDG);
-
- if ((IO0PIN & (1<<END_SWITCH_UP)) || (IO0PIN & (1<<END_SWITCH_DOWN)))
- deb_led_on(LEDR);
- else
- deb_led_off(LEDR);
-
-
-// send_rs_str("UP\t");
-// send_rs_int(IO0PIN & (1<<END_SWITCH_UP));
-// send_rs_str("\n");
-// send_rs_str("DOWN\t");
-// send_rs_int(IO0PIN & (1<<END_SWITCH_DOWN));
-// send_rs_str("\n");
-
+
send_rs_str("ACT_POS\t");
send_rs_int(fsm_lift.act_pos);
+ send_rs_str("\t");
+ send_rs_str("CAN_FLAGS\t");
+ send_rs_int(fsm_lift.flags);
send_rs_str("\n");
}
}
start_button();
color_hadler();
+ lift_switches_hadler();
blink_led();
}
}