#include <LiquidCrystal.h>
// Configuración de pines LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Pines Sensores y Buzzer
const int trig1 = 7, echo1 = 6;
const int trig2 = 9, echo2 = 8;
const int buzzer = 10;
// Configuración de la medición
const float DISTANCIA_OBJETIVO = 15.0; // Distancia entre sensores en CM
const float UMBRAL_DETECCION = 10.0; // Distancia para activar (CM)
unsigned long t_inicio = 0;
bool activo = false;
void setup() {
pinMode(trig1, OUTPUT); pinMode(echo1, INPUT); //// pinmode: elementos de una accion (recibir o emitir señal)
pinMode(trig2, OUTPUT); pinMode(echo2, INPUT);
pinMode(buzzer, OUTPUT);
lcd.begin(16, 2);
lcd.print(" RADAR LISTO "); ///// poner texto
delay(1500);
lcd.clear();
}
float medir(int trig, int echo) {
digitalWrite(trig, LOW); delayMicroseconds(2);
digitalWrite(trig, HIGH); delayMicroseconds(10);
digitalWrite(trig, LOW);
long duracion = pulseIn(echo, HIGH, 25000); // Timeout para evitar bloqueos
if (duracion == 0) return 400.0; // Si no hay eco, devolver distancia fuera de rango
return duracion * 0.0343 / 2;
}
void loop() {
if (!activo) {
// Escaneando primer sensor
if (medir(trig1, echo1) < UMBRAL_DETECCION) {
t_inicio = millis();
activo = true;
tone(buzzer, 800, 40); // Feedback sonoro de detección
lcd.setCursor(0, 0);
lcd.print("Midiendo...");
}
} else {
// Escaneando segundo sensor
if (medir(trig2, echo2) < UMBRAL_DETECCION) {
unsigned long t_fin = millis();
float tiempo_total = (t_fin - t_inicio) / 1000.0; // Segundos
// Cálculo: v = d / t
float velocidad = DISTANCIA_OBJETIVO / tiempo_total;
mostrarResultado(velocidad);
activo = false;
delay(4000); // Espera para leer el resultado antes de resetear
lcd.clear();
}
// Cancelar si pasa demasiado tiempo (5 seg)
if (millis() - t_inicio > 5000) {
activo = false;
lcd.clear();
lcd.print("Objeto perdido");
delay(1000);
lcd.clear();
}
}
}
void mostrarResultado(float v) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Vel: ");
lcd.print(v, 1);
lcd.print(" cm/s");
lcd.setCursor(0, 1);
if (v > 30.0) { // Umbral de velocidad alta
lcd.print("! EXCESO !");
for(int i=0; i<3; i++) { // Triple beep
tone(buzzer, 1500, 100);
delay(150);
}
} else {
lcd.print("Velocidad Normal");
tone(buzzer, 1000, 200);
}
}