Arduino Master

محتويات الدرس

وصف المشروع الأدوات توصيل الدائرة الكود البرمجي

وصف المشروع

في هذا المشروع سنتعلم كيفية استخدام الأردوينو لعمل ساعة رقمية. سنقوم بعرض الوقت على شاشة الـ LCD والتحكم في ضبط الوقت من خلال مفاتيح الـ Push Buttons.

الأدوات


لوح أردوينو

مقاومة 10K

مقاومة 220

Puch buttons

لوح تجارب

أسلاك

شاشة LCD

توصيل الدائرة


سنقوم بعمل كود يقوم على حساب التوقيت لتعمل الساعة بشكل صحيح، حيث سيقوم بحساب مرور 60 ثانية ليقوم بزيادة عدد الدقائق وهكذا ايضا مع الساعات. سيتم استخدام مفاتيح الضغط ليقوم البرنامج بمراقبتها في البداية ليتم ضبط التوقيت الصحيح.

الكود البرمجي

#include

#define HOUR_BUTTON 6
#define MINUTE_BUTTON 7
#define TICK_LENGTH 60000
#define CHECK_TIME 250


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

unsigned int minute = 0;
unsigned int hour = 01;
unsigned long previousMillis = 0;
unsigned char am = 1;

void setup() {
// put your setup code here, to run once:
lcd.begin(16, 2);
pinMode(HOUR_BUTTON, INPUT);
pinMode(MINUTE_BUTTON, INPUT);
}

void loop() {
// put your main code here, to run repeatedly:
checkTick();
lcd.setCursor(0,0);
lcd.print("Time:");
lcd.setCursor(6,1);
lcd.print(hour);
lcd.print(":");
lcd.print(minute);
if(am == 1) lcd.print(" AM");
else lcd.print(" PM");
}

void checkTick() {
unsigned long currentMillis = millis();

if ((unsigned long)(currentMillis - previousMillis) >= TICK_LENGTH) {
tick();
previousMillis = currentMillis;
}
if((unsigned long)(currentMillis - previousMillis) >= CHECK_TIME){
readHourButton();
readMinuteButton();
}
}

void tick() {
minuteUp();
}


void readHourButton() {
if (digitalRead(HOUR_BUTTON) == HIGH) {
delay(200);
hourUp();
}
}

void readMinuteButton() {
if (digitalRead(MINUTE_BUTTON) == HIGH) {
delay(200);
minuteUp();
}
}

void hourUp() {
hour = hour + 1;
if (hour > 12) {
lcd.clear();
hour = 1;
if(am == 1) am = 0;
else am = 1;
}
}

void minuteUp() {
minute = minute + 1;
if (minute > 59) {
minute = 0;
hourUp();
}
}