#include <Arduino_FreeRTOS.h>
#define buzzer 4
#define led_verde 3
#define led_rojo 2
#define sensor_de_ingreso A3
#define sensor_de_salida A2
#define sensor_de_reset A4
int cantidad_de_lugares = 8;
void setup() {
Serial.begin(9600);
pinMode(led_verde, OUTPUT);
pinMode(led_rojo, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(sensor_de_ingreso, INPUT_PULLUP);
pinMode(sensor_de_salida, INPUT_PULLUP);
pinMode(sensor_de_reset, INPUT_PULLUP);
// Crear tareas para los sensores y el reset con prioridades
xTaskCreate(Task_Reset, "Reset", 100, NULL, 1, NULL); // Prioridad 1 (alta) para el reset
xTaskCreate(Task_Ingreso, "Ingreso", 100, NULL, 2, NULL); // Prioridad 2 para sensor de ingreso
xTaskCreate(Task_Salida, "Salida", 100, NULL, 2, NULL); // Prioridad 2 para sensor de salida
}
void loop() {
}
// Tarea para el sensor de reset con prioridad alta
static void Task_Reset(void* pvParameters) {
while (1) {
if (digitalRead(sensor_de_reset) == LOW) { // Si el sensor de reset se activa
noTone(buzzer);
cantidad_de_lugares = 3;
digitalWrite(led_verde, HIGH);
digitalWrite(led_rojo, LOW);
Serial.println("Reset realizado, lugares reiniciados a 3.");
delay(500);
}
vTaskDelay(100 / portTICK_PERIOD_MS); // Espera para evitar ciclos demasiado rápidos
}
}
// Tarea para el sensor de ingreso
static void Task_Ingreso(void* pvParameters) {
while (1) {
if (digitalRead(sensor_de_ingreso) == LOW && cantidad_de_lugares > 0) {
cantidad_de_lugares--; // Reduce el contador de lugares disponibles
Serial.println("Vehículo ingresado, lugares disponibles: " + String(cantidad_de_lugares));
delay(500);
// Control de LEDs y buzzer después del ingreso
if (cantidad_de_lugares > 0) {
digitalWrite(led_verde, HIGH);
digitalWrite(led_rojo, LOW);
noTone(buzzer);
} else {
digitalWrite(led_verde, LOW);
digitalWrite(led_rojo, HIGH);
tone(buzzer, 1000); // Activa el buzzer con tono de 1000 Hz
}
}
vTaskDelay(100 / portTICK_PERIOD_MS); // Espera para evitar ciclos demasiado rápidos
}
}
// Tarea para el sensor de salida
static void Task_Salida(void* pvParameters) {
while (1) {
if (digitalRead(sensor_de_salida) == LOW && cantidad_de_lugares < 3) {
cantidad_de_lugares++; // Aumenta el contador de lugares disponibles
Serial.println("Vehículo salió, lugares disponibles: " + String(cantidad_de_lugares));
delay(500);
// Control de LEDs y buzzer después de la salida
if (cantidad_de_lugares > 0) {
digitalWrite(led_verde, HIGH);
digitalWrite(led_rojo, LOW);
noTone(buzzer);
} else {
digitalWrite(led_verde, LOW);
digitalWrite(led_rojo, HIGH);
tone(buzzer, 1000); // Activa el buzzer con tono de 1000 Hz
}
}
vTaskDelay(100 / portTICK_PERIOD_MS); // Espera para evitar ciclos demasiado rápidos
}
}