uint8_t odometry_move_straight(int16_t distance, uint8_t speed, uint8_t (*callback)(uint32_t start_time)) { uint8_t buffer[8]; odometry_set_speed(speed); buffer[0] = 'D'; buffer[1] = distance >> 8; buffer[2] = distance & 0xFF; while(CAN_Write(buffer, DRIVER_TX_IDENTIFICATOR)) _delay_ms(50); return odometry_wait_until_done(callback); }
uint8_t odometry_set_angle(int16_t angle, uint8_t speed, uint8_t (*callback)(uint32_t start_time)) { uint8_t buffer[8]; odometry_set_speed(speed); angle *= -1; buffer[0] = 'A'; buffer[1] = angle >> 8; buffer[2] = angle & 0xFF; while(CAN_Write(buffer, DRIVER_TX_IDENTIFICATOR)) _delay_ms(50); return odometry_wait_until_done(callback); }
uint8_t odometry_move_to_position(struct odometry_position* position, uint8_t speed, uint8_t direction, uint8_t (*callback)(uint32_t start_time)) { uint8_t buffer[8]; odometry_set_speed(speed); buffer[0] = 'G'; buffer[1] = position->x >> 8; buffer[2] = position->x & 0xFF; buffer[3] = position->y >> 8; buffer[4] = position->y & 0xFF; buffer[5] = 0;//Mozda ne treba 0 buffer[6] = direction; while(CAN_Write(buffer, DRIVER_TX_IDENTIFICATOR)) _delay_ms(50); return odometry_wait_until_done(callback); }