#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Definir pines
const int trigPin = 12;
const int echoPin = 13;
const int btn1Pin = 15;
const int btn2Pin = 16;
const int led1Pin = 2;
const int led2Pin = 5;
// Definir variables
int distancia = 0;
bool luzEncendida = false;
// Inicializar pantalla LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(btn1Pin, INPUT);
pinMode(btn2Pin, INPUT);
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
lcd.init();
lcd.backlight();
}
void loop() {
// Leer distancia
digitalWrite(trigPin, HIGH);
delayMicroseconds(30);
digitalWrite(trigPin, LOW);
distancia = pulseIn(echoPin, HIGH) / 58;
// Imprimir distancia en LCD y monitor serial
lcd.setCursor(0, 0);
lcd.print("Distancia: ");
lcd.print(distancia);
lcd.print(" cm");
Serial.print("Distancia: ");
Serial.print(distancia);
Serial.println(" cm");
// Convertir distancia a metros y kilómetros
int metros = distancia / 100;
int kilometros = metros / 1000;
lcd.setCursor(0, 1);
lcd.print(metros);
lcd.print(" m ");
lcd.print(kilometros);
lcd.print(" km");
Serial.print(metros);
Serial.print(" m ");
Serial.print(kilometros);
Serial.println(" km");
// Encender/apagar luz de fondo
if (digitalRead(btn1Pin) == HIGH) {
luzEncendida = true;
} else if (digitalRead(btn2Pin) == HIGH) {
luzEncendida = false;
}
lcd.noBacklight();
delay(50);
if (luzEncendida) {
lcd.backlight();
}
// Encender LED cerca
if (distancia < 20) {
digitalWrite(led1Pin, HIGH);
} else {
digitalWrite(led1Pin, LOW);
}
// Encender LED lejos
if (distancia > 100) {
digitalWrite(led2Pin, HIGH);
} else {
digitalWrite(led2Pin, LOW);
}
}