Está en la página 1de 3

SEMAFORO INTELIGENTE

Vamos a simular un cruce de calles con múltiples LEDS, que harán de semáforos, y dos
pulsadores, que harán de sensores de presencia. El objetivo es que cuando se sitúe un
coche en un semáforo que está en rojo, permita que se ponga en verde y cierre el otro
semáforo.

Una vez que un coche esté parado ante un semáforo en rojo (simulamos pulsando su
pulsador), pasará un determinado tiempo y comenzará la secuencia para apagar el otro
semáforo y abrir el suyo.

SMART SEMAFORO
We are going to simulate a crossing of streets with multiple LEDs, which will act as traffic
lights, and two push buttons, which will act as presence sensors. The goal is that when
a car is placed at a red light, let it turn green and close the other traffic light.
Once a car is stopped at a red light (simulate pressing your button), a certain time will
pass and the sequence will begin to turn off the other traffic light and open yours.

CUERPO DE CODIGO

// Pines utilizados pinMode(LEDVERDE1, OUTPUT);


#define LEDVERDE1 2 pinMode(LEDAMARILLO1, OUTPUT);
#define LEDAMARILLO1 3 pinMode(LEDROJO1, OUTPUT);
#define LEDROJO1 4 pinMode(LEDVERDE2, OUTPUT);
#define LEDVERDE2 5 pinMode(LEDAMARILLO2, OUTPUT);
#define LEDAMARILLO2 6 pinMode(LEDROJO2, OUTPUT);
#define LEDROJO2 7 pinMode(PULSADOR1, INPUT);
#define PULSADOR1 8 pinMode(PULSADOR2, INPUT);
#define PULSADOR2 9
// Apagamos todos los LEDs
// Variables digitalWrite(LEDVERDE1, LOW);
bool activo1 = true; // Indica si el semáforo 1 está digitalWrite(LEDAMARILLO1, LOW);
activo, de lo contrario será el semáforo 2 digitalWrite(LEDROJO1, LOW);
int tiempoCambio = 1500; // Tiempo de espera entre digitalWrite(LEDVERDE2, LOW);
transición de LEDs digitalWrite(LEDAMARILLO2, LOW);
int tiempoEspera = 5000; // Tiempo de espera hasta digitalWrite(LEDROJO2, LOW);
comenzar transición
// Estado inicial: semáforo 1 abierto, semáforo 2
void setup() { cerrado
// Iniciamos el monitor serie digitalWrite(LEDVERDE1, HIGH);
Serial.begin(9600); digitalWrite(LEDROJO2, HIGH);
}
// Modo entrada/salida de los pines
void loop() { digitalWrite(LEDVERDE2, HIGH);
// Dependiendo del semáforo que tengamos activo }
if (activo1)
{ void ecenderSemaforo1()
// Está encendido el semáforo 1, comprobamos el {
pulsador 2 // Apagamos semáforo 2
int valor2 = digitalRead(PULSADOR2); // Esperamos
delay(tiempoEspera);
// Si hay un coche esperando, pulsador pulsado
if (valor2 == HIGH) // Pasamos a luz amarilla
{ digitalWrite(LEDVERDE2, LOW);
// Encender semáforo 2 digitalWrite(LEDAMARILLO2, HIGH);
ecenderSemaforo2();
// Esperamos
// Semáforo 2 activo delay(tiempoCambio);
activo1 = false;
} // Pasamos a luz roja
} digitalWrite(LEDAMARILLO2, LOW);
else digitalWrite(LEDROJO2, HIGH);
{
// Está encendido el semáforo 1, comprobamos el // Encendemos semáforo 1
pulsador 1 // Esperamos
int valor1 = digitalRead(PULSADOR1); delay(tiempoCambio);

// Si hay un coche esperando, pulsador pulsado // Pasamos a luz amarilla


if (valor1 == HIGH) digitalWrite(LEDROJO1, LOW);
{ digitalWrite(LEDVERDE1, HIGH);
// Encender semáforo 1 }
ecenderSemaforo1();

// Semáforo 1 activo https://programarfacil.com/blog/arduino-


activo1 = true; blog/multiples-leds-pulsadores-semaforo/
} SIMULANDO EL CIRCUITO
}
}

void ecenderSemaforo2()
{
// Apagamos semáforo 1
// Esperamos
delay(tiempoEspera);

// Pasamos a luz amarilla


digitalWrite(LEDVERDE1, LOW);
digitalWrite(LEDAMARILLO1, HIGH);

// Esperamos
delay(tiempoCambio);

// Pasamos a luz roja


digitalWrite(LEDAMARILLO1, LOW);
digitalWrite(LEDROJO1, HIGH);

// Encendemos semáforo 2
// Esperamos
delay(tiempoCambio);

// Pasamos a luz amarilla


digitalWrite(LEDROJO2, LOW);

También podría gustarte