Magnetometer Update + Car turning Update

This commit is contained in:
Devoalda 2023-11-09 17:41:45 +08:00
parent 9e391da487
commit a022c74981
4 changed files with 23 additions and 14 deletions

View File

@ -5,7 +5,7 @@
#define I2C_SDA (8) #define I2C_SDA (8)
#define I2C_SCL (9) #define I2C_SCL (9)
#define DIRECTION_READ_DELAY (100) #define DIRECTION_READ_DELAY (200)
#define NUM_READINGS ( 10 ) // Number of readings to #define NUM_READINGS ( 10 ) // Number of readings to
// take before // take before

View File

@ -388,7 +388,7 @@ magnetometer_tasks_init(car_struct_t *car_struct)
xTaskCreate(monitor_direction_task, xTaskCreate(monitor_direction_task,
"Direction Task", "Direction Task",
configMINIMAL_STACK_SIZE, configMINIMAL_STACK_SIZE,
car_struct, (void *) car_struct->p_direction,
PRIO, PRIO,
&h_direction_task); &h_direction_task);
} }

View File

@ -299,6 +299,7 @@ magnetometer_init(car_struct_t *p_car_struct)
p_car_struct->p_direction->roll_angle = LEFT; p_car_struct->p_direction->roll_angle = LEFT;
p_car_struct->p_direction->pitch_angle = UP; p_car_struct->p_direction->pitch_angle = UP;
printf("Magnetometer Initialising\n");
i2c_init(I2C_PORT, 400 * 1000); i2c_init(I2C_PORT, 400 * 1000);
gpio_set_function(I2C_SDA, GPIO_FUNC_I2C); gpio_set_function(I2C_SDA, GPIO_FUNC_I2C);

View File

@ -8,8 +8,7 @@ bool
check_collision(void *params) check_collision(void *params)
{ {
car_struct_t *car_struct = (car_struct_t *)params; car_struct_t *car_struct = (car_struct_t *)params;
return !(car_struct->obs->line_detected) || return car_struct->obs->line_detected || car_struct->obs->ultrasonic_detected;
car_struct->obs->ultrasonic_detected;
} }
void void
@ -18,19 +17,20 @@ motor_control_task(void *params)
car_struct_t *car_struct = (car_struct_t *)params; car_struct_t *car_struct = (car_struct_t *)params;
for (;;) for (;;)
{ {
printf("Collision: %d\n", check_collision(car_struct));
if (check_collision(car_struct)) if (check_collision(car_struct))
{ {
spin_left(90, car_struct); spin_left(90, car_struct);
if (check_collision(car_struct)) // if (check_collision(car_struct))
{ // {
spin_right(180, car_struct); // spin_right(180, car_struct);
//
if (check_collision(car_struct)) // if (check_collision(car_struct))
{ // {
spin_right(90, car_struct); // spin_right(90, car_struct);
} // }
} // }
} }
else else
{ {
@ -52,10 +52,13 @@ main(void)
motor_t motor_left; motor_t motor_left;
motor_pid_t pid; motor_pid_t pid;
direction_t direction;
car_struct_t car_struct = { .p_right_motor = &motor_right, car_struct_t car_struct = { .p_right_motor = &motor_right,
.p_left_motor = &motor_left, .p_left_motor = &motor_left,
.p_pid = &pid, .p_pid = &pid,
.obs = &obs}; .obs = &obs,
.p_direction = &direction};
// ultra // ultra
ultrasonic_init(&car_struct); ultrasonic_init(&car_struct);
@ -72,6 +75,11 @@ main(void)
motor_tasks_init(&car_struct, &h_wheel_sensor_isr_handler); motor_tasks_init(&car_struct, &h_wheel_sensor_isr_handler);
printf("Motor initialized!\n"); printf("Motor initialized!\n");
// Magnetometer
magnetometer_init(&car_struct);
// magnetometer_tasks_init(&car_struct);
printf("Magnetometer initialized!\n");
// control task // control task
TaskHandle_t h_motor_turning_task_handle = NULL; TaskHandle_t h_motor_turning_task_handle = NULL;
xTaskCreate(motor_control_task, xTaskCreate(motor_control_task,