#include <LiquidCrystal.h>
//Pines de conexión
LiquidCrystal lcd(22,23,5,18,19,21);
const int PULSADOR1 = 2;
const int PULSADOR2 = 4;
//Semáforo 1
const int LED_VERDE = 25;
const int LED_AMARILLO = 33;
const int LED_ROJO = 32;
//Semáforo 2
const int LED_VERDE1 = 14;
const int LED_AMARILLO1 = 27;
const int LED_ROJO1 = 26;
//Semáforo peatonal 1
const int LEDP_VERDE = 13;
const int LEDP_ROJO = 12;
//Semáforo peatonal 2
const int LEDP_VERDE1 = 0;
const int LEDP_ROJO1 = 15;
#define RED_DURATION 3000 // Duración en milisegundos del semáforo en rojo
#define YELLOW_DURATION 1000 // Duración en milisegundos del semáforo en amarillo
#define GREEN_DURATION 3000 // Duración en milisegundos del semáforo en verde
void setup() {
// Iniciar LCD
lcd.begin(16,2); //Dimensión de LCD
pinMode(PULSADOR1, INPUT);
pinMode(PULSADOR2, INPUT);
int estadoPulsador = 0;
pinMode(LED_ROJO, OUTPUT);
pinMode(LED_AMARILLO, OUTPUT);
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_ROJO1, OUTPUT);
pinMode(LED_AMARILLO1, OUTPUT);
pinMode(LED_VERDE1, OUTPUT);
pinMode(LEDP_VERDE, OUTPUT);
pinMode(LEDP_ROJO, OUTPUT);
pinMode(LEDP_VERDE1, OUTPUT);
pinMode(LEDP_ROJO1, OUTPUT);
}
void loop() {
lcd.setCursor(0,0); // (col, fil)
lcd.print("Pulsador 1 = OFF");
lcd.setCursor(0,1);
lcd.print("Pulsador 2 = OFF");
lcd.blink();
delay(500);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, LOW);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO1, HIGH);
digitalWrite(LED_VERDE1, LOW);
digitalWrite(LED_AMARILLO1, LOW);
digitalWrite(LEDP_VERDE, LOW);
digitalWrite(LEDP_ROJO, HIGH);
digitalWrite(LEDP_VERDE1, LOW);
digitalWrite(LEDP_ROJO1, HIGH);
delay(GREEN_DURATION);
// Semáforo 1: Amarillo
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARILLO, HIGH);
digitalWrite(LEDP_VERDE, LOW);
digitalWrite(LEDP_ROJO, HIGH);
digitalWrite(LEDP_VERDE1, LOW);
digitalWrite(LEDP_ROJO1, HIGH);
delay(YELLOW_DURATION);
// Semáforo 1: Rojo, Semáforo 2: Verde
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO, HIGH);
digitalWrite(LED_VERDE1, HIGH);
digitalWrite(LED_ROJO1, LOW);
digitalWrite(LED_AMARILLO1, LOW);
digitalWrite(LEDP_VERDE, LOW);
digitalWrite(LEDP_ROJO, HIGH);
digitalWrite(LEDP_VERDE1, LOW);
digitalWrite(LEDP_ROJO1, HIGH);
delay(RED_DURATION);
// Semáforo 2: Amarillo
digitalWrite(LED_VERDE1, LOW);
digitalWrite(LED_AMARILLO1, HIGH);
digitalWrite(LEDP_VERDE, LOW);
digitalWrite(LEDP_ROJO, HIGH);
digitalWrite(LEDP_VERDE1, LOW);
digitalWrite(LEDP_ROJO1, HIGH);
delay(YELLOW_DURATION);
while(digitalRead(PULSADOR1) != 0){
if (digitalRead(PULSADOR1) == HIGH){
lcd.setCursor(0,0); // (col, fil)
lcd.print("Pulsador 1 = ON ");
lcd.blink();
delay(500);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO, LOW);
digitalWrite(LEDP_VERDE, LOW);
digitalWrite(LEDP_ROJO, LOW);
delay(YELLOW_DURATION);
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_ROJO, LOW);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LEDP_VERDE, LOW);
digitalWrite(LEDP_ROJO, HIGH);
delay(GREEN_DURATION);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_AMARILLO, HIGH);
delay(YELLOW_DURATION);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_ROJO, HIGH);
digitalWrite(LEDP_VERDE, HIGH);
digitalWrite(LEDP_ROJO, LOW);
delay(2500);
}
}
while(digitalRead(PULSADOR2) != 0){
if (digitalRead(PULSADOR2) == HIGH){
lcd.setCursor(0,1); // (col, fil)
lcd.print("Pulsador 2 = ON ");
lcd.blink();
delay(500);
digitalWrite(LED_VERDE1, LOW);
digitalWrite(LED_AMARILLO1, LOW);
digitalWrite(LED_ROJO1, LOW);
digitalWrite(LEDP_VERDE1, LOW);
digitalWrite(LEDP_ROJO1, LOW);
delay(YELLOW_DURATION);
digitalWrite(LED_VERDE1, HIGH);
digitalWrite(LED_ROJO1, LOW);
digitalWrite(LED_AMARILLO1, LOW);
digitalWrite(LEDP_VERDE1, LOW);
digitalWrite(LEDP_ROJO1, HIGH);
delay(GREEN_DURATION);
digitalWrite(LED_VERDE1, LOW);
digitalWrite(LED_AMARILLO1, HIGH);
delay(YELLOW_DURATION);
digitalWrite(LED_AMARILLO1, LOW);
digitalWrite(LED_ROJO1, HIGH);
digitalWrite(LEDP_VERDE1, HIGH);
digitalWrite(LEDP_ROJO1, LOW);
delay(2500);
}
}
}