if (req >= fsm_jaw_left.min_pos && req <= fsm_jaw_left.max_pos) {
fsm_jaw_left.flags &= ~CAN_JAW_OUT_OF_BOUNDS;
- fsm_jaw_left.can_req_position = req;// save new req position of lift
- fsm_jaw_left.can_req_spd = spd;// save new req spd of lift
+ fsm_jaw_left.can_req_position = req;
+ fsm_jaw_left.can_req_spd = spd;
} else
fsm_jaw_left.flags |= CAN_JAW_OUT_OF_BOUNDS;
break;
if (req >= fsm_jaw_right.min_pos && req <= fsm_jaw_right.max_pos) {
fsm_jaw_right.flags &= ~CAN_JAW_OUT_OF_BOUNDS;
- fsm_jaw_right.can_req_position = req;// save new req position of lift
- fsm_jaw_right.can_req_spd = spd;// save new req spd of lift
+ fsm_jaw_right.can_req_position = req;
+ fsm_jaw_right.can_req_spd = spd;
} else
fsm_jaw_right.flags |= CAN_JAW_OUT_OF_BOUNDS;
break;
}
/*********************************************************/
-void can_send_status(void)
-{
+void can_send_status(struct fsm *fsm){
can_msg_t tx_msg;
- tx_msg.id = CAN_JAW_LEFT_STATUS;
+ tx_msg.id = fsm->can_id;
tx_msg.dlc = 5;
tx_msg.flags = 0;
- tx_msg.data[0] = (fsm_jaw_left.act_pos >> 8) & 0xFF;
- tx_msg.data[1] = fsm_jaw_left.act_pos & 0xFF;
- tx_msg.data[2] = (fsm_jaw_left.can_response >> 8) & 0xFF;
- tx_msg.data[3] = fsm_jaw_left.can_response & 0xFF;
- tx_msg.data[4] = fsm_jaw_left.flags;
+ tx_msg.data[0] = (fsm->act_pos >> 8) & 0xFF;
+ tx_msg.data[1] = fsm->act_pos & 0xFF;
+ tx_msg.data[2] = (fsm->can_response >> 8) & 0xFF;
+ tx_msg.data[3] = fsm->can_response & 0xFF;
+ tx_msg.data[4] = fsm->flags;
/*while*/(can_tx_msg(&tx_msg)); /* CAN erratum workaround */
-
- tx_msg.id = CAN_JAW_RIGHT_STATUS;
- tx_msg.dlc = 5;
- tx_msg.flags = 0;
- tx_msg.data[0] = (fsm_jaw_right.act_pos >> 8) & 0xFF;
- tx_msg.data[1] = fsm_jaw_right.act_pos & 0xFF;
- tx_msg.data[2] = (fsm_jaw_right.can_response >> 8) & 0xFF;
- tx_msg.data[3] = fsm_jaw_right.can_response & 0xFF;
- tx_msg.data[4] = fsm_jaw_right.flags;
- /*while*/(can_tx_msg(&tx_msg)); /* CAN erratum workaround */
-
+
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int main(void)
{
uint32_t main_time = timer_usec;
- uint32_t status_time = timer_usec;
+ uint32_t status_time_left = timer_usec;
+ uint32_t status_time_right = timer_usec;
init_periphery();
- SET_PIN(PINSEL1, 1, PINSEL_0); // inicializace bumper pinu (FIXME SET_PIN je BLBA implemetace, musim ji nekdy opravit)
+ SET_PIN(PINSEL1, 1, PINSEL_0);
SET_PIN(PINSEL1, 2, PINSEL_0);
SET_PIN(PINSEL1, 3, PINSEL_0);
SET_PIN(PINSEL0, BUMPER_REAR, PINSEL_0);
fsm_jaw_left.engine_en = &engine_A_en;
fsm_jaw_left.engine_dir = &engine_A_dir;
fsm_jaw_left.engine_pwm = &engine_A_pwm;
+
+ fsm_jaw_left.can_id=CAN_JAW_LEFT_STATUS;
//right jaw engine is engine B, conector MOTB on board
fsm_jaw_right.engine_en = &engine_B_en;
fsm_jaw_right.engine_dir = &engine_B_dir;
fsm_jaw_right.engine_pwm = &engine_B_pwm;
+
+ fsm_jaw_right.can_id=CAN_JAW_RIGHT_STATUS;
init_fsm(&fsm_jaw_right, &fsm_jaw_init);
init_fsm(&fsm_jaw_left, &fsm_jaw_init);
}
- if (timer_msec >= status_time + 100 || //repeat sending message every 100 ms
- fsm_jaw_left.trigger_can_send || //repeat sending message every 100 ms
- fsm_jaw_right.trigger_can_send) { //or when something important happen
+ if (timer_msec >= status_time_left + 100 || //repeat sending message every 100 ms
+ fsm_jaw_left.trigger_can_send) { //or when something important happen
fsm_jaw_left.trigger_can_send = false;
- fsm_jaw_right.trigger_can_send = false;
- status_time = timer_msec; //save new time, when message was sent
- can_send_status();
+ status_time_left = timer_msec; //save new time, when message was sent
+ can_send_status(&fsm_jaw_left);
}
-
-// start_button();
+
+ if (timer_msec >= status_time_right + 100 || //repeat sending message every 100 ms
+ fsm_jaw_right.trigger_can_send) { //or when something important happen
+ fsm_jaw_right.trigger_can_send = false;
+ status_time_right = timer_msec; //save new time, when message was sent
+ can_send_status(&fsm_jaw_right);
+
+ }
+
handle_bumper();
blink_led();