const int trigPin = 5;
const int echoPin = 6;
const int waterSensorPin = 13; // حساس الماء الرقمي
const int buzzerPin = 3;
const int ledPin = 4;
const int distanceThreshold = 40; // مسافة اقتراب من الحمام (سم)
long duration;
int distance;
unsigned long lastAlertTime = 0;
const unsigned long alertInterval = 1000; // نغمة ووميض كل ثانية
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(waterSensorPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
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;
// قراءة حالة حساس الماء الرقمي (1 عند وجود ماء، 0 بدون)
int waterDetected = digitalRead(waterSensorPin);
Serial.print(“Distance: “);
Serial.print(distance);
Serial.print(” cm, Water: “);
Serial.println(waterDetected ? “Yes” : “No”);
// الشرط الوحيد للتنبيه: وجود ماء + اقتراب
if (distance <= distanceThreshold && waterDetected == HIGH) {
if (millis() – lastAlertTime >= alertInterval) {
tone(buzzerPin, 1300, 300); // نغمة تحذيرية
digitalWrite(ledPin, HIGH); // وميض LED
delay(300);
digitalWrite(ledPin, LOW);
lastAlertTime = millis(); // تحديث وقت التنبيه
}
} else {
// لا يوجد تنبيه في باقي الحالات
noTone(buzzerPin);
digitalWrite(ledPin, LOW);
}
delay(500); // تحسين الأداء
}