פסיקות (Interrupts) בארדואינו הן מנגנון חשוב שמאפשר לתוכנית להגיב באופן מיידי לאירועים חיצוניים, מבלי להמתין ללולאה הראשית (loop()).
מה זה פסיקה (Interrupt)?
פסיקה היא מנגנון שמפסיק את ריצת הקוד הרגיל של התוכנית ומעביר את השליטה לפונקציה מוגדרת מראש ברגע שמתרחש אירוע מסוים. לאחר שהפסיקה הסתיימה, הקוד הראשי ממשיך לרוץ מהמקום שבו הפסיק.
למה צריך פסיקות?
ללא פסיקות, הקוד צריך לבדוק כל הזמן האם אירוע מסוים קרה (למשל, לחיצה על כפתור). זה יכול להוביל לבזבוז זמן אם התוכנית עסוקה בפעולות אחרות. בעזרת פסיקות, האירוע יטופל רק כאשר הוא מתרחש, מה שמשפר את היעילות ואת מהירות התגובה של המערכת.
כיצד משתמשים בפסיקות בארדואינו?
בארדואינו, הפונקציה attachInterrupt() מאפשרת להגדיר פסיקות על פינים מסוימים. המבנה שלה הוא:
attachInterrupt(digitalPinToInterrupt(pin), function, mode);
pin – מספר הפין שעליו תתבצע הפסיקה.
function – הפונקציה שתופעל כאשר הפסיקה מתרחשת.
mode – התנאי שיפעיל את הפסיקה:
RISING – כשהפין עובר מ-LOW ל-HIGH
FALLING – כשהפין עובר מ-HIGH ל-LOW
CHANGE – כאשר יש שינוי במצב הפין
LOW – כל עוד הפין במצב LOW
דוגמה לקוד – הדלקת לד בלחיצה על כפתור (ללא עיכוב)
const int buttonPin = 2; // פין של הכפתור
const int ledPin = 13; // לד מובנה בארדואינו
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(buttonPin), toggleLED, FALLING);
}
void loop() {
// הלולאה הראשית רצה, אבל הפסיקה תופעל בלחיצה
}
void toggleLED() {
digitalWrite(ledPin, !digitalRead(ledPin)); // מחליף את מצב הלד
}
איך זה עובד?
ברגע שמתרחשת לחיצה (הכפתור מחובר ל-GND), הפסיקה מופעלת.
הפונקציה toggleLED() מתבצעת ומדליקה או מכבה את הלד.
מכיוון שהתוכנית לא משתמשת ב-delay(), הארדואינו ממשיך להריץ את שאר הקוד ללא השהיות.
חשוב לדעת על פסיקות
🔹 הפסיקות מתבצעות במהירות: יש להימנע משימוש בפונקציות כבדות בתוך פונקציית הפסיקה, כמו delay() או Serial.print().
🔹 לא כל הפינים תומכים בפסיקות: בארדואינו Uno, הפסיקות זמינות רק על פינים 2 ו-3. בארדואינו אחרים, מספר הפינים הזמינים לפסיקות משתנה.
🔹 ניתן להפסיק פסיקה זמנית: עם detachInterrupt(pin) ניתן לבטל פסיקה אם צריך.
שימושים נפוצים לפסיקות
✅ מדידת מהירות גלגלים (Encoders)
✅ זיהוי לחיצה על כפתור בזמן אמת
✅ טיפול באותות חיישנים רגישים לזמן
✅ תגובה לשינויים במתח או זרם חשמלי
לקריאה נוספת:
https://www.idogendel.com/whitebyte/arduinohebwiki/attachinterrupt
https://www.idogendel.com/whitebyte/archives/250
🔗 Arduino Official Interrupts Guide
🔗 Arduino Playground - Interrupts
🚀 בהצלחה בתכנות!