ארדואינו מפריע להדרכה

Arduino Interrupts Tutorial

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


מה תצטרך

  1. Arduino uno (או לוח תואם)
  2. לחצן לחיצה
  3. נגד 10K-OHM (לתצורה נשלפת)
  4. LED ו- 220-OHM נגד (אופציונלי)
  5. חוטי לחם וגשר
  6. Arduino IDE המותקן במחשב שלך

שלב 1: מהן הפרעות?

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

סוגי הפרעות בארדואינו

  1. הפרעות חיצוניות: מופעל על ידי אירועים על סיכות ספציפיות (למשל, סיכה 2 או 3 על Arduino Uno).
  2. הפסקות שינוי סיכה: מופעל על ידי שינוי בכל סיכה דיגיטלית.
  3. טיימר קוטע: מופעל על ידי הצפת טיימר או השוואה בין התאמות.

שלב 2: שימוש בהפרעות חיצוניות

ה- Arduino UNO תומך בהפרעות חיצוניות על סיכות 2 ו -3. באפשרותך להגדיר את ההפרעות הללו כדי להפעיל:

  • עוֹלֶה: האות עובר מנמוך לגובה.
  • נְפִילָה: האות עובר מגובה לנמוך.
  • לְשַׁנוֹת: האות משנה את המצב (נמוך עד גבוה או גבוה עד נמוך).
  • נָמוּך: האות נשאר נמוך.

קוד דוגמה: איתור לחצן לחץ

דוגמה זו מחליף LED כאשר לחיצה על כפתור המחובר ל- PIN 2.

#define buttonPin 2 // Interrupt pin
#define ledPin 13   // Built-in LED

volatile bool ledState = false; // Shared variable between ISR and main code

void handleInterrupt() {
  ledState = !ledState; // Toggle LED state
  digitalWrite(ledPin, ledState);
}

void setup() {
  pinMode(buttonPin, INPUT_PULLUP); // Enable internal pull-up resistor
  pinMode(ledPin, OUTPUT);

  attachInterrupt(digitalPinToInterrupt(buttonPin), handleInterrupt, FALLING); // Trigger on button press
}

void loop() {
  // Main loop does nothing; interrupt handles the LED
}

הֶסבֵּר

  • attachInterrupt(digitalPinToInterrupt(pin), ISR, mode): מגדיר את ההפרעה.
    • pin: סיכת ההפרעה (למשל, סיכה 2 או 3 על Arduino uno).
    • ISR: שגרת שירות ההפרעה לביצוע.
    • mode: מצב ההפעלה (RISING, FALLING, CHANGE, או LOW).
  • digitalPinToInterrupt(pin): ממיר מספר סיכה למספר ההפרעה שלו.

שלב 3: שימוש בהפרעות שינוי סיכות

הפרעות שינוי סיכות מאפשרות לך לאתר שינויים בכל סיכה דיגיטלית. זה דורש ספריות נוספות, כגון EnableInterrupt.

קוד דוגמה: הפסקת שינוי סיכה

#include <EnableInterrupt.h>
#define pin 4 // Pin to monitor

void handlePinChange() {
  Serial.println("Pin state changed!");
}

void setup() {
  Serial.begin(9600);
  enableInterrupt(pin, handlePinChange, CHANGE); // Trigger on any state change
}

void loop() {
  // Main loop does nothing; interrupt handles the event
}

התקנת ספריה

כדי להשתמש בהפרעות שינוי סיכות, התקן את EnableInterrupt ספרייה דרך מנהל הספרייה של ארדואינו.


שלב 4: הפרעות טיימר

הפרעות טיימר מועילות לתזמון משימות במרווחים מדויקים. עיין ב הדרכה לטיימר ארדואינו לפרטים על קביעת תצורת הפרעות טיימר.

דוגמה: מהבהב נורית LED עם הפרעה של Timer1

#define ledPin 13

void setup() {
  pinMode(ledPin, OUTPUT);

  // Configure Timer1
  noInterrupts(); // Disable interrupts during setup
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;

  OCR1A = 15624; // Compare match value for 1Hz (1-second interval)
  TCCR1B |= (1 << WGM12); // CTC mode
  TCCR1B |= (1 << CS12) | (1 << CS10); // 1024 prescaler
  TIMSK1 |= (1 << OCIE1A); // Enable Timer1 compare interrupt

  interrupts(); // Enable interrupts
}

ISR(TIMER1_COMPA_vect) {
  digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle LED
}

void loop() {
  // Main loop does nothing; Timer1 handles the LED
}

שלב 5: שיטות עבודה מומלצות לשימוש בהפרעות

  1. שמור על ISRS קצר: הימנע מעיכובים או חישובים מורכבים ב- ISR כדי להבטיח תגובה מהירה.
  2. הימנע מתקשורת סדרתית ב- ISRS: פונקציות סדרתיות עשויות שלא לעבוד באופן אמין בתוך ISR.
  3. לְהִשְׁתַמֵשׁ volatile למשתנים משותפים: סימון משתנים המשותפים בין ISRS לתוכנית הראשית כ- AS volatile כדי למנוע בעיות אופטימיזציה של המהדר.
  4. כניסות DebUnce: טפל בהיגיון DebUnce בתוכנה או בחומרה עבור אותות רועשים כמו לחיצות על כפתור.
  5. השבת הפרעות במהלך קטעים קריטיים: לְהִשְׁתַמֵשׁ noInterrupts() וכן interrupts() להגנה על קטעי קוד קריטיים.

יישומי הפרעות

  1. לחיצות על כפתור הטיפול ללא סקירה
  2. קריאת מקודדים רוטרי
  3. תזמון אירועים קריטיים (למשל, בקרה מוטורית מדויקת)
  4. תזמון משימות תקופתיות
  5. תגובה לאותות חיצוניים (למשל, חיישנים, אירועי תקשורת)

פתרון בעיות

  • להפריע לא להפעיל: ודא שהסיכה והמצב הנכונים מוגדרים.
  • התנהגות לא יציבה: חבל אותות רועשים ונמנע מ- ISR ארוכים.
  • עימותים עם ספריות: ספריות מסוימות משתמשות בהפרעות באופן פנימי (למשל, סרוו, PWM). להבטיח שום התנגשות עם הקוד שלך.

מַסְקָנָה

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

השאירו תגובה

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.