// Definiciones de pines
#define Led_verde 12 // Indicará si hay lugares disponibles
#define Led_rojo 13 // Indicará que no hay lugares disponibles
#define sensor_i 11 // Registrará el ingreso de vehiculos
#define sensor_s 10 // Registrará la salida de vehículos
#define barrera 9 // Pin de control de la barrera
#define pin_reset 8 // Pin para el mecanismo de reset
// Variables globales
int cantidad_de_lugares = 466;
volatile bool resetSolicitado = false;
void setup() {
pinMode(sensor_i, INPUT_PULLUP); // Configura el sensor como entrada con pull-up
pinMode(sensor_s, INPUT_PULLUP); // Configura el sensor como entrada con pull-up
pinMode(barrera, OUTPUT); // Configura el pin de la barrera como salida
pinMode(Led_verde, OUTPUT); // Configura el pin del LED verde como salida
pinMode(Led_rojo, OUTPUT); // Configura el pin del LED rojo como salida
pinMode(pin_reset, INPUT_PULLUP); // Configura el pin de reset como entrada con pull-up
digitalWrite(Led_verde, HIGH); // Enciende el LED verde al inicio indicando lugares disponibles
digitalWrite(Led_rojo, LOW); // Apaga el LED rojo al inicio
attachInterrupt(digitalPinToInterrupt(pin_reset), solicitarReset, FALLING); // Configura la interrupción para el pin de reset
}
void loop() {
if (resetSolicitado) {
resetSistema(); // Si se ha solicitado un reset, se ejecuta la función de reset
} else {
// Verificar si un vehículo está ingresando
if (digitalRead(sensor_i) == LOW) {
if (cantidad_de_lugares > 0) {
digitalWrite(Led_verde, HIGH); // Enciende el LED verde si hay espacio disponible
digitalWrite(Led_rojo, LOW); // Apaga el LED rojo si hay espacio disponible
// Simulación de levantamiento de la barrera
digitalWrite(barrera, HIGH);
delay(5000); // Espera 5 segundos para simular el paso del vehículo
digitalWrite(barrera, LOW); // Baja la barrera
cantidad_de_lugares--; // Decrementa la cantidad de lugares disponibles
delay(1000); // Espera un segundo para evitar la detección repetida del mismo vehículo
} else {
digitalWrite(Led_rojo, HIGH); // Enciende el LED rojo si no hay espacio disponible
digitalWrite(Led_verde, LOW); // Apaga el LED verde si no hay espacio disponible
delay(1000); // Espera un segundo antes de volver a verificar
}
}
// Verificar si un vehículo está saliendo
if (digitalRead(sensor_s) == LOW) {
// Simulación de salida del vehículo
digitalWrite(barrera, HIGH); // Levanta la barrera
delay(5000); // Espera 5 segundos para simular el paso del vehículo
digitalWrite(barrera, LOW); // Baja la barrera
cantidad_de_lugares++; // Incrementa la cantidad de lugares disponibles
delay(1000); // Espera un segundo antes de volver a verificar
}
}
}
// Función de interrupción para el pin de reset
void solicitarReset() {
resetSolicitado = true;
}
// Función para realizar el reset del sistema
void resetSistema() {
cantidad_de_lugares = 466; // Restablece la cantidad de lugares disponibles
digitalWrite(Led_verde, HIGH); // Enciende el LED verde indicando lugares disponibles
digitalWrite(Led_rojo, LOW); // Apaga el LED rojo
delay(1000); // Espera un segundo antes de volver a verificar
resetSolicitado = false; // Restablece el indicador de reset
}