מה נלמד כאן
- מה קורה בתוך לחצן ברגע הלחיצה
- אילו רגליים של הלחצן מחוברות זו לזו כבר מהמפעל
- מה זה נגד משיכה ולמה בלעדיו הלוח משתגע
- הבלוק read digital pin שקורא מה קורה בפין
- הבלוק serial print שמדפיס לכם מספרים למסך
עד היום הלוח רק דיבר. עכשיו הוא ילמד להקשיב
בשלושת השיעורים הראשונים הלוח רק שלח פקודות החוצה: הדלק נורית, כבה נורית, תן צבע. הוא דיבר, והרכיבים הקשיבו.
היום נהפוך את הכיוון. הלוח יקבל מידע מבחוץ — וזה הדבר שהופך מכשיר למכשיר חכם.

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

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

תהפכו את הלחצן ותסתכלו בגב שלו. יש שם קו אופקי קטן. שתי הרגליים שבמקביל לקו — הן המחוברות זו לזו כל הזמן.
⚠️ זאת הטעות מספר אחת בשיעור הזה. אם תחברו חוט לשתי רגליים שכבר מחוברות, המעגל יהיה סגור תמיד והלחיצה לא תשנה כלום. תמיד תחברו את החוטים באלכסון — או לשתי רגליים שהן מאונכות לקו.
נגד משיכה — למה הוא חייב להיות שם
ועכשיו נקודה שנשמעת מוזרה אבל חשובה מאוד.
מה קורה כשהלחצן לא לחוץ? המעגל פתוח, והפין של הלוח לא מחובר לשום דבר. הוא מרחף באוויר.
ופין שמרחף באוויר קולט רעשים חשמליים מהסביבה ומשתנה לבד — פעם 1, פעם 0, בלי שאף אחד נגע בו. הלוח יחשוב שלוחצים על הכפתור אלף פעמים בשנייה.
הפתרון נקרא נגד משיכה (באנגלית pull-up), והוא פשוט:

מחברים את הפין למתח הגבוה (5V) דרך נגד גדול של 10kΩ. עכשיו:
- כשהלחצן משוחרר: המעגל אל GND פתוח, כמעט שום זרם לא זורם, והנגד מושך את הפין למעלה. הלוח קורא 1.
- כשהלחצן לחוץ: נפתח מסלול ישיר מהפין אל GND. הזרם בוחר את הדרך הקלה, כל המתח נופל על הנגד, והפין יורד לאפס. הלוח קורא 0.
💡 שימו לב שזה הפוך ממה שהייתם מצפים: לחצן משוחרר נותן 1, ולחצן לחוץ נותן 0. תזכרו את זה — הרבה תוכניות בהמשך הקורס תלויות בזה.
ולמה דווקא 10kΩ? כי הוא צריך להיות גדול מספיק כדי שכשלוחצים לא יזרום דרכו זרם מיותר, אבל לא גדול מדי כדי שעדיין יצליח למשוך את הפין למעלה כשמשחררים. בערכה זה הנגד עם הטבעות חום־שחור־כתום.
החיבור
מה צריך: לוח ESP32, לוח ניסוי 400 נקודות, לחצן אחד, ונגד 10kΩ אחד.

שלב אחרי שלב:
- תקעו את הלחצן באמצע לוח הניסוי, כך שהוא יושב על החריץ שבמרכז. ככה כל רגל נמצאת בשורה נפרדת.
- חברו חוט מ-5V אל צד אחד של הנגד 10kΩ.
- חברו את הצד השני של הנגד לרגל אחת של הלחצן — ובאותה שורה חברו חוט אל פין IO5.
- מהרגל שבאלכסון מולה — חוט אל GND.
⚠️ שוב, החשוב מכול: החוטים חייבים להיות באלכסון. אם אחרי הצריבה המספר לא משתנה בכלל כשלוחצים — סובבו את הלחצן ב-90 מעלות ונסו שוב.
הבלוקים
בשיעור הזה שני בלוקים חדשים, ושניהם מהמגירה Robots.
הבלוק read digital pin

read digital pin [5] הוא הבלוק הראשון בקורס שקורא במקום לכתוב.
תסתכלו על הצורה שלו — היא שונה מכל מה שראינו עד היום. אין לו חריצים למעלה ולמטה, ולכן אי אפשר לחבר אליו בלוקים. במקום זה הוא נכנס לתוך תיבה של בלוק אחר, כמו קובייה שמתאימה לחור. בלוק כזה הוא לא פקודה — הוא תשובה.
התפריט בוחר את מספר הפין שרוצים לבדוק. התשובה תמיד אחד משניים:
- 1 — הפין במתח גבוה (3.3V או 5V). אצלנו: הלחצן משוחרר.
- 0 — הפין במתח נמוך (0V). אצלנו: הלחצן לחוץ.
הבלוק serial print

serial print [115200] [Hi] מדפיס מה שתשימו בתיבה שלו — אל הקונסולה, חלון שחור קטן בפינה הימנית התחתונה של ACECode.
זה אולי הבלוק הכי שימושי בכל הקורס, כי הוא העיניים שלכם לתוך הלוח. עד עכשיו ראינו רק מה שהנורית עשתה. עכשיו נוכל לראות מספרים אמיתיים.
התפריט הראשון (115200) הוא מהירות התקשורת בין הלוח למחשב. אל תשנו אותו — הלוח והמחשב חייבים לדבר באותה מהירות, בדיוק כמו שני אנשים שחייבים לדבר באותה שפה.
התיבה השנייה היא מה שיודפס. אפשר לכתוב שם טקסט — או, וזה הרעיון:
מחברים את השניים
וכאן קורה הקסם. לוקחים את הבלוק הקורא:

ואת הבלוק המדפיס:

וגוררים את הראשון לתוך התיבה של השני. הם נתפסים זה בזה כמו שתי חתיכות פאזל:

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

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

התוכנית משתמשת גם במשתנה, כמו שלמדנו בשיעור האור הנושם. הפעם הוא נקרא ButtonState (מצב הלחצן):
- set [ButtonState] to [read digital pin [5]] — קורא את הפין ושם את התשובה בקופסה.
- serial print [115200] [ButtonState] — מדפיס את מה שיש בקופסה.
- forever מחזיר להתחלה, וזה קורה שוב ושוב, מאות פעמים בשנייה.
למה בכלל להשתמש במשתנה? כי ככה קוראים את הפין פעם אחת ואחר כך אפשר להשתמש בתשובה כמה פעמים שרוצים — להדפיס אותה, להשוות אותה, לעשות איתה מה שרוצים. זה הרגל טוב שיעזור לכם בשיעורים הבאים.
מריצים
⬇ להורדת הקובץ Button.sb3 — גוררים אותו לתוך ACECode ולוחצים Upload.
עוברים ל-Upload mode, בוחרים ESP32, בוחרים את הפורט הנכון ולוחצים Upload. מחכים שהמונה יגיע ל-100%.
ההסבר המלא על צריבה נמצא בשיעור ההתקנה.

מה אמור לקרות
תסתכלו על הקונסולה. כשהלחצן משוחרר תראו שורות של 1 רצות למטה:

ועכשיו תלחצו על הלחצן והחזיקו. המספר מתחלף ל-0:

תשחררו — וחוזרים ה-1. זה הרגע שבו הלוח באמת מרגיש אתכם.
לא עובד?
- המספר לא משתנה בכלל — כמעט בוודאות חיברתם לשתי רגליים שמחוברות מראש. סובבו את הלחצן ב-90 מעלות.
- המספר קופץ בין 1 ל-0 לבד — הנגד לא מחובר נכון, או שהצד שלו לא מגיע ל-5V.
- הקונסולה ריקה — בדקו שהלוח באמת מחובר ושבחרתם את הפורט הנכון.
- מופיעים סימנים מוזרים — מהירות התקשורת לא תואמת. ודאו ש-115200 מופיע גם בבלוק וגם בהגדרות הקונסולה.
מה קרה כאן
הלוח עושה שלושה דברים בלולאה אינסופית: קורא את הפין, שומר את התשובה במשתנה, מדפיס אותה.
וזה בדיוק המבנה של כל מכשיר חכם בעולם: קלט ← עיבוד ← פלט. הלחצן הוא הקלט. המשתנה הוא העיבוד. הקונסולה היא הפלט.
בשיעורים הבאים הקלט יתחלף — חיישן תנועה, חיישן אור, מד טמפרטורה — אבל השלד יישאר בדיוק אותו שלד. וגם הבלוק serial print יישאר איתכם לתמיד, כי הוא הדרך היחידה לראות מה באמת קורה בתוך הלוח כשמשהו לא עובד.
תרגילים
- טקסט במקום מספר. הוציאו את read digital pin מהתיבה של serial print וכתבו שם במקומו את המילה Hello. תצרבו ותראו מה קורה בקונסולה.
- להאט את הזרם. הוסיפו בלוק wait [0.3] seconds בתוך ה-forever, אחרי ההדפסה. עכשיו השורות יופיעו לאט ותוכלו לקרוא אותן בנוחות.
- פין אחר. העבירו את החוט מ-IO5 לפין IO18, ושנו את התפריט של read digital pin ל-18. התוכנית צריכה להתנהג בדיוק אותו דבר.
- אתגר: ספירת לחיצות. צרו משתנה בשם count, והשתמשו בבלוק change [count] by [1] כדי להגדיל אותו כשהלחצן לחוץ. הדפיסו את count במקום את מצב הלחצן. מה מפריע לתוצאה, ואיך אפשר לתקן את זה בעזרת בלוק wait?


