שיעור 8

כפתור זינוק

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

זו התוצאה הסופית של מה שנעשה בשיעור:

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

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

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

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

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

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

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

אנחנו נשתמש באותו העיקרון שחזר על עצמו בכל הדוגמאות למעלה, קבלת מידע מחיישן ותגובה.
נתכנת את ארדואינו לקבל מידע מהכפתור ולהגיב ללחיצה (התגובה תהיה – להפעיל את הקוד של הזינוק).

 

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

אנחנו נלמד לקבל נתונים על מצב הכפתור (האם הוא לחוץ או לא?) ונגיב בהתאם, אם הוא לחוץ נשמיע צליל על ידי שימוש בזמזם.

שלב 1: ניתוק הקוד


נתקו את הקוד מהבלוק הראשון כפי שמוצג בסרטון:
 
 

הניתוק הזה יגרום לכך שהקוד שלנו לא יתבצע (בלוקים מנותקים לא מתבצעים) אבל הקוד ישמר בצד ונוכל לחזור להשתמש בו בהמשך. אנחנו עושים את זה על מנת לתכנת את הכפתור בנפרד מבלי לשלב אותו (בנתיים) בקוד המלא שלנו.

שלב 2: הוספת בלוק תנאי  

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

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

גררו את הבלוק "אם – אז" שנמצא תחת תפריט "שליטה" כפי שמוצג בסרטון:

 

שלב 3: הגדרת התנאי

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

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

איך ארדואינו ידע אם הכפתור נלחץ?
כמו שאמרנו כפתור  הוא חיישן והוא מחובר לשן של ארדואינו (שן 14 במקרה שלנו) , חיישנים משדרים ערכים לארדואינו, כאשר כפתור נלחץ הוא משדר לארדואינו את הערך "1", כלומר ארדואינו מרגיש  ערך "1" בשן מספר 14, כשהכפתור לא לחוץ ארדואינו מרגיש ערך "0" בשן 14.

מה שאנחנו רוצים להגיד לארדואינו זה בעצם: אם אתה מרגיש ערך "1" בשן 14 הפעל זמזם.

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

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

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

שלב 4: הפעלת הזמזם

אנחנו רוצים להפעיל את הזמזם רק במקרה שהתנאי מתקיים (הכפתור נלחץ) ולכן נגרור את הבלוק של הזמזם אל המקום המיועד לכך בתוך הבלוק של התנאי.

שנו את הקוד על פי הסרטון:

שלב 5: בדיקה

העלו את הקוד.

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

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

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

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

שלב 6: שיפור הקוד

אנחנו רוצים שארדואינו ימשיך לבדוק כל הזמן האם הכפתור לחוץ או לא ולא רק שהוא עולה/ נדלק.
איך עושים את זה?

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

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

העלו את הקוד, התוצאה שאתם אמורים לקבל מוצגת בסרטון הבא:

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

יש לנו לולאה שגורמת לכל הקוד שנמצא בתוכה לחזור על עצמו תמיד (עד שנכבה או נעשה ריסטרט לארדאוינו).
בתוך הלולאה הזו יש לנו בלוק תנאי, שבודק האם הערך שארדואינו מרגיש בשן 14 הוא "1" , אם כן הזמזם מופעל.

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

שלב 7: שילוב הכפתור בקוד שלנו

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

 

העלו את הקוד, התוצאה שאתם אמורים לקבל מוצגת בסרטון הבא:

שלב 8: תיקון באג

יש לנו באג קטן בקוד (כלומר הקוד שלנו לא עובד בדיוק כמו שתכננו).

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

נבצע שיפור פשוט לקוד על מנת לתקן את הבאג:

 

העלו את הקוד, התוצאה שאתם אמורים לקבל מוצגת בסרטון הבא:

ממשיכים!

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