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

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

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

פרמטרים

interruptNum, משתנה מטיפוס uint8_t, מציין את מספר הפסיקה החיצונית. בלוחות הארדואינו הבסיסיים (שמבוססים על המיקרו-בקר ATmega328P), האפשרויות הן 0 (הפסיקה החיצונית של פין 2) או 1 (של פין 3). בלוחות אחרים, יש לבדוק את המפרט הספציפי.

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

mode, משתנה מטיפוס int, מציין את סוג הפסיקה החיצונית שתגרום להרצת הפונקציה userFunc. האפשרויות החוקיות עבור הפרמטר mode מוגדרות על ידי הקבועים LOW (מתח LOW בפין הפסיקה), CHANGE (שינוי דיגיטלי במתח פין הפסיקה), RISING (עליה ממתח LOW ל-HIGH) או FALLING (ירידה ממתח HIGH ל-LOW).

ערך חוזר

אין

דוגמאות

void myFunction() {
  // Some code here...
}

attachInterrupt(0, myFunction, RISING);

הערות

  • אם הערך הנשלח בפרמטר interruptNum אינו חוקי, לא יקרה דבר.
  • קוד המקור בספריות הליבה של ארדואינו אינו בודק את תקינות הערך הנשלח בפרמטר mode. אם ערך זה אינו אחד מהקבועים שצוינו (במילים אחרות, אינו בין 0 ל-3), תנאי ההפעלה של הפסיקות החיצוניות עלולים להשתבש.
  • בניגוד לפונקציות רגילות, הפעלה של פונקציית פסיקה (או של פונקציה רגילה מתוך פונקציית פסיקה, כפי שקורה כאן למעשה מאחורי הקלעים) מחייבת זהירות רבה, כיוון שבזמן הריצה שלה, פסיקות אחרות – כגון פסיקות טיימרים, תקשורת וכו' – מתעכבות.
  • יש לנקוט זהירות רבה במיוחד בשימוש בערך LOW לפרמטר mode. במקרה כזה, כל עוד המתח על פין הקלט הרלוונטי הוא LOW, פונקציית הפסיקה תרוץ שוב ושוב ללא הפסקה!
  • השימוש בפונקציה attachInterrupt אינו מגדיר אוטומטית את הפין הרלוונטי כפין קלט.

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

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