דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. מה מפעיל סקריפט py זה שוב ושוב.

מה מפעיל סקריפט py זה שוב ושוב.

מתוזמן נעוץ נעול הועבר תכנות
6 פוסטים 3 כותבים 223 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • יצירהי מנותק
    יצירהי מנותק
    יצירה
    כתב ב נערך לאחרונה על ידי
    #1

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

    from pad4pi import rpi_gpio
    
    KEYPAD = [
                [1,2,3,"A"],
                [4,5,6,"B"],
                [7,8,9,"C"],
                ["*",0,"#","D"]
            ]
    ROW_PINS = [26, 21, 20, 16] # BCM numbering
    COL_PINS = [6, 5, 0,12] # BCM numbering
    
    factory = rpi_gpio.KeypadFactory()
    
    
    # Try factory.create_4_by_3_keypad
    # and factory.create_4_by_4_keypad for reasonable defaults
    keypad = factory.create_keypad(keypad=KEYPAD, row_pins=ROW_PINS, col_pins=COL_PINS)
    
    def printKey(key):
       
        print(key)
    
            
        
    
    # printKey will be called each time a keypad button is pressed
    !וזה מה שחשוב לי לשלוט עליו.תודה
    keypad.registerKeyPressHandler(printKey)
    
    yossizY chvC 2 תגובות תגובה אחרונה
    0
    • yossizY מנותק
      yossizY מנותק
      yossiz
      השיב ליצירה ב נערך לאחרונה על ידי
      #2

      @יצירה השאלה לא כל כך ברורה. אם הבנתי נכון, אתה רוצה שבקיום תנאי מסויים אתה רוצה להפסיק את הקריאה ל-printKey על כל לחיצה?

      אם כן, בקיום התנאי תקרא לפונקציית unregisterKeyPressHandler.

      if condition:
          keypad.unregisterKeyPressHandler(printKey)
      

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      יצירהי תגובה 1 תגובה אחרונה
      5
      • יצירהי מנותק
        יצירהי מנותק
        יצירה
        השיב לyossiz ב נערך לאחרונה על ידי יצירה
        #3

        @yossiz , אסביר: כוונתי היא לנסות להבין מה גורם לַפעולה לקרות שוב ושוב.
        בד"כ, כדי שפעולה תחזור ע"ע, משתמש בלולאה.
        ואילו כאן שורה 28 כל הזמן פועלת בלי לולאה שוב ושוב.
        וזה אני מנסה להבין איך זה עובד, מי קורא לה כל פעם מחדש.
        וגם נפק"מ:

        1. לסגור אותה. (בתחילה הוספתי בספריה בשורה 110 sys.exit() אך זה לא מוצלח)
        2. לקבל ערכים ממנה. עכשיו חייב להשתמש ב global כדי לקבל ערכים..)
          תודה רבה.
        תגובה 1 תגובה אחרונה
        0
        • chvC מנותק
          chvC מנותק
          chv
          השיב ליצירה ב נערך לאחרונה על ידי
          #4

          @יצירה:

          אנסה להסביר בלשוני הקלושה בפייתון (אני דיי ג׳וניור בפייתון)
          בשורה 17 אתה יוצר אובייקט חדש עם השם (או ׳מצביע׳ או ׳לינק׳ או ווטאבר) keypad מה שאתה מאחסן בתוכו זה אובייקט חדש שנוצר על פי הקלאס שבשורה הזו בספרייה

          ומה שקורה בשורה 28 בקוד שלך זה רישום של handler חדש לאובייקט הזה. כלומר ביתר ביאור: לקלאס keypad יש בתוך self מערך שנקרא handlers - כאשר כל מה שנמצא שם ירוץ במקרה ו-- רגע עוד שניה.

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

          אם תסתכל בקוד - תראה שכחלק מהלוגיקה - הוא בודק אם self._handlers מכיל משהו - ואם כן הוא בעצם מריץ את מה שיש שם במערך (בלולאה, כי יכול להיות שם כמה) עם הערך של הכפתור שנלחץ. שורה 111 בספריה

          עד עכשיו בלבלתי את השכל, עכשיו בנוגע לשאלה שלך מה גורם לזה לרוץ כל הזמן והרי לא רואים ׳לולאה׳? זה כאן - פשוט קורא לGPIO - ספריית עזר לקריאה מהרספברי עד כמה שאני מבין - שנותנת את הפונקציה add_event_detect - שמאזינה לאינפוטים מסוימים. במקרה שלנו הפרמטר שמעבירים לה בין השאר הוא GPIO.FALLING שכפי שרואים כאן משמש לקליטת לחיצה (יש הבדל בין לחיצה לעזיבת הכפתור ואולי גם יש עוד סטייטים) על כפתור..
          הספרייה הנ״ל מותקנת כחלק מה-setup של הספרייה pad4pi

          אז בנוגע לשאלות שכתבת בסוף:

          1. לסגור אותה - אתה יכול להריץ משהו שיסיר את המאזין הזה. כמו שמתואר בסוף הדוקומנטציה כאן - אתה יכול לכתוב GPIO.remove_event_detect(channel) בתוך channel תכתוב את הערוץ שאתה רוצה להסיר. נגיד כנראה זה יעבוד - GPIO.remove_event_detect(GPIO.FALLING) (אם כי ייתכןמאוד שלא, וצריך להגדיר את channel בצורה אחרת)
          2. לקבל ערכים ממנה - הכי פשוט שתוסיף פונקציה בתור handler שהרי ה-handlers מקבלים את הערכים שנלחצו.

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

          בלוג | מייל

          יצירהי תגובה 1 תגובה אחרונה
          4
          • יצירהי מנותק
            יצירהי מנותק
            יצירה
            השיב לchv ב נערך לאחרונה על ידי
            #5

            @chv אמר במה מפעיל סקריפט py זה שוב ושוב.:

            עכשיו בנוגע לשאלה שלך מה גורם לזה לרוץ כל הזמן והרי לא רואים ׳לולאה׳? זה כאן - פשוט קורא לGPIO
            וגו'

            תודה רבה מאוד!. אני עדיין מנסה להבין מה קורה בזמן הריצה:

            1. וודאי שלא עובר על כל השורות מתחילה כל פעם.
            2. וודאי שלא ממתין שם [בשורה 28] כי אחרי ש
            keypad.registerKeyPressHandler(printKey)
            

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

            yossizY תגובה 1 תגובה אחרונה
            0
            • yossizY מנותק
              yossizY מנותק
              yossiz
              השיב ליצירה ב נערך לאחרונה על ידי
              #6

              @יצירה עכשיו הבנתי את השאלה שלך. באמת לא ברור מתוך הקוד איפה הלולאה.
              נראה לי שהתשובה היא שספריית GPIO (שהספרייה שאתה משתמש בה משתמשת בשירותיה) יוצרת ברקע thread חדש שמריצה לולאה אינסופית שמאזינה לאירועי לחיצות ומפעילה את ה-handler. (מקור, קוד המקור שמממש את זה).
              אני לא יודע מה ההתנהגות הרשמית של פייתון כאשר הסקריפט הסתיימה ויש עדיין thread שרצה ברקע. אבל נראה מכאן שהיא לא מסיימת את התהליך עד שה-thread ברקע מסתיים.
              נראה מתוך הקוד שקריאה לפונקציית cleanup מסיימת את הלולאה האינסופית ותאפשר לתהליך להסתיים.

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              תגובה 1 תגובה אחרונה
              3

              בא תתחבר לדף היומי!
              • התחברות

              • אין לך חשבון עדיין? הרשמה

              • התחברו או הירשמו כדי לחפש.
              • פוסט ראשון
                פוסט אחרון
              0
              • דף הבית
              • קטגוריות
              • פוסטים אחרונים
              • משתמשים
              • חיפוש
              • חוקי הפורום