מה נלמד כאן
- לוגיקת עדיפות בין כמה כניסות
- מצב נעילה
- לבנות לחצן טריוויה לארבעה שחקנים
מי היה ראשון
בתחרויות ידע, לחצן הטריוויה הוא הכלי שמכריע מי לחץ ראשון. בלעדיו — ויכוח.

בשיעור הזה נבנה אחד לארבעה שחקנים.
הידע שצריך
ארבעת שלבי הלוגיקה
זה השיעור הראשון שבו ההיגיון מורכב יותר מהחומרה. תעקבו אחרי המצבים:
1. מצב לא פעיל — בהתחלה המערכת לא מקשיבה. לחיצות של שחקנים לא עושות כלום. רק כשהמנחה לוחץ על כפתור ההתחלה, המערכת עוברת למצב פעיל.
2. זיהוי — במצב פעיל, התוכנית סורקת את ארבעת הכפתורים ברצף. ברגע שאחד נלחץ — השחקן הזה מוכרז כראשון ומספרו נרשם.
3. נעילה — מיד לאחר מכן המערכת ננעלת. לחיצות של שאר השחקנים מתעלמות לחלוטין. זה הלב של המערכת — בלי נעילה, השחקן השני היה "דורס" את הראשון.
4. חיווי — הזמזם מצפצף והנורית של השחקן המנצח נדלקת.
למה זה מעניין
עד עכשיו התוכניות שלכם הגיבו — קלט נכנס, פלט יוצא. כאן התוכנית מנהלת מצב: היא יודעת אם היא פעילה, אם כבר יש מנצח, ומי הוא.
זה נקרא מכונת מצבים, וזה הבסיס לכל תוכנה מורכבת.
לא פעיל ──(המנחה לוחץ)──> פעיל ──(שחקן לוחץ)──> נעול
^ |
└──────────────(איפוס)──────────────────────────────┘
עדיפות
מה קורה אם שני שחקנים לוחצים באותו רגע? במציאות זה כמעט בלתי אפשרי — ההפרש יהיה מיקרו-שניות. אבל התוכנית סורקת לפי סדר, ולכן במקרה קיצון מי שנבדק ראשון בלולאה מנצח.
זו הטיה קטנה שקיימת בכל מערכת כזו. שווה לדעת שהיא שם.
הניסוי
המטרה: ארבעה שחקנים, מי שלוחץ ראשון מנצח, והמערכת ננעלת.
רשימת רכיבים
| הרכיב | כמות |
|---|---|
| לוח ESP32 | 1 |
| לוח ניסוי 400 נקודות | 1 |
| לחצנים | 4 |
| נוריות LED | 4 |
| זמזם אקטיבי | 1 |
| נגד 10kΩ | 1 |
| נגד 220Ω | 1 |
התרשים החשמלי

החיבור

מבנה התוכנית
bool active = false; // האם המערכת מקשיבה
int winner = 0; // מי ניצח (0 = עדיין אף אחד)
void loop() {
// 1. המנחה פותח את הסבב
if (!active && כפתור_מנחה_נלחץ) {
active = true;
winner = 0;
כבה_את_כל_הנוריות();
}
// 2. סורקים את השחקנים — רק אם פעיל ואין עדיין מנצח
if (active && winner == 0) {
for (int i = 0; i < 4; i++) {
if (digitalRead(playerPins[i]) == LOW) {
winner = i + 1;
digitalWrite(ledPins[i], HIGH); // הנורית שלו
זמזם_קצר();
active = false; // 3. נעילה
break; // יוצאים מיד
}
}
}
}
שלושת המשפטים שעושים את כל העבודה:
winner == 0— התנאי שמונע מהשני לדרוס את הראשוןactive = false— הנעילהbreak— יציאה מיידית מהלולאה, כדי שלא ייבדקו שחקנים נוספים באותו סיבוב
מה אמור לקרות

המנחה לוחץ, כל הנוריות כבות. השחקן הראשון שלוחץ — הנורית שלו נדלקת והזמזם מצפצף. לחיצות נוספות לא עושות כלום עד שהמנחה פותח סבב חדש.
נסו בעצמכם
- הסירו את
active = false. מה קורה כששחקן שני לוחץ? עכשיו הבנתם למה הנעילה שם. - הוסיפו ספירה לאחור לפני פתיחת הסבב: שלושה צפצופים ואז "לחצו".
- הוסיפו מונה ניקוד לכל שחקן והציגו אותו על התצוגה.
- הוסיפו פסילה: מי שלוחץ לפני שהמנחה פתח — נורית שלו מהבהבת והוא מודח מהסבב.
- שלבו עם שיעור 9: מנגינת ניצחון במקום צפצוף.


