#include <Arduino.h>
#define TRIG_PIN 14
#define ECHO_PIN 27
#define LED_PIN 26
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 30000); // timeout 30ms ≈ 5m
if (duration == 0) return -1; // ถ้าไม่มี echo
return (duration * 0.0343) / 2.0;
}
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
Serial.println("ESP32 Rhythmic Distance Finder Started!");
}
void loop() {
float distance = readDistanceCm();
if (distance < 0) {
Serial.println("No echo (out of range)");
digitalWrite(LED_PIN, HIGH);
delay(800);
digitalWrite(LED_PIN, LOW);
delay(800);
return;
}
Serial.print("Distance: ");
Serial.print(distance, 1);
Serial.println(" cm");
if (distance < 2) distance = 2;
if (distance > 100) distance = 100;
int delayMs = (int)((distance - 2) * (780.0 / 98.0) + 20);
digitalWrite(LED_PIN, HIGH);
delay(delayMs);
digitalWrite(LED_PIN, LOW);
delay(delayMs);
}