Menu
CoddyTech
flag Ar iconالعربيةdown icon

لعبة سرعة الاستجابة: المؤقّت

جزء من قسم المشاريع في رحلة Arduino على Coddy. الدرس 6 من 24.

الآن تقيسك اللعبة. زمن رد الفعل هو الوقت من لحظة إضاءة LED إلى لحظة ضغطك، لذا يحتاج البرنامج إلى تذكّر لحظة واحدة: متى أضاء LED.

digitalWrite(ledPin, HIGH);
litAt = millis();
state = LIT;

عندما تأتي الضغطة في الحالة LIT، يكون الفرق هو الإجابة:

unsigned long reaction = millis() - litAt;
Serial.print("Reaction: ");
Serial.print(reaction);
Serial.println(" ms");

لا ينجح هذا إلا لأن البرنامج لا يتوقف أبدًا في delay(): تتحقق loop() من الزر آلاف المرات كل مللي ثانية، لذلك تُرصد الضغطة بعد أقل من مللي ثانية من حدوثها. يحتاج معظم الناس إلى 200 إلى 300 ms.

challenge icon

التحدي

متوسط

قِس زمن اللاعب:

  • احفظ millis() في litAt عندما يضيء LED
  • عندما تأتي الضغطة في LIT، احسب millis() - litAt
  • اطبعه بالشكل Reaction: 250 ms

اضغط Run، والعب، واقرأ شاشة Serial، ثم اضغط Check.

جرّب بنفسك

const int ledPin = 12;
const int buttonPin = 2;

// الحالات الثلاث للجولة
enum State { READY, WAITING, LIT };
State state = READY;

int lastButton = HIGH;       // قراءة الزر في المرة السابقة
unsigned long waitStart = 0; // وقت بدء الانتظار
unsigned long waitTime = 0;  // مدة هذا الانتظار

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  Serial.println("Press the button to start");
}

void loop() {
  int button = digitalRead(buttonPin);
  bool pressed = (button == LOW && lastButton == HIGH);  // تم الضغط للتو
  lastButton = button;
  unsigned long now = millis();

  switch (state) {
    case READY:
      if (pressed) {
        randomSeed(micros());  // لا يتطابق توقيت الضغط في مرتين أبدًا
        waitTime = random(1000, 3001);
        waitStart = now;
        state = WAITING;
      }
      break;
    case WAITING:
      if (now - waitStart >= waitTime) {
        digitalWrite(ledPin, HIGH);
        state = LIT;
      }
      break;
    case LIT:
      if (pressed) {
        digitalWrite(ledPin, LOW);
        state = READY;
      }
      break;
  }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المشاريع

تدرّب بنفسك: Playground لـ Arduino