#include <Servo.h>
const int trigPinEntrada = 8; // Pin de disparo del sensor ultrasónico en la entrada
const int echoPinEntrada = 9; // Pin de eco del sensor ultrasónico en la entrada
const int trigPinEspacio = 6; // Pin de disparo del sensor ultrasónico en el espacio
const int echoPinEspacio = 7; // Pin de eco del sensor ultrasónico en el espacio
const int servoPin = 10; // Pin del servomotor
const int ledVerde = 11; // Pin del LED verde (disponible)
const int ledRojo = 12; // Pin del LED rojo (ocupado)
const int umbralDistancia = 10; // Distancia en cm para abrir la barrera
const int anguloAbierto = 90; // Ángulo de la barrera abierta
const int anguloCerrado = 0; // Ángulo de la barrera cerrada
Servo myServo;
bool barreraAbierta = false; // Estado de la barrera
void setup() {
pinMode(trigPinEntrada, OUTPUT);
pinMode(echoPinEntrada, INPUT);
pinMode(trigPinEspacio, OUTPUT);
pinMode(echoPinEspacio, INPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledRojo, OUTPUT);
myServo.attach(servoPin);
myServo.write(anguloCerrado); // Inicialmente, la barrera está cerrada
digitalWrite(ledVerde, LOW); // LED verde apagado
digitalWrite(ledRojo, LOW); // LED rojo apagado
Serial.begin(9600);
}
void loop() {
int distanciaEntrada = leerDistancia(trigPinEntrada, echoPinEntrada);
int distanciaEspacio = leerDistancia(trigPinEspacio, echoPinEspacio);
Serial.print("Distancia Entrada: ");
Serial.print(distanciaEntrada);
Serial.print(" cm, Distancia Espacio: ");
Serial.println(distanciaEspacio);
// Controlar los LEDs basado en el estado del espacio
if (distanciaEspacio < umbralDistancia) {
digitalWrite(ledRojo, HIGH); // Enciende el LED rojo
digitalWrite(ledVerde, LOW); // Apaga el LED verde
} else {
digitalWrite(ledRojo, LOW); // Apaga el LED rojo
digitalWrite(ledVerde, HIGH); // Enciende el LED verde
}
// Control de la barrera basado en la detección del sensor en la entrada
if (distanciaEntrada < umbralDistancia && !barreraAbierta && distanciaEspacio >= umbralDistancia) {
abrirBarrera();
barreraAbierta = true;
} else if (distanciaEntrada >= umbralDistancia && barreraAbierta) {
cerrarBarrera();
barreraAbierta = false;
}
delay(500); // Espera para evitar lecturas continuas
}
int leerDistancia(int trigPin, int echoPin) {
long duration;
int distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
return distance;
}
void abrirBarrera() {
for (int pos = anguloCerrado; pos <= anguloAbierto; pos += 1) {
myServo.write(pos);
delay(15); // Ajustar velocidad de apertura
}
Serial.println("Barrera abierta.");
}
void cerrarBarrera() {
for (int pos = anguloAbierto; pos >= anguloCerrado; pos -= 1) {
myServo.write(pos);
delay(15); // Ajustar velocidad de cierre
}
Serial.println("Barrera cerrada.");
}