דלגו לתוכן המרכזי
KitLab
שיעור קודם
מונה עם שלושה כפתורים — פלוס, מינוס ואיפוס· 27 / 41
מונה עם שלושה כפתורים — פלוס, מינוס ואיפוס
🎬

הסרטון בדרך אלינו

בינתיים — התמלול המלא של השיעור מחכה לכם למטה

מונה עם שלושה כפתורים — פלוס, מינוס ואיפוס

מה בשיעור?

  • להסביר איך עובד מונה — במד צעדים, בלוח תוצאות, בשלט
  • להשתמש בבלוק change by כדי להוסיף ולהחסיר 1
  • להגן על הטווח עם בלוקי if — לא לרדת מתחת ל-0
  • להבין מה זה שארית (mod) ולמה היא שימושית
  • לפרק מספר בן ארבע ספרות לאלפים, מאות, עשרות ויחידות
  • להבין איך ארבע ספרות נראות דולקות יחד למרות שרק אחת דולקת בכל רגע

מה נלמד כאן

  • איך מכשיר סופר אירועים ושומר את המספר
  • הבלוק change [number] by (1) — להוסיף ולהחסיר
  • לשמור את המספר בטווח חוקי בעזרת if
  • פעולת השארית (mod) והקסם שהיא עושה למספרים
  • איך תצוגה של ארבע ספרות מרמה את העין שלכם

מכשירים שסופרים

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

מונה דיגיטלי עם תצוגה של ארבע ספרות ושלושה כפתורים — פלוס, מינוס ואיפוס

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

את תצוגת ארבע הספרות הכרתם בשיעור 15 ואת הכפתור בשיעור 4. הפעם יש שלושה כפתורים ביחד, ומספר שצריך לשמור עליו.


הרכיבים

תצוגת ארבע הספרות

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

הטריק: כל שמונת המקלות של כל הספרות מחוברים יחד. פין 5 הולך למקל העליון של כל ארבע הספרות, פין 16 למקל הימני-עליון של כולן, וכן הלאה. ואז יש ארבעה פינים נוספים — 14, 25, 26 ו-27 — שבוחרים איזו ספרה פעילה עכשיו.

תרשים המעגל של תצוגת ארבע הספרות — שמונה פיני מקלות ופיני בחירת ספרה D1 עד D4

שלושת הכפתורים

שלושה כפתורים, לכל אחד נגד 10kΩ ל-5V בדיוק כמו בשיעורים הקודמים. לחוץ = 0, משוחרר = 1.

תרשים המעגל של שלושת הכפתורים — הוספה, החסרה ואיפוס, כל אחד עם נגד 10 קילו-אוהם

  • הכפתור האדום — פין 32 — מוסיף 1
  • הכפתור הכחול — פין 33 — מחסיר 1
  • הכפתור השחור — פין 34 — מאפס

החיבור

חיבור על לוח הניסוי — תצוגת ארבע ספרות, שלושה כפתורים בצבעים שונים ולוח ESP32

צריכים: לוח ESP32, שני לוחות ניסוי, תצוגת ארבע ספרות, שלושה כפתורים, שלושה נגדי 10kΩ ושמונה נגדי 220Ω.

  1. המקלות — שמונה פינים דרך נגדי 220Ω: 5, 16, 17, 18, 19, 23, 12, 13.
  2. בחירת הספרה — ארבעה חוטים ישירים לפינים 14, 25, 26, 27.
  3. הכפתורים — כל אחד: צד אחד ל-GND, הצד השני לפין (32, 33, 34) וגם דרך נגד 10kΩ ל-5V.

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


הבלוקים

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

שכבה 1 — ספרה אחת: define Number0 עד define Number9

עשרה בלוקים שהוגדרו מראש, אחד לכל ספרה. כל אחד הוא ערימה של שמונה set digital pin [x] to [high/low] — איזה מקל נדלק ואיזה נכבה.

הגדרות הספרות 0 עד 5 — כל אחת ערימה של שמונה בלוקי set digital pin

הגדרות הספרות 6 עד 9 והבלוק Clear שמכבה את כל ארבע הספרות

בתמונה השנייה יש גם define Clear — ארבעה בלוקים שמעבירים את 14, 25, 26, 27 ל-high. זה מכבה את כל ארבע הספרות. תכף תראו למה זה קריטי.

שכבה 2 — define Single-digit LED display (number)

בלוק שמקבל ספרה אחת ומפעיל את המתכון המתאים: if (number = 0) then Number0, if (number = 1) then Number1, וכך הלאה עד 9. מרכזן, בדיוק כמו Display בשיעור הקודם.

הגדרת הבלוק שמציג ספרה אחת, והגדרת הבלוק שמציג מספר בן ארבע ספרות בעזרת חילוק ושארית

שכבה 3 — define Four-digit LED display showing numbers (number)

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

הרעיון הראשון: שארית (mod)

שארית היא מה שנשאר אחרי חילוק. בבלוקים היא נקראת mod.

חמישה תפוחים לארבעה ילדים: כל אחד מקבל אחד, ונשאר 1. אז 5 mod 4 = 1. שני תפוחים לארבעה ילדים: אף אחד לא מקבל תפוח שלם, ונשארים 2. אז 2 mod 4 = 2.

והשימוש המדהים: מספר mod 10 נותן תמיד את ספרת היחידות. 1234 mod 10 = 4. 7 mod 10 = 7. 90 mod 10 = 0. תמיד.

הרעיון השני: הפרדת ספרות

עכשיו אפשר לשלוף כל ספרה שרוצים מ-1234:

הספרה החישוב התוצאה
יחידות 1234 mod 10 4
עשרות (1234 / 10) mod 10 3
מאות (1234 / 100) mod 10 2
אלפים 1234 / 1000 1

קודם מחלקים כדי לזרוק את הספרות שמימין, ואז לוקחים שארית כדי לזרוק את אלה שמשמאל. נשארת ספרה אחת.

בבלוקים זה נראה כך: (convert (number) to integer) / (1000) mod (10) — הבלוק convert to integer מוודא שהתוצאה היא מספר שלם בלי שברים.

והרעיון השלישי: ריצוד

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

  1. Clear — מכבה את כל הספרות
  2. Single-digit LED display (הספרה המתאימה) — מדליק את המקלות הנכונים
  3. set digital pin [X] to [high] ואז set digital pin [Y] to [low] — מכבה את הספרה הקודמת ומדליק את החדשה
  4. wait (5) milliseconds — חכה חמש אלפיות שנייה

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

שימו לב גם לתנאי שעוטף את שלושת הקטעים הראשונים: if (... mod 10) != (0) then. הסימן != אומר ״לא שווה״. כלומר: אם ספרת האלפים היא 0 — פשוט אל תדליק את הספרה הזו. בזכות התנאי הזה המספר 25 מוצג כ-25 ולא כ-0025.

שכבה 4 — התוכנית הראשית

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

בהתחלה, לפני ה-forever:

  • set [lastIncreaseTime] to (get time) — שומרים את השעון
  • set [number] to (0) — המונה מתחיל מאפס

ובתוך ה-forever, שלושה בלוקי if כמעט זהים. הנה הראשון:

if (read digital pin [32] = [0]) and ((get time) - (lastIncreaseTime) > [200]) then

בחריץ המשושה יושב בלוק and — הוא דורש ששני התנאים יתקיימו יחד:

  • הכפתור לחוץ (פין 32 קורא 0), וגם
  • עברו יותר מ-200 אלפיות שנייה מאז הפעם הקודמת

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

בתוך ה-if:

  • if (number < 9999) then → change [number] by (1) — שומר טווח: לא עוברים 9999
  • set [lastIncreaseTime] to (get time) — מסמנים את הזמן הנוכחי

change [number] by (1) הוא בלוק חדש וחשוב: הוא לא קובע ערך, הוא מוסיף לערך הקיים. ההבדל בין ״שים 1 בקופסה״ ל״הוסף 1 למה שכבר יש בקופסה״.

הכפתור השני (פין 33) עושה את אותו הדבר עם change [number] by (-1) — מספר שלילי מחסיר — ומוגן ב-if (number > 0) כדי לא לרדת מתחת לאפס.

הכפתור השלישי (פין 34) עושה set [number] to (0) — איפוס מיידי.

ובסוף ה-forever, בלוק אחד: Four-digit LED display showing numbers (number). הוא רץ בכל סבב, ולכן התצוגה תמיד מעודכנת.


מריצים

⬇ להורדת הקובץ Counter.sb3 — גוררים אותו לתוך ACECode ולוחצים Upload.

ההסבר המלא על צריבה נמצא בשיעור ההתקנה.

המונה המורכב פועל — תצוגת ארבע ספרות ושלושה כפתורים על לוח הניסוי

התצוגה מראה 0. לחצו על האדום — 1, 2, 3. לחצו על הכחול — חוזרים אחורה. הגיעו ל-0 ולחצו עוד על הכחול: המספר נשאר על 0, כי התנאי מגן עליו. לחצו על השחור — הכל מתאפס.

אם התצוגה מרצדת חזק או נראית חיוורת — זה תקין יחסית, אבל ודאו ששמונת הנגדים יושבים היטב. אם ספרה אחת שלמה חסרה, בדקו את החוט לפין הבחירה שלה (14, 25, 26 או 27).


מה קרה כאן

המונה שלכם הוא מכשיר אמיתי, ובנוי בדיוק כמו מכשירים אמיתיים:

  • זיכרון — המשתנה number מחזיק את המצב
  • קלט מוגן — בדיקת הזמן מוודאת שלחיצה אחת נספרת פעם אחת
  • חוקים — התנאים 0 ו-9999 שומרים שהמספר לא יברח מהטווח
  • תצוגה — הפרדת ספרות + ריצוד מהיר שנראה לעין כארבע ספרות יציבות

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


תרגילים

  1. קפיצות של 10. שנו את change [number] by (1) ל-(10), ואת השני ל-(-10). עכשיו המונה קופץ בעשרות — נוח לסופר תוצאות בכדורסל.

  2. גבול נמוך יותר. שנו את if (number < 9999) ל-if (number < 20). עכשיו המונה נעצר ב-20. שימושי כשסופרים משהו שיש לו מקסימום ידוע.

  3. מונה לאחור. שנו את הערך ההתחלתי מ-set [number] to (0) ל-(10), והפכו את שני הכפתורים. קיבלתם ספירה לאחור לשיגור.

  4. בלי ריצוד קבוע. שנו את wait (5) milliseconds ל-(50). הריצו וראו: פתאום העין כן מספיקה לתפוס את ההחלפה, והספרות מהבהבות אחת-אחת. החזירו ל-5 — והקסם חוזר. עכשיו אתם באמת מבינים למה זה עובד.

🧰 הרכיבים לשיעור הזה

רוצים את חומרי הקורס והעדכונים?

נשלח למייל את קובצי הקוד, החומרים ועדכונים על שיעורים חדשים. בלי ספאם.