מה נלמד כאן
- מה זה מספר אקראי ולמה מחשבים צריכים אותו
- הבלוק pick random שמגריל מספר
- הבלוק wait until שמחכה עד שמשהו קורה
- איך מגדירים בלוק חדש משלכם ולמה זה חוסך המון עבודה
- לבנות קובייה שלוחצים עליה ומקבלים 1 עד 6
למה קובייה זה דבר מדהים
בכל משחק קופסה יש קובייה. זורקים אותה, והיא נופלת על מספר — ואף אחד לא יודע מראש על מה. זה בדיוק מה שהופך את המשחק למעניין.

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

בשיעור הזה אתם בונים אותה. שני רכיבים שכבר מוכרים לכם — כפתור משיעור 4 ותצוגת הספרה משיעור 14 — ודבר אחד חדש לגמרי: מספר אקראי.
מה זה בכלל מספר אקראי
מחשב הוא מכונה שעושה בדיוק מה שאומרים לה. אז איך הוא ״מפתיע״?
יש בלוק מיוחד שאומר ללוח: תן לי מספר כלשהו בין כאן לכאן, ואל תגיד לי מראש איזה. בכל פעם התשובה שונה. זה נקרא מספר אקראי, ובלעדיו לא היה אפשר לבנות משחקי מחשב, הגרלות, או רובוט שמחליט לבד לאן לפנות.
הרכיבים
תצוגת הספרה (8-Segment Display)
תצוגה קטנה שבנויה משמונה מקלות אור: שבעה שמרכיבים את הספרה (מסומנים a עד g) ונקודה אחת (dp). כל מקל הוא נורית נפרדת עם רגל משלה.
כדי להראות ספרה מדליקים כמה מקלות ומכבים אחרים. הספרה 1 היא שני מקלות בצד ימין; הספרה 8 היא כל השבעה יחד.
כל מקל מקבל נגד 220Ω משלו — שמונה נגדים בסך הכל — ומתחבר לפין משלו על הלוח: 5, 16, 17, 18, 19, 23, 12 ו-13.
הכפתור
כפתור עם נגד 10kΩ שמחבר אותו ל-5V. זה נקרא נגד מעלה (pull-up), והוא עושה דבר חשוב: כשאף אחד לא נוגע, הפין קורא 1. כשלוחצים, הכפתור מחבר את הפין ל-GND והוא קורא 0.
זכרו את זה טוב: לחוץ = 0. משוחרר = 1. זה נראה הפוך, אבל זו הצורה הנפוצה ביותר לחבר כפתורים.

החיבור

צריכים: לוח ESP32, לוח ניסוי, תצוגת ספרה אחת, כפתור אחד, נגד 10kΩ ושמונה נגדי 220Ω.
- התצוגה — שתי רגלי ה-gnd שלה (באמצע, למעלה ולמטה) אל פס ה-GND.
- כל אחת משמונה הרגליים האחרות — דרך נגד 220Ω אל הפין שלה: 5, 16, 17, 18, 19, 23, 12, 13.
- הכפתור — צד אחד אל GND, הצד השני אל פין 14 וגם דרך נגד 10kΩ אל 5V.
זה החיבור הכי עמוס שעשיתם עד עכשיו. עשו אותו לאט, רגל-רגל, ותסמנו לעצמכם מה חיברתם.
הבלוקים
הבלוקים שאתם מגדירים בעצמכם
לפני שמסתכלים על התוכנית הראשית — יש כאן רעיון חדש וגדול.
כדי להראות את הספרה 3 צריך שמונה בלוקים של set digital pin, אחד לכל מקל. כדי להראות 1, 2, 4, 5 ו-6 — עוד ועוד שמיניות. אם היינו שמים את הכל בתוכנית הראשית היא הייתה ענקית ובלתי אפשרית לקריאה.
הפתרון: define — בלוק ורוד שבו אתם מגדירים בלוק חדש משלכם, נותנים לו שם, ומכניסים לתוכו את כל העבודה. אחר כך קוראים לו בשם, בבלוק אחד.

בתמונה רואים את ההגדרות האלה, אחת ליד השנייה: define Number3, define Number4, define Number5 ועוד (כמה מהכותרות נחתכו בקצה הדף). כל אחת היא ערימה של שמונה בלוקי set digital pin [x] to [high/low] — high מדליק מקל, low מכבה אותו.
זה בדיוק כמו מתכון: פעם אחת כותבים ״איך מכינים פנקייק״, ואחר כך פשוט אומרים ״תכין פנקייק״.
התוכנית הראשית

בצד שמאל של התמונה נמצאת התוכנית הראשית. היא קצרה:
set [currentNumber] to (0) — פותחים קופסה בשם currentNumber ושמים בה 0. שם יישמר המספר שהוגרל.
forever — הבלוק העוטף. בפנים:
if (read digital pin [14] = [0]) then — החריץ המשושה בודק את פין 14. אם הוא 0, מישהו לוחץ עכשיו. אם לא — הלוח פשוט מדלג וממשיך לסבב הבא.
בתוך ה-if:
- wait (200) milliseconds — חכה חמישית שנייה. זה נראה מיותר, אבל הוא פותר בעיה אמיתית: כשמתכת נוגעת במתכת היא ״מקפצת״ רגע, והלוח עלול לחשוב שלחצתם חמש פעמים. ההמתנה נותנת למגע להתייצב.
- wait until (read digital pin [14] = [1]) — בלוק ההמתנה החכם: הלוח עומד במקום עד שהפין חוזר ל-1, כלומר עד שהאצבע מתרוממת. כך מקבלים הגרלה אחת ללחיצה, גם אם מישהו מחזיק את הכפתור לחוץ.
- set [currentNumber] to (pick random (1) to (6)) — הנה הבלוק החדש. pick random הוא בלוק ירוק עגלגל עם שני חלונות: מאיזה מספר עד איזה מספר. הוא מחזיר מספר אחד מהטווח, ואף אחד לא יודע איזה מראש. התוצאה נשמרת בקופסה currentNumber.
- Display (currentNumber) — קריאה לבלוק ורוד שאתם הגדרתם, עם המספר שהוגרל בתוכו.
define Display (number)
בצד ימין של אותה תמונה נמצאת ההגדרה של Display. שימו לב שיש לו חלון קלט — משתנה בשם number שנכנס איתו פנימה.
בתוך ההגדרה יש שישה בלוקי if, בשרשרת:
- if (number = 1) then → Number1
- if (number = 2) then → Number2
- וכך הלאה עד Number6
זהו מרכזן קטן: הוא מקבל מספר, ומפעיל את המתכון המתאים לו. שלוש שכבות של בלוקים משלכם — Display קורא ל-Number3, ש-Number3 מדליק שמונה פינים. וזה כל הסיפור.
מריצים
⬇ להורדת הקובץ Electronic_Dice.sb3 — גוררים אותו לתוך ACECode ולוחצים Upload.
ההסבר המלא על צריבה נמצא בשיעור ההתקנה.

לחצו על הכפתור. ספרה קופצת. לחצו שוב — ספרה אחרת. לחצו עשר פעמים ותראו שהמספרים מתערבבים בלי סדר, בדיוק כמו קובייה.
אם הספרה נראית שבורה — מקל אחד לא נדלק או נדלק מיותר — בדקו את החוט של המקל הזה. סביר שנגד אחד לא יושב טוב בחור.
מה קרה כאן
התוכנית שלכם עשתה שלושה דברים, וכל אחד מהם שווה לזכור:
חיכתה בסבלנות. ה-if בודק אם לוחצים, ו-wait until מוודא שלא סופרים אותה לחיצה פעמיים.
הגרילה. pick random (1) to (6) הוא הרכיב שמכניס הפתעה לתוך מכונה שאין בה הפתעות.
ארגנה את העבודה. במקום תוכנית ענקית — בלוק ראשי קטן שקורא ל-Display, ש-Display קורא ל-NumberN. כשמפצלים בעיה גדולה לחתיכות קטנות עם שמות, פתאום אפשר להבין אותה. זה אולי השיעור הכי חשוב בכל התכנות.
תרגילים
קובייה של 12 פאות. שנו את החלון השני ב-pick random מ-6 ל-9. (מעבר ל-9 צריך שתי ספרות, וזה כבר עבודה לשיעור 24.) בדקו שכל ספרה מוצגת נכון.
הגרלה איטית. שנו את wait (200) milliseconds ל-1000. עכשיו יש השהיה ברורה בין הלחיצה לתוצאה — כמו קובייה שמתגלגלת.
מטבע. שנו את ה-pick random ל-(1) to (2). קיבלתם הטלת מטבע: 1 זה עץ, 2 זה פלי.
קובייה עם צליל. הוסיפו בתוך ה-if, אחרי Display, בלוק set digital pin לפין של הזמזם הפעיל משיעור 8, אחריו wait (100) milliseconds ואז אותו בלוק עם low. עכשיו כל הגרלה מלווה בביפ.


