#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
// تعريف الأطراف
const int trigPin = 9;
const int echoPin = 10;
const int servoPin = 6;
const int irReceiverPin = 2;
// إعداد الشاشة
LiquidCrystal_I2C lcd(0x27, 16, 2); // استبدل 0x27 بعنوان الـ I2C إذا لزم الأمر
// إعداد الريموت
IRrecv irrecv(irReceiverPin);
decode_results results;
// إعداد السيرفو
Servo servo;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo.attach(servoPin);
servo.write(0); // السيرفو في وضع الإغلاق
lcd.begin(16, 2); // تحديد حجم الشاشة
lcd.backlight();
lcd.print("Pet Feeder Ready");
irrecv.enableIRIn(); // بدء استقبال الريموت
delay(2000);
lcd.clear();
}
void loop() {
long distance = readUltrasonic();
lcd.setCursor(0, 0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print("cm ");
if (distance < 20) {
lcd.setCursor(0, 1);
lcd.print("Feeding...");
servo.write(90); // فتح الحاوية
delay(3000); // انتظار 3 ثواني
servo.write(0); // إغلاق الحاوية
lcd.setCursor(0, 1);
lcd.print("Done ");
}
if (irrecv.decode(&results)) {
if (results.value == 0xFF02FD) { // كود الزر المطلوب
lcd.setCursor(0, 1);
lcd.print("Manual Feed");
servo.write(90); // فتح الحاوية
delay(3000);
servo.write(0); // إغلاق الحاوية
lcd.setCursor(0, 1);
lcd.print("Done ");
}
irrecv.resume();
}
delay(500);
}
long readUltrasonic() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2; // تحويل الوقت إلى مسافة
}