// =======================================================
// HC-SR04 + BUZZER (NÂNG CAO - KHÔNG DELAY)
// =======================================================
#define TRIG 15
#define ECHO 14
#define BUZZER 16
unsigned long lastToggle = 0;
bool buzzerState = false;
float getDistance() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duration = pulseIn(ECHO, HIGH, 30000); // timeout 30ms
float distance = duration * 0.034 / 2;
return distance;
}
void setup() {
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(BUZZER, OUTPUT);
}
void loop() {
float d = getDistance();
// --- VÙNG AN TOÀN ---
if (d >= 30 || d == 0) {
digitalWrite(BUZZER, LOW);
return;
}
// --- TÍNH TỐC ĐỘ BEEP ---
// càng gần → delay càng nhỏ
int interval = d * 10; // có thể chỉnh hệ số
if (interval < 50) interval = 50;
unsigned long now = millis();
if (now - lastToggle >= interval) {
buzzerState = !buzzerState;
digitalWrite(BUZZER, buzzerState);
lastToggle = now;
}
}