Menu
CoddyTech

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

חלק מהיחידה פרויקטים במסלול ה-Arduino של Coddy. שיעור 5 מתוך 24.

הפרויקט הבא הוא משחק תגובה. לוחצים על הכפתור, הלוח ממתין, ואז מדליק את ה־LED, ואתם לוחצים שוב מהר ככל האפשר.

זמן ההמתנה אקראי, אחרת הייתם לומדים את הקצב. random(1000, 3001) מחזיר מספר שלם מ־1000 עד 3000.

random() הוא חישוב: אחרי כל הפעלה הוא מחזיר את אותם מספרים באותו סדר. randomSeed() בוחר היכן הרצף הזה מתחיל. אתחלו אותו לפי רגע הלחיצה, במיקרו־שניות, שמשתנה בכל משחק:

randomSeed(micros());
waitTime = random(1000, 3001);

המשחק הוא מכונת מצבים עם שלושה מצבים: READY (ממתין ללחיצה), WAITING (ההמתנה האקראית) ו־LIT (ה־LED דולקת). ההמתנה משתמשת ב־millis(), כך שבשלבים מאוחרים יותר אפשר לבדוק את הכפתור במהלכה.

קוד ההתחלה כבר בודק את pressed: הכפתור נקרא עכשיו LOW ובפעם הקודמת נקרא HIGH. הכפתור הזה לא מקפץ, לכן אין צורך בשיכוך קפיצות.

challenge icon

אתגר

בינוני

הלחצן מחובר לפין 2 וה-LED לפין 12. מלאו את שלושת המצבים:

  • READY: לחיצה מאתחלת את מחולל המספרים האקראיים באמצעות micros(), בוחרת זמן המתנה של 1000 עד 3000 ms, שומרת את זמן ההתחלה ועוברת ל-WAITING
  • WAITING: כשההמתנה מסתיימת, מדליקים את ה-LED ועוברים ל-LIT
  • LIT: לחיצה מכבה את ה-LED ועוברת ל-READY

לחצו על 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;

  // READY: לחיצה מתחילה את ההמתנה
  // WAITING: כשההמתנה מסתיימת, מדליקים את ה-LED
  // LIT: לחיצה מכבה את ה-LED והמשחק שוב מוכן

}
quiz iconבחנו את עצמכם

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

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

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