From 0e3e481a2c9eb54c999b1eb7ac1472af62318ddd Mon Sep 17 00:00:00 2001 From: "linuxes_mojoworld@aleeas.com" Date: Mon, 20 Nov 2023 10:26:08 +0800 Subject: [PATCH] Added logic for 2 line sensors --- frtos/config/car_config.h | 3 ++- frtos/line_sensor/line_sensor_init.h | 16 +++++++++------- frtos/rtos_car.c | 11 +++++++++-- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/frtos/config/car_config.h b/frtos/config/car_config.h index 98bc088..13d6ca4 100644 --- a/frtos/config/car_config.h +++ b/frtos/config/car_config.h @@ -10,7 +10,8 @@ typedef struct s_obs_struct { - bool line_detected; + bool left_sensor_detected; + bool right_sensor_detected; bool ultrasonic_detected; } obs_t; diff --git a/frtos/line_sensor/line_sensor_init.h b/frtos/line_sensor/line_sensor_init.h index 69b0b13..8fde184 100644 --- a/frtos/line_sensor/line_sensor_init.h +++ b/frtos/line_sensor/line_sensor_init.h @@ -59,7 +59,7 @@ bool h_left_sensor_timer_handler(repeating_timer_t *repeatingTimer) { void -monitor_left_sensor_task(void *pvParameters) { +monitor_line_sensor_task(void *pvParameters) { volatile obs_t *p_obs = NULL; p_obs = (obs_t *) pvParameters; @@ -68,8 +68,10 @@ monitor_left_sensor_task(void *pvParameters) { // if (xSemaphoreTake(g_left_sensor_sem, portMAX_DELAY) == pdTRUE) // { // Set the flag to notify the task - p_obs->line_detected = gpio_get(LEFT_SENSOR_PIN); - printf("Left Sensor: %d\n", p_obs->line_detected); + p_obs->left_sensor_detected = gpio_get(LEFT_SENSOR_PIN); + 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)); // } } @@ -78,13 +80,13 @@ monitor_left_sensor_task(void *pvParameters) { void line_tasks_init(car_struct_t *car_struct) { - TaskHandle_t h_monitor_left_sensor_task = NULL; - xTaskCreate(monitor_left_sensor_task, - "read_left_sensor_task", + TaskHandle_t h_monitor_line_sensor_task = NULL; + xTaskCreate(monitor_line_sensor_task, + "read_line_sensor_task", configMINIMAL_STACK_SIZE, (void *)car_struct->obs, PRIO, - &h_monitor_left_sensor_task); + &h_monitor_line_sensor_task); } diff --git a/frtos/rtos_car.c b/frtos/rtos_car.c index b80558e..8106448 100644 --- a/frtos/rtos_car.c +++ b/frtos/rtos_car.c @@ -8,10 +8,17 @@ bool check_collision(void *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; } +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 motor_control_task(void *params) { @@ -121,4 +128,4 @@ main(void) vTaskStartScheduler(); return (0); -} \ No newline at end of file +}