// مشروع العداد الإلكتروني
// باستخدام زر الضغط ومجموعة من المصابيح وشاشة
// إعداد المهندس/ أحمد درويش
#include <Wire.h> // مكتبة الاتصال I2C
#include <LiquidCrystal_I2C.h> // مكتبة شاشة LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // تهيئة شاشة LCD بعنوان I2C وعرض 16 خانة وسطرين
int count = 0; // متغير لتتبع عدد الضغطات
void setup() {
pinMode(7, INPUT_PULLUP); // Pull-up إعداد المنفذ 7 كدخل مع مقاومة داخلية
pinMode(2, OUTPUT); // إعداد المنفذ 2 كخرج للمصباح الأول
pinMode(3, OUTPUT); // إعداد المنفذ 3 كخرج للمصباح الثاني
pinMode(4, OUTPUT); // إعداد المنفذ 4 كخرج للمصباح الثالث
pinMode(5, OUTPUT); // إعداد المنفذ 5 كخرج للمصباح الرابع
lcd.init(); // تهيئة شاشة LCD
lcd.backlight(); // تشغيل الإضاءة الخلفية للشاشة
lcd.setCursor(0, 0); // تعيين المؤشر في السطر الأول
lcd.print("Press Counter"); // طباعة عنوان العداد على الشاشة
lcd.setCursor(0, 1); // تعيين المؤشر في السطر الثاني
lcd.print("Count: 0"); // طباعة قيمة العداد الابتدائية
}
void loop() {
if (digitalRead(7) == LOW) { // (Pull-up عند الضغط بسبب مقاومة LOW يصبح الدخل) التحقق من حالة زر الضغط
count++; // زيادة قيمة العداد
switch (count) { // التحكم بالمصابيح بناءً على قيمة العداد
case 1: digitalWrite(2, HIGH); break; // تشغيل المصباح الأول
case 2: digitalWrite(3, HIGH); break; // تشغيل المصباح الثاني
case 3: digitalWrite(4, HIGH); break; // تشغيل المصباح الثالث
case 4: digitalWrite(5, HIGH); break; // تشغيل المصباح الرابع
default: // عند تجاوز العدد 4 يتم إطفاء جميع المصابيح وإعادة العداد للصفر
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
count = 0;
break;
}
// تحديث الشاشة بقيمة العداد الحالية
lcd.setCursor(0, 1); // تعيين المؤشر في السطر الثاني
lcd.print("Count: "); // طباعة النص "Count:"
lcd.print(count); // طباعة قيمة العداد
lcd.print(" "); // مسح النص القديم عند انخفاض العدد
delay(200); // (debouncing) تأخير 200 مللي ثانية لتجنب التكرار السريع عند الضغط على الزر
}
}