pulseIn – הסבר ופרטים

- עמוד זה הוא חלק מהמדריך לפונקציות ארדואינו -

הפונקציה pulseIn(pin, state[, timeout]) מודדת אורך של “פולס” (Pulse) יחיד של מתח חשמלי. כלומר, היא מחזירה את משך הזמן, במיליוניות שנייה, שעבר בין שינוי מתח ספציפי (מ-LOW ל-HIGH או מ-HIGH ל-LOW) בפין מסוים, לבין שינוי המתח בכיוון ההפוך.

בניגוד לפונקציה pulseInLong, כאן מדידת משך הפולס נעשית על סמך מספר החזרות של לולאה שרצה בקוד הראשי. לכן, התוצאה רגישה להפרעות מצד פסיקות, כולל פסיקות מדידת הזמן של millis ו-micros, וההפרעה תהיה גדולה יותר (התוצאה תהיה קטנה יותר ממשך הזמן האמתי) ככל שמשך הזמן יתארך.

פרמטרים

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

state, גם כן מטיפוס uint8_t, מייצג את מתח הפולס הרצוי. הערכים הרלוונטיים לפרמטר זה הם הקבועים LOW או HIGH. למידע נוסף על משמעותם בהקשר זה, עיינו בתיעוד של הפונקציה digitalRead.

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

ערך חוזר

משך הפולס שנמדד, ביחידות של מיליוניות השנייה. אם לא הושלם פולס במשך זמן ה-timeout, יוחזר המספר 0. ערך זה מוחזר כמשתנה מטיפוס unsigned long.

דוגמאות

uint32_t us_limited_1ms, us_unlimited;
us_limited_1ms = pulseIn(6, HIGH, 1000);
us_unlimited = pulseIn(6, LOW);

הערות

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

קישורים רלוונטיים

בלוג אישי בנושאי מייקינג, תכנות, מיקרו-בקרים ואלקטרוניקה