// Definir pines para los LEDs
const int ledRojo = 7;
const int ledAmarillo = 6;
const int ledVerde = 5;
// Definir pines para el sensor ultrasónico HC-SR04
const int trigPin = 8;
const int echoPin = 9;
// Definir variables para medir la distancia
long duration;
int distance;
// Definir tiempos para cada estado del semáforo
const unsigned long tiempoVerde = 3000; // 10 segundos en verde
const unsigned long tiempoAmarillo = 3000; // 3 segundos en amarillo
const unsigned long tiempoRojo = 3000; // 10 segundos en rojo
// Definir constantes para los estados del semáforo
const int RED = 0;
const int YELLOW = 1;
const int GREEN = 2;
void setup() {
// Configurar pines de los LEDs como salida
pinMode(ledRojo, OUTPUT);
pinMode(ledAmarillo, OUTPUT);
pinMode(ledVerde, OUTPUT);
// Configurar pines del sensor ultrasónico
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Inicializar el puerto Serial a 9600 baudios
Serial.begin(9600);
// Inicializar el semáforo con el estado verde
cambiarSemaforo(GREEN);
}
void loop() {
// Medir la distancia con el sensor ultrasónico
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
// Calcular la distancia en centímetros
distance = duration * 0.034 / 2;
// Lógica del semáforo en función de la distancia
if (distance < 10) {
// Si hay un objeto a menos de 10 cm, poner el semáforo en rojo
cambiarSemaforo(RED);
Serial.println("Cambiando a ROJO");
} else {
// Si no hay objetos cercanos, alternar entre verde y amarillo
cambiarSemaforo(GREEN);
Serial.println("Cambiando a VERDE");
delay(tiempoVerde);
cambiarSemaforo(YELLOW);
Serial.println("Cambiando a AMARILLO");
delay(tiempoAmarillo);
}
}
// Función para cambiar el estado del semáforo
void cambiarSemaforo(int color) {
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, LOW);
switch (color) {
case RED:
digitalWrite(ledRojo, HIGH);
break;
case YELLOW:
digitalWrite(ledAmarillo, HIGH);
break;
case GREEN:
digitalWrite(ledVerde, HIGH);
break;
}
}