#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6yOEfOuLA"
#define BLYNK_TEMPLATE_NAME "Distance Alert System"
#define BLYNK_AUTH_TOKEN "52k1LkqFlLt3jJ5OYERQYQhTFK_NBPhP"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define trig 15
#define ECHO 4
#define led 18
long echo;
float distance;
Servo s;
long pre = 0;
long ledPreviousMillis = 0;
const long ledInterval = 100; // Thời gian chớp tắt LED
bool ledState = LOW; // Trạng thái hiện tại của LED
void setup() {
Serial.begin(9600);
pinMode(trig, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(led, OUTPUT);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
s.attach(4);
}
void loop() {
Blynk.run();
readSensor();
}
void readSensor() {
if (millis() - pre > 1000) {
pre = millis();
digitalWrite(trig, LOW);
delay(10);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
echo = pulseIn(ECHO, HIGH);
distance = (echo / 2.0) / 29;
Blynk.virtualWrite(V0, distance);
if (distance < 10) {
Blynk.virtualWrite(V1, 1);
Serial.println("Còn " + String(distance) + " cm trước khi va chạm!");
// Điều khiển servo quay một vòng
for (int p = 0; p <= 180; p++) {
s.write(p);
delay(10); // Điều chỉnh tốc độ quay của servo nếu cần
}
for (int p = 180; p >= 0; p--) {
s.write(p);
delay(10); // Điều chỉnh tốc độ quay của servo nếu cần
}
// Điều khiển LED chớp tắt
if (millis() - ledPreviousMillis >= ledInterval) {
ledPreviousMillis = millis();
ledState = !ledState;
digitalWrite(led, ledState);
}
} else {
Blynk.virtualWrite(V1, 0);
digitalWrite(led, LOW);
Serial.println("Khoảng cách: " + String(distance) + " ( khoảng cách an toàn )");
}
}
}