#include <Servo.h>
// --- تعريف المنافذ ---
#define SERVO_PIN A0
#define RED_LED A1
#define GREEN_LED A2
#define BUZZER_PIN A3
#define BUTTON_VALID 2 // زر البطاقة الصحيحة
#define BUTTON_INVALID 3 // زر البطاقة الخاطئة (الجديد)
Servo gateServo;
void setup() {
gateServo.attach(SERVO_PIN);
gateServo.write(0); // البداية مغلق
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// تفعيل الأزرار مع مقاومة داخلية
pinMode(BUTTON_VALID, INPUT_PULLUP);
pinMode(BUTTON_INVALID, INPUT_PULLUP);
Serial.begin(9600);
Serial.println("المحاكاة جاهزة: الزر 2 للقبول | الزر 3 للرفض");
}
void loop() {
// 1. سيناريو القبول (الزر الأول)
if (digitalRead(BUTTON_VALID) == LOW) {
Serial.println(">> بطاقة صحيحة: فتح الباب");
accessGranted();
delay(500);
}
// 2. سيناريو الرفض (الزر الثاني)
if (digitalRead(BUTTON_INVALID) == LOW) {
Serial.println(">> بطاقة خاطئة: ممنوع الدخول!");
accessDenied();
delay(500);
}
}
// --- دالة القبول (أخضر + فتح) ---
void accessGranted() {
digitalWrite(GREEN_LED, HIGH);
// نغمة نجاح (ترا رن!)
tone(BUZZER_PIN, 2000); delay(100);
tone(BUZZER_PIN, 3000); delay(100);
noTone(BUZZER_PIN);
gateServo.write(90); // فتح
delay(3000); // انتظار
gateServo.write(0); // إغلاق
digitalWrite(GREEN_LED, LOW);
}
// --- دالة الرفض (أحمر + إنذار) ---
void accessDenied() {
digitalWrite(RED_LED, HIGH);
// نغمة إنذار (توت.. توت..) صوت غليظ
for(int i=0; i<3; i++) {
tone(BUZZER_PIN, 500); // نغمة منخفضة
delay(300);
noTone(BUZZER_PIN);
delay(200);
}
digitalWrite(RED_LED, LOW);
}