#include <NewPing.h>
#define TRIG_PIN 7
#define ECHO_PIN 6
#define LED_ROJO 8
#define LED_AMARILLO 9
#define LED_VERDE 10
NewPing sonar(TRIG_PIN, ECHO_PIN);
bool peatonCerca = false;
unsigned long tiempoRojo = 0;
unsigned long tiempoAmarillo = 0;
unsigned long tiempoVerde = 0;
void setup() {
pinMode(LED_ROJO, OUTPUT);
pinMode(LED_AMARILLO, OUTPUT);
pinMode(LED_VERDE, OUTPUT);
Serial.begin(9600);
}
void loop() {
unsigned int distanciaPeat = sonar.ping_cm();
//Verificación de la distancia del peatón con el sensor
if (distanciaPeat < 30) {
peatonCerca = true;
} else {
peatonCerca = false;
}
if (peatonCerca) {
// Si se detecta un peatón, enciende la luz roja y mantén las demás apagadas
digitalWrite(LED_ROJO, HIGH);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_VERDE, LOW);
if (tiempoRojo == 0) {
tiempoRojo = millis();
Serial.println("Luz Roja: Hay un peatón cerca");
}
} else {
digitalWrite(LED_ROJO, HIGH);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_VERDE, LOW);
cambioSemaforo();
}
}
void cambioSemaforo() {
if (tiempoRojo != 0) {
tiempoAmarillo = millis();
Serial.print("Luz Roja: No hay peatones, Tiempo en Rojo: ");
Serial.print((tiempoAmarillo - tiempoRojo) / 1000); // Convierte a segundos
Serial.println(" s");
tiempoRojo = 0;
}
digitalWrite(LED_ROJO, LOW);
digitalWrite(LED_AMARILLO, HIGH);
delay(1000);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_VERDE, HIGH);
delay(3000);
if (tiempoVerde == 0) {
tiempoVerde = millis();
Serial.print("Luz Verde, Tiempo en Amarillo: ");
Serial.print((tiempoVerde - tiempoAmarillo) / 1000); // Convierte a segundos
Serial.println(" s");
}
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARILLO, HIGH);
delay(1000);
if (tiempoVerde != 0) {
Serial.print("Luz Amarilla, Tiempo en Verde: ");
Serial.print((millis() - tiempoVerde) / 1000); // Convierte a segundos
Serial.println(" s");
tiempoVerde = 0;
}
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO, HIGH);
delay(2000);
}