لعبة نرد باستخدام الاردوينو

في هذا المشروع سنقوم بتعلم كيفية استخدام الأردوينو لعمل لعبة نرد بسيطة بإستخدام الـ LED ومفتاح الضغط. فعند كل ضغطة على المفتاح نحصل على رقم بشكل عشوائي.

Led Dice: لعبة نرد بسيطة باستخدام الاردوينو

المكونات المطلوبة

arduino uno r3

Arduino Uno

 

blue led 5mm

LED

220 Ω resistor

220 Ohm Resistor

Push Button

10K Ohm Resistor

 

Full size breadboard 830

Breadboard

Breadboard Jumper Wire 65 pcs

Wires

 

توصيل الدارة

نقوم بتوصيل الدارة كما هو مبين بالشكل التالي :

Led Dice: لعبة نرد بسيطة باستخدام الاردوينو

سنقوم بكتابة الكود البرمجي ليقوم بإظهار على مجموعة الـ LEDs رقم عشوائي لمدة ثانيتين ثم يختفي في كل مرة يتم فيها الضغط على المفتاح.

Led Dice: لعبة نرد بسيطة باستخدام الاردوينو

 

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

#define LED1 10 
#define LED2 9 
#define LED3 7 
#define LED4 8  
#define BUTTON 6

int buttonState;
long ran;
int time = 2000;

void setup ()
{
  pinMode (LED1, OUTPUT);
  pinMode (LED2, OUTPUT);
  pinMode (LED3, OUTPUT);
  pinMode (LED4, OUTPUT);
  pinMode (BUTTON, INPUT);
  randomSeed(analogRead(0));
}

void loop()
{
  buttonState = digitalRead(BUTTON);
  if (buttonState == HIGH){
    ran = random(1, 7);
    if (ran == 1){
      digitalWrite (LED4, HIGH);
      delay (time);
    }
    if (ran == 2){
      digitalWrite (LED1, HIGH);
      delay (time);
    }
    if (ran == 3){
      digitalWrite (LED3, HIGH);
      digitalWrite (LED4, HIGH);
      delay (time);
    }
    if (ran == 4){
      digitalWrite (LED1, HIGH);
      digitalWrite (LED3, HIGH);
      delay (time);
    }
    if (ran == 5){
      digitalWrite (LED1, HIGH);
      digitalWrite (LED3, HIGH);
      digitalWrite (LED4, HIGH);
      delay (time);
   }
   if (ran == 6){
      digitalWrite (LED1, HIGH);
      digitalWrite (LED2, HIGH);
      digitalWrite (LED3, HIGH);
      delay (time);
   }
  }
  digitalWrite (LED1, LOW);
  digitalWrite (LED2, LOW);
  digitalWrite (LED3, LOW);
  digitalWrite (LED4, LOW);
}

شرح الكود :

في البداية نقوم بتسمية منافذ الاردوينو المستخدمة في المشروع وتعريف عدد من المتغيرات التي سيتم استخدامها بالكود لاحقا.

#define LED1 10
#define LED2 9
#define LED3 7
#define LED4 8
#define BUTTON 6

int buttonState;
long ran;
int time = 2000;

 سيتم استخدام المتغير buttonState لتسجيل حالة المفتاح إذا كان مضغوطا أو لا. والمتغير ran لتسجيل رقم يتم توليده عشوائيا بين رقم 1 و 6 . والمتغير time لتسجيل مدة التأخير الزمني الذي تحتفظ به الـ LEDs بالإضاءة قبل ان تنطفئ.

بعد ذلك في الدالة ()setup، نقوم بضبط الـ LEDs كمخرج والمفتاح كمدخل.

void setup () { 
    pinMode (LED1, OUTPUT);  
    pinMode (LED2, OUTPUT); 
    pinMode (LED3, OUTPUT); 
    pinMode (LED4, OUTPUT); 
    pinMode (BUTTON, INPUT); 

    randomSeed(analogRead(0)); 
}

لاحقا سيتم استخدام دالة random لتوليد الأرقام العشوائية، ولكن هذه الدالة تحتاج إلى ما سيمى بالـ seed وهو عبارة عن رقم تستخدمه الدالة random في حساباتها لتوليد الرقم العشوائي.

randomSeed(analogRead(0));

وأخيرا، في الدالة ()loop نقوم بقراءة حالة المفتاح، إذا كان مضغوط نستخدم الدالة (random (1,7 للحصول على رقم عشوائي بين 1و 6. ثم نقوم بإضاءة الـ LEDs اعتمادا على هذا الرقم العشوائي. يتم إضاءة مجموعة الـ LEDs بشكل معين كما لو كان نردا حقيقيا ثم ننتظر لمدة ثانيتين ونطفئ الـ LEDs لإنتظار ضغطة جديدة على المفتاح ليتم عرض رقم جديد.

void loop()
{
  buttonState = digitalRead(BUTTON);
  if (buttonState == HIGH){
    ran = random(1, 7);
    if (ran == 1){
      digitalWrite (LED4, HIGH);
      delay (time);
    }
    if (ran == 2){
      digitalWrite (LED1, HIGH);
      delay (time);
    }
    if (ran == 3){
      digitalWrite (LED3, HIGH);
      digitalWrite (LED4, HIGH);
      delay (time);
    }
    if (ran == 4){
      digitalWrite (LED1, HIGH);
      digitalWrite (LED3, HIGH);
      delay (time);
    }
    if (ran == 5){
      digitalWrite (LED1, HIGH);
      digitalWrite (LED3, HIGH);
      digitalWrite (LED4, HIGH);
      delay (time);
   }
   if (ran == 6){
      digitalWrite (LED1, HIGH);
      digitalWrite (LED2, HIGH);
      digitalWrite (LED3, HIGH);
      delay (time);
   }
  }
  digitalWrite (LED1, LOW);
  digitalWrite (LED2, LOW);
  digitalWrite (LED3, LOW);
  digitalWrite (LED4, LOW);
}