آموزش آردوینودستورات آردوینو

آموزش وقفه ها در آردوینو (دستور attachInterrupt)

اولین پارامتر دستور ()attachInterrupt عدد وقفه است. به طور معمول برای اختصاص دادن پین دیجیتال به یک وقفه، باید از  digitalPinToInterrupt(pin)استفاده کنید. به عنوان مثال، اگر میخواهید از پین 3 به عنوان وقفه استفاده کنید، باید دستور را به شکل  digitalPinToInterrupt(3) بنویسید. و این عدد را به عنوان اولین پارامتر در دستور attachInterrupt استفاده کنید.

جدول زیر پین های دیجیتال وقفه در برد های مختلف آردوینو را نشان میدهد.

برد پین دیجیتال وقفه

Uno, Nano, Mini, other 328-based

2, 3

Uno WiFi Rev.2, Nano Every

تمام پین های دیجیتالی

Mega, Mega2560, MegaADK

2, 3, 18, 19, 20, 21

Micro, Leonardo, other 32u4-based

0, 1, 2, 3, 7

Zero

تمام پین های دیجیتالی به جز 4

MKR Family boards

0, 1, 4, 5, 6, 7, 8, 9, A1, A2

Nano 33 IoT

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

2, 3, 9, 10, 11, 13, 15, A5, A7

Nano 33 BLE, Nano 33 BLE Sense

تمام پین ها

Due

تمام پین های دیجیتالی

101

تمام پین های دیجیتالی (پین های 2, 5, 7, 8, 10, 11, 12, 13 فقط با CHANGE کار میکند)

هشدار:

در هنگام استفاده از وقفه ها، دستور delay کار نمیکند و همچنین تابع millis نیز شمارش را انجام نمیدهد. برای متغیر های درون وقفه باید از کلید واژه volatile استفاده کنید.

دستور attachInterrupt

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) (پیشنهاد شده)
attachInterrupt(interrupt, ISR, mode) (پیشنهاد نشده)

  • interrupt: شماره وقفه
  • pin: پین مورد استفاده برای وقفه
  • ISR: در زمان رخ دادن وقفه، ISR فراخوانی میشود.
  • mode: حالتی که در آن وقفه رخ میدهد. موارد زیر را میتوانید به جای mode قرار دهید.
  • LOW: هر زمان که پین وقفه پایین باشد.
  • CHANGE: هر زمان که پین وقفه پایین یا بالا شود (تغییر کند)
  • RISING: هر زمان که پین وقفه از پایین به بالا برود.
  • FALLING: هر زمان که پین وقفه از بالا به پایین برود.

برد های The Due، Zero و MKR1000 از حالت زیر نیز پشتیبانی میکنند.

  • HIGH: هر زمان پین وقفه بالا باشد.

این دستور چه چیزی را بر میگرداند؟

هیچ چیز

نمونه کد با تابع attachInterrupt

با کد زیر هر بار که دکمه فشرده شود ال ای دی روشن میشود و با رها کردن دکمه ال ای دی خاموش میشود.

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
  digitalWrite(ledPin, state);
}

void blink() {
  state = !state;
}

شماره وقفه ها

به طور معمول شما باید از digitalPinToInterrupt(pin) استفاده کنید ، نه اینکه یک عدد وقفه را مستقیماً در کد خود قرار دهید. جدول زیر پین های وقفه موجود را در صفحه های مختلف نشان می دهد.

توجه داشته باشید که در جدول زیر ، اعداد وقفه به عددی که باید به attachInterrupt() ارسال شود ، اشاره دارند. به دلایل تاریخی ، این شماره همیشه به طور مستقیم با شماره گذاری وقفه در تراشه ATmega مطابقت ندارد (به عنوان مثال int.0 مربوط به INT4 در تراشه ATmega2560 است).

برد INT.0 INT.1 INT.2 INT.3 INT.4 INT.5

Uno, Ethernet

2

3

Mega2560

2

3

21

20

19

18

32u4 based (e.g Leonardo, Micro)

3

2

0

1

7

برای برد های Uno WiFiRev.2 ، Due ، Zero ، MKR Family و 101 تعداد وقفه مساوی با شماره پین است.

دستورات مرتبط

4.2 (4 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

2 نظر

    1. سلام عزیز
      خوشحالم که براتون مفید واقع شده

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *