#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int trigPin = 9; // Pin para el Trig
const int echoPin = 10; // Pin para el Echo
const int redPin = 6; // Pin para el componente rojo del LED RGB
const int greenPin = 5; // Pin para el componente verde del LED RGB
const int bluePin = 3; // Pin para el componente azul del LED RGB
const int buzzerPin = 11; // Pin para el zumbador
long duracion;
int distancia;
int ultimaDistancia = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
}
void cambiarColorRGB(int distancia)
{
// Invierte el mapeo para que el color verde sea más intenso a distancias mayores
int rojo = constrain(map(distancia, 0, 400, 255, 0), 0, 255);
int verde = constrain(map(distancia, 0, 400, 0, 255), 0, 255);
int azul = 0; // No cambia el componente azul
analogWrite(redPin, rojo);
analogWrite(greenPin, verde);
analogWrite(bluePin, azul);
// Genera un tono en el zumbador
int frecuencia = map(distancia, 0, 400, 1760, 440);
tone(buzzerPin, frecuencia);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracion = pulseIn(echoPin, HIGH);
distancia = (duracion * 0.034) / 2;
Serial.println(distancia);
if (distancia != ultimaDistancia)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distancia: ");
lcd.print(distancia);
lcd.print("cm");
ultimaDistancia = distancia;
cambiarColorRGB(distancia);
}
delay(500);
}