Menu
CoddyTech

משחק תגובה: טיימר

חלק מהיחידה פרויקטים במסלול ה-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, שחקו, קראו את הצג הטורי ואז לחצו על 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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה פרויקטים

תרגלו בעצמכם: Arduino אונליין