#include <SoftwareSerial.h>
const int trigPin = 5;
const int echoPin = 6;
const int buzzerPin = 3;
const int ledPin = 4;
const int distanceThreshold = 20; // المسافة الخطرة (سم) – أقرب لأن المقابس عادة قريبة
long duration;
int distance;
SoftwareSerial bluetooth(10, 11); // RX, TX
bool alertActive = false;
unsigned long lastToneTime = 0;
unsigned long lastLedTime = 0;
bool ledState = false;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
bluetooth.begin(9600);
Serial.begin(9600);
}
void loop() {
// قراءة المسافة
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print(“Distance: “);
Serial.println(distance);
if (distance <= distanceThreshold) {
if (!alertActive) {
alertActive = true;
bluetooth.println(“⚡ Plug! Child alert!”);
}
// نغمة تحذيرية متقطعة وأعلى نغمة (مثل صفارة إنذار)
if (millis() – lastToneTime >= 400) {
tone(buzzerPin, 1500, 350); // نغمة 350 مللي ثانية
lastToneTime = millis();
}
// وميض LED أسرع وأكثر وضوحًا
if (millis() – lastLedTime >= 200) {
ledState = !ledState;
digitalWrite(ledPin, ledState);
lastLedTime = millis();
}
} else {
// إيقاف التنبيه عند زوال الخطر
if (alertActive) {
alertActive = false;
bluetooth.println(“✅ Child away from plug!”);
}
noTone(buzzerPin);
digitalWrite(ledPin, LOW);
}
delay(500);
}