#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int trigPin = 9;
const int echoPin = 10;
const int ledCercanoPin = 6;
const int ledLejanoPin = 7;
const int botonEncender = 2;
const int botonApagar = 3;
bool lcdBacklightOn = true;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C del LCD, cambia si es diferente
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledCercanoPin, OUTPUT);
pinMode(ledLejanoPin, OUTPUT);
pinMode(botonEncender, INPUT_PULLUP);
pinMode(botonApagar, INPUT_PULLUP);
lcd.begin();
lcd.backlight();
Serial.begin(9600); // Opcional para depurar
}
void loop() {
// Medir la distancia
long duration, distanceCm;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distanceCm = duration * 0.034 / 2;
float distanceM = distanceCm / 100.0;
float distanceKm = distanceCm / 100000.0;
// Control de la luz de fondo del LCD
if (digitalRead(botonEncender) == LOW) {
lcd.backlight();
lcdBacklightOn = true;
}
if (digitalRead(botonApagar) == LOW) {
lcd.noBacklight();
lcdBacklightOn = false;
}
// Mostrar la distancia en el LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Dist: ");
lcd.print(distanceCm);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print(distanceM, 2);
lcd.print(" m ");
lcd.print(distanceKm, 3);
lcd.print(" km");
// Control de los LEDs
if (distanceCm < 10) { // Distancia muy cercana
digitalWrite(ledCercanoPin, HIGH);
digitalWrite(ledLejanoPin, LOW);
} else if (distanceCm > 100) { // Distancia lejana
digitalWrite(ledCercanoPin, LOW);
digitalWrite(ledLejanoPin, HIGH);
} else { // Distancia intermedia
digitalWrite(ledCercanoPin, LOW);
digitalWrite(ledLejanoPin, LOW);
}
delay(500); // Pequeña pausa antes de la siguiente lectura
}