الكود البرمجي
#define aPin 2 #define bPin 1 #define cPin 4 #define dPin 5 #define ePin 6 #define fPin 7 #define gPin 8 #define c1Pin 9 // Common pin for digit 1 #define c2Pin 10 // Common pin for digit 2 #define c3Pin 11 // Common pin for digit 3 #define c4Pin 12 // Common pin for digit 4 #define c1 A0 #define c2 A1 #define c3 A2 #define bt_reset A3 long Counter=0; int flag1=0, flag2=0, flag3=0, timer=0; int Common = 0; //<Common=1; for Common anode> <Common=0; for Common cathode> int On, Off, Off_C; int DTime = 4; // Display timer void setup(){ // put your setup code here, to run once pinMode(c1, INPUT); pinMode(c2, INPUT); pinMode(c3, INPUT); pinMode(bt_reset, INPUT); pinMode(aPin, OUTPUT); pinMode(bPin, OUTPUT); pinMode(cPin, OUTPUT); pinMode(dPin, OUTPUT); pinMode(ePin, OUTPUT); pinMode(fPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(c1Pin, OUTPUT); pinMode(c2Pin, OUTPUT); pinMode(c3Pin, OUTPUT); pinMode(c4Pin, OUTPUT); if(Common==1){On=0, Off=1, Off_C=0;} //for Common anode else{On=1, Off=0, Off_C=1;} //for Common cathode // Indicate that system is ready for (int i = 9; i >=0; i--) { showNumber(i); digitalWrite(c1Pin, Common); digitalWrite(c2Pin, Common); digitalWrite(c3Pin, Common); digitalWrite(c4Pin, Common); delay(1000); } } void loop(){ if(digitalRead (c1) == 1){ if(flag1==0){ flag1=1; Counter = Counter+30; if(Counter>9999){Counter=0;} }} else{flag1=0;} if(digitalRead (c2) == 1){ if(flag2==0){ flag2=1; Counter = Counter+20; if(Counter<0){Counter=9999;} } }else{flag2=0;} if(digitalRead (c3) == 1){ if(flag2==0){ flag2=1; Counter = Counter+10; if(Counter<0){Counter=9999;} } }else{flag3=0;} if(digitalRead (bt_reset) == 1){ Counter=0; if(timer<200){timer=timer+1;} if(timer==200){ } }else{timer=0;} showNumber((Counter/1000)%10); digitalWrite(c1Pin, Common); delay(DTime); digitalWrite(c1Pin, Off_C); showNumber((Counter/100)%10); digitalWrite(c2Pin, Common); delay(DTime); digitalWrite(c2Pin, Off_C); showNumber((Counter/10)%10); digitalWrite(c3Pin, Common); delay(DTime); digitalWrite(c3Pin, Off_C); showNumber(Counter%10); digitalWrite(c4Pin, Common); delay(DTime); digitalWrite(c4Pin, Off_C); } void showNumber(int x){ switch(x){ case 1: one(); break; case 2: two(); break; case 3: three(); break; case 4: four(); break; case 5: five(); break; case 6: six(); break; case 7: seven(); break; case 8: eight(); break; case 9: nine(); break; default: zero(); break; } } void one(){ digitalWrite( aPin, Off); // digitalWrite( bPin, On); // | digitalWrite( cPin, On); // | digitalWrite( dPin, Off); // | digitalWrite( ePin, Off); // | digitalWrite( fPin, Off); digitalWrite( gPin, Off); } void two(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | digitalWrite( cPin, Off); // ____| digitalWrite( dPin, On); // | digitalWrite( ePin, On); // |____ digitalWrite( fPin, Off); digitalWrite( gPin, On); } void three(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | digitalWrite( cPin, On); // ____| digitalWrite( dPin, On); // | digitalWrite( ePin, Off); // ____| digitalWrite( fPin, Off); digitalWrite( gPin, On); } void four(){ digitalWrite( aPin, Off); // digitalWrite( bPin, On); // | | digitalWrite( cPin, On); // |____| digitalWrite( dPin, Off); // | digitalWrite( ePin, Off); // | digitalWrite( fPin, On); digitalWrite( gPin, On); } void five(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, Off); // | digitalWrite( cPin, On); // |____ digitalWrite( dPin, On); // | digitalWrite( ePin, Off); // ____| digitalWrite( fPin, On); digitalWrite( gPin, On); } void six(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, Off); // | digitalWrite( cPin, On); // |____ digitalWrite( dPin, On); // | | digitalWrite( ePin, On); // |____| digitalWrite( fPin, On); digitalWrite( gPin, On); } void seven(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | digitalWrite( cPin, On); // | digitalWrite( dPin, Off); // | digitalWrite( ePin, Off); // | digitalWrite( fPin, Off); digitalWrite( gPin, Off); } void eight(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | | digitalWrite( cPin, On); // |____| digitalWrite( dPin, On); // | | digitalWrite( ePin, On); // |____| digitalWrite( fPin, On); digitalWrite( gPin, On); } void nine(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | | digitalWrite( cPin, On); // |____| digitalWrite( dPin, On); // | digitalWrite( ePin, Off); // ____| digitalWrite( fPin, On); digitalWrite( gPin, On); } void zero(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | | digitalWrite( cPin, On); // | | digitalWrite( dPin, On); // | | digitalWrite( ePin, On); // |____| digitalWrite( fPin, On); digitalWrite( gPin, Off); }
شرح الكود البرمجي
نعرف منافذ شاشة السبع مقاطع اربع أرقام
#define aPin 2 #define bPin 1 #define cPin 4 #define dPin 5 #define ePin 6 #define fPin 7 #define gPin 8 #define c1Pin 9 // Common pin for digit 1 #define c2Pin 10 // Common pin for digit 2 #define c3Pin 11 // Common pin for digit 3 #define c4Pin 12 // Common pin for digit 4
نعرف الخطوط الثلاثة الخاسة بحلقات هدف الرماية
#define c1 A0 #define c2 A1 #define c3 A2
نعرف زر تصفير حساب النقط
#define bt_reset A3
نعرف متغير لحساب النقاط باسم counter
long Counter=0;
نعرف متغير باسم common نعطيه قيمة 1 اذا كان شاشة السبع مقاطع اربع أرقاب ذات قطب موجب مشترك و 0 اذا كانت ذات قطب سابي مشترك
int flag1=0, flag2=0, flag3=0, timer=0; int Common = 0; //<Common=1; for Common anode> <Common=0; for Common cathode> int On, Off, Off_C; int DTime = 4; // Display timer
في دالة void setup نعرف منافذ الدخل والخرج
void setup(){ // put your setup code here, to run once pinMode(c1, INPUT); pinMode(c2, INPUT); pinMode(c3, INPUT); pinMode(bt_reset, INPUT); pinMode(aPin, OUTPUT); pinMode(bPin, OUTPUT); pinMode(cPin, OUTPUT); pinMode(dPin, OUTPUT); pinMode(ePin, OUTPUT); pinMode(fPin, OUTPUT); pinMode(gPin, OUTPUT); pinMode(c1Pin, OUTPUT); pinMode(c2Pin, OUTPUT); pinMode(c3Pin, OUTPUT); pinMode(c4Pin, OUTPUT); if(Common==1){On=0, Off=1, Off_C=0;} //for Common anode else{On=1, Off=0, Off_C=1;} //for Common cathode
في بداية تشغيل البرنامج و للتأكد من أن جميع وحدات شاشة العرض في جميع الأرقام تعمل بشكل صحيح يتم اظهار عد تنازلي على الشاشة من 9 الى 0 على كل رقم
for (int i = 9; i >=0; i--) { showNumber(i); digitalWrite(c1Pin, Common); digitalWrite(c2Pin, Common); digitalWrite(c3Pin, Common); digitalWrite(c4Pin, Common); delay(1000); } }
في بداية دالة voide loop نحدد الشرط اذا قرأ الأردوينو المنفذ الخاص بالدائرة الداخلية على أنه 1 يتم اضافة قيمة 30 نقطة لمتغير النقاط counter
void loop(){ if(digitalRead (c1) == 1){ if(flag1==0){ flag1=1; Counter = Counter+30; if(Counter>9999){Counter=0;} }} else{flag1=0;}
اذا قرأ الأردوينو اشارة 1 من المنفذ A1 سيتم اضافة 20 نقطة
if(digitalRead (c2) == 1){ if(flag2==0){ flag2=1; Counter = Counter+20; if(Counter<0){Counter=9999;} }
اذا قرأ الأردوينو اشارة 1 من المنفذ A2 سيتم اضافة 10 نقطة
}else{flag2=0;} if(digitalRead (c3) == 1){ if(flag2==0){ flag2=1; Counter = Counter+10; if(Counter<0){Counter=9999;} } }else{flag3=0;}
اذا قرأ الأردوينو اشارة 1 من المنفذ A3 تصفير عداد النقاط أي عند الضغط على ضغاط التحكم
if(digitalRead (bt_reset) == 1){ Counter=0; if(timer<200){timer=timer+1;} if(timer==200){ } }else{timer=0;}
الدوال التالية لتعريف الأرقام من 0- 9
void one(){ digitalWrite( aPin, Off); // digitalWrite( bPin, On); // | digitalWrite( cPin, On); // | digitalWrite( dPin, Off); // | digitalWrite( ePin, Off); // | digitalWrite( fPin, Off); digitalWrite( gPin, Off); } void two(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | digitalWrite( cPin, Off); // ____| digitalWrite( dPin, On); // | digitalWrite( ePin, On); // |____ digitalWrite( fPin, Off); digitalWrite( gPin, On); } void three(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | digitalWrite( cPin, On); // ____| digitalWrite( dPin, On); // | digitalWrite( ePin, Off); // ____| digitalWrite( fPin, Off); digitalWrite( gPin, On); } void four(){ digitalWrite( aPin, Off); // digitalWrite( bPin, On); // | | digitalWrite( cPin, On); // |____| digitalWrite( dPin, Off); // | digitalWrite( ePin, Off); // | digitalWrite( fPin, On); digitalWrite( gPin, On); } void five(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, Off); // | digitalWrite( cPin, On); // |____ digitalWrite( dPin, On); // | digitalWrite( ePin, Off); // ____| digitalWrite( fPin, On); digitalWrite( gPin, On); } void six(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, Off); // | digitalWrite( cPin, On); // |____ digitalWrite( dPin, On); // | | digitalWrite( ePin, On); // |____| digitalWrite( fPin, On); digitalWrite( gPin, On); } void seven(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | digitalWrite( cPin, On); // | digitalWrite( dPin, Off); // | digitalWrite( ePin, Off); // | digitalWrite( fPin, Off); digitalWrite( gPin, Off); } void eight(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | | digitalWrite( cPin, On); // |____| digitalWrite( dPin, On); // | | digitalWrite( ePin, On); // |____| digitalWrite( fPin, On); digitalWrite( gPin, On); } void nine(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | | digitalWrite( cPin, On); // |____| digitalWrite( dPin, On); // | digitalWrite( ePin, Off); // ____| digitalWrite( fPin, On); digitalWrite( gPin, On); } void zero(){ digitalWrite( aPin, On); // ____ digitalWrite( bPin, On); // | | digitalWrite( cPin, On); // | | digitalWrite( dPin, On); // | | digitalWrite( ePin, On); // |____| digitalWrite( fPin, On); digitalWrite( gPin, Off); }