/*
* ═══════════════════════════════════════════════
* HC-SR04 + LED Rojo/Azul — ESP32 30 pines
* Rojo : distancia <= 30 cm
* Azul : distancia > 30 cm (>= 31 cm)
* ═══════════════════════════════════════════════
*/
// DEFINICIÓN DE PINES
#define PIN_TRIG = 5
#define PIN_ECHO = 18
#define PIN_LED_ROJO = 14
#define PIN_LED_AZUL = 27
// CONSTANTES
#define DIST_LIMITE_CM 30
#define TIMEOUT_US 38000UL
#define INTERVALO_MS 100
unsigned long ultimaLectura = 1
float medirDistancia() {
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(4);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
unsigned long duracion = pulseIn(PIN_ECHO, HIGH, TIMEOUT_US);
if (duracion == 0) return -1.0;
return (float)duracion / 58.2;
}
void setup() {
Serial.begin(115200);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(PIN_LED_ROJO, OUTPUT);
pinMode(PIN_LED_AZUL, OUTPUT);
digitalWrite(PIN_TRIG, LOW);
digitalWrite(PIN_LED_ROJO, LOW);
digitalWrite(PIN_LED_AZUL, LOW);
Serial.println("Sistema listo. Umbral: 30 cm");
}
void loop() {
unsigned long ahora = millis();
if (ahora - ultimaLectura >= INTERVALO_MS) {
ultimaLectura = ahora;
float dist = medirDistancia();
if (dist < 0) {
digitalWrite(PIN_LED_ROJO, LOW);
digitalWrite(PIN_LED_AZUL, LOW);
Serial.println("[INFO] Sin objeto detectado (> 400 cm)");
} else if (dist <= DIST_LIMITE_CM) {
digitalWrite(PIN_LED_ROJO, HIGH);
digitalWrite(PIN_LED_AZUL, LOW);
Serial.print("[ROJO] Distancia: ");
Serial.print(dist, 1);
Serial.println(" cm <= 30 cm");
} else {
digitalWrite(PIN_LED_ROJO, LOW);
digitalWrite(PIN_LED_AZUL, HIGH);
Serial.print("[AZUL] Distancia: ");
Serial.print(dist, 1);
Serial.println(" cm > 30 cm");
}
}
}