אנסה להסביר בלשוני הקלושה בפייתון (אני דיי ג׳וניור בפייתון)
בשורה 17 אתה יוצר אובייקט חדש עם השם (או ׳מצביע׳ או ׳לינק׳ או ווטאבר) keypad מה שאתה מאחסן בתוכו זה אובייקט חדש שנוצר על פי הקלאס שבשורה הזו בספרייה
ומה שקורה בשורה 28 בקוד שלך זה רישום של handler חדש לאובייקט הזה. כלומר ביתר ביאור: לקלאס keypad
יש בתוך self
מערך שנקרא handlers
- כאשר כל מה שנמצא שם ירוץ במקרה ו-- רגע עוד שניה.
ברישום של אובייקט מקלאס keypad
מופעלת פונקציה שממתינה ללחיצות במקלדת, כל לחיצה במקלדת עוברת לוגיקה על ידי הפונקציה. שורה 104 בספריה
אם תסתכל בקוד - תראה שכחלק מהלוגיקה - הוא בודק אם self._handlers
מכיל משהו - ואם כן הוא בעצם מריץ את מה שיש שם במערך (בלולאה, כי יכול להיות שם כמה) עם הערך של הכפתור שנלחץ. שורה 111 בספריה
עד עכשיו בלבלתי את השכל, עכשיו בנוגע לשאלה שלך מה גורם לזה לרוץ כל הזמן והרי לא רואים ׳לולאה׳? זה כאן - פשוט קורא לGPIO - ספריית עזר לקריאה מהרספברי עד כמה שאני מבין - שנותנת את הפונקציה add_event_detect
- שמאזינה לאינפוטים מסוימים. במקרה שלנו הפרמטר שמעבירים לה בין השאר הוא GPIO.FALLING
שכפי שרואים כאן משמש לקליטת לחיצה (יש הבדל בין לחיצה לעזיבת הכפתור ואולי גם יש עוד סטייטים) על כפתור..
הספרייה הנ״ל מותקנת כחלק מה-setup של הספרייה pad4pi
אז בנוגע לשאלות שכתבת בסוף:
- לסגור אותה - אתה יכול להריץ משהו שיסיר את המאזין הזה. כמו שמתואר בסוף הדוקומנטציה כאן - אתה יכול לכתוב
GPIO.remove_event_detect(channel)
בתוךchannel
תכתוב את הערוץ שאתה רוצה להסיר. נגיד כנראה זה יעבוד -GPIO.remove_event_detect(GPIO.FALLING)
(אם כי ייתכןמאוד שלא, וצריך להגדיר אתchannel
בצורה אחרת) - לקבל ערכים ממנה - הכי פשוט שתוסיף פונקציה בתור handler שהרי ה-handlers מקבלים את הערכים שנלחצו.
הגיוני מאוד!! שבלבלתי את השכל, אז קח דבריי בערבון מוגבל