Added logic for 2 line sensors

This commit is contained in:
linuxes_mojoworld@aleeas.com 2023-11-20 10:26:08 +08:00
parent f888568559
commit 0e3e481a2c
3 changed files with 20 additions and 10 deletions

View File

@ -10,7 +10,8 @@
typedef struct s_obs_struct typedef struct s_obs_struct
{ {
bool line_detected; bool left_sensor_detected;
bool right_sensor_detected;
bool ultrasonic_detected; bool ultrasonic_detected;
} obs_t; } obs_t;

View File

@ -59,7 +59,7 @@ bool h_left_sensor_timer_handler(repeating_timer_t *repeatingTimer) {
void void
monitor_left_sensor_task(void *pvParameters) { monitor_line_sensor_task(void *pvParameters) {
volatile obs_t *p_obs = NULL; volatile obs_t *p_obs = NULL;
p_obs = (obs_t *) pvParameters; p_obs = (obs_t *) pvParameters;
@ -68,8 +68,10 @@ monitor_left_sensor_task(void *pvParameters) {
// if (xSemaphoreTake(g_left_sensor_sem, portMAX_DELAY) == pdTRUE) // if (xSemaphoreTake(g_left_sensor_sem, portMAX_DELAY) == pdTRUE)
// { // {
// Set the flag to notify the task // Set the flag to notify the task
p_obs->line_detected = gpio_get(LEFT_SENSOR_PIN); p_obs->left_sensor_detected = gpio_get(LEFT_SENSOR_PIN);
printf("Left Sensor: %d\n", p_obs->line_detected); p_obs->right_sensor_detected = gpio_get(RIGHT_SENSOR_PIN);
// printf("Left Sensor: %d\n", p_obs->line_detected);
vTaskDelay(pdMS_TO_TICKS(LINE_SENSOR_READ_DELAY)); vTaskDelay(pdMS_TO_TICKS(LINE_SENSOR_READ_DELAY));
// } // }
} }
@ -78,13 +80,13 @@ monitor_left_sensor_task(void *pvParameters) {
void void
line_tasks_init(car_struct_t *car_struct) line_tasks_init(car_struct_t *car_struct)
{ {
TaskHandle_t h_monitor_left_sensor_task = NULL; TaskHandle_t h_monitor_line_sensor_task = NULL;
xTaskCreate(monitor_left_sensor_task, xTaskCreate(monitor_line_sensor_task,
"read_left_sensor_task", "read_line_sensor_task",
configMINIMAL_STACK_SIZE, configMINIMAL_STACK_SIZE,
(void *)car_struct->obs, (void *)car_struct->obs,
PRIO, PRIO,
&h_monitor_left_sensor_task); &h_monitor_line_sensor_task);
} }

View File

@ -8,10 +8,17 @@ 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->left_line_detected << 1) | (car_struct->obs->right_line_detected))
|| car_struct->obs->ultrasonic_detected; || car_struct->obs->ultrasonic_detected;
} }
bool
check_line_touch(void *params)
{
car_struct_t *car_struct = (car_struct_t *)params;
return (car_struct->obs->left_line_detected << 1) | (car_struct->obs->right_line_detected);
void void
motor_control_task(void *params) motor_control_task(void *params)
{ {
@ -121,4 +128,4 @@ main(void)
vTaskStartScheduler(); vTaskStartScheduler();
return (0); return (0);
} }