#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define I2C_SDA 21
#define I2C_SCL 22
LiquidCrystal_I2C lcd(0x27, 16, 2);
int pulsador1 = 14;
int pulsador2 = 12;
int trig = 27;
int echo = 26;
int Verde = 17;
int Amarillo = 16;
int Rojo = 4;
int Azul = 0;
int estado1;
int estado2;
void setup() {
Wire.begin(I2C_SDA, I2C_SCL);
pinMode(Verde, OUTPUT);
pinMode(Amarillo, OUTPUT);
pinMode(Rojo, OUTPUT);
pinMode(Azul, OUTPUT);
pinMode(pulsador1, INPUT);
pinMode(pulsador2, INPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
lcd.begin(16, 2);
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
Serial.begin(9600);
}
void loop() {
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
long duration = pulseIn(echo, HIGH);
int distancia = duration * 0.034 / 2;
lcd.setCursor(0, 0);
lcd.print("Distancia: ");
lcd.print(distancia);
lcd.print(" cm ");
if (distancia > 0 && distancia < 50) {
digitalWrite(Verde, HIGH);
digitalWrite(Amarillo, LOW);
digitalWrite(Rojo, LOW);
lcd.setCursor(0, 1);
lcd.print("LED verde on ");
} else if (distancia >= 50 && distancia < 100) {
digitalWrite(Verde, LOW);
digitalWrite(Amarillo, HIGH);
digitalWrite(Rojo, LOW);
lcd.setCursor(0, 1);
lcd.print("LED amarillo on");
} else if (distancia >= 100) {
digitalWrite(Verde, LOW);
digitalWrite(Amarillo, LOW);
digitalWrite(Rojo, HIGH);
lcd.setCursor(0, 1);
lcd.print("LED rojo on ");
}
estado1 = digitalRead(pulsador1);
estado2 = digitalRead(pulsador2);
if (distancia >= 100 && estado1 == LOW) {
digitalWrite(Azul, HIGH);
}
if (distancia < 50 && estado2 == LOW) {
digitalWrite(Azul, LOW);
}
delay(100);
}