لعبة سرعة الاستجابة: المؤقّت
جزء من قسم المشاريع في رحلة 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.
التحدي
متوسطقِس زمن اللاعب:
- احفظ
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;
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المشاريع
2لعبة سرعة الاستجابة
لعبة سرعة الاستجابة: انتظار عشوائيلعبة سرعة الاستجابة: المؤقّتلعبة سرعة الاستجابة: انطلاق مبكرلعبة سرعة الاستجابة: أفضل وقتتدرّب بنفسك: Playground لـ Arduino