Added logic for 2 line sensors
This commit is contained in:
parent
f888568559
commit
0e3e481a2c
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue