- ابزارآلات و آهنربا
-
ابزارآلات
- ابزار اندازه گیری (مولتیمتر، کولیس و . . .)
- ابزار سوراخکاری (مته، سه نظام، چهار نظام، پنج نظام و . . .)
- ابزار و تجهیزات کار (پیچ گوشتی، انبردست، سیمچین، پنس و . . .)
- برد بورد، فیبر خام و سوراخدار (فیبر مدار چاپی و PCB)
- پیچ و اسپیسر (پیچ و مهره رباتیک و اسپیسر پلاستیکی و فلزی)
- سیم و کابل (سیم افشان، فلت، باندی، کابل شارژ، پرینتر، و . . .)
- لحیمکاری (هویه، نوک هویه، پایه هویه، سیم لحیم، روغن لحیم و . . . )
- منبع تغذیه، باتری و جاباتری (باتری قلمی، نیم قلمی، کتابی و . . . )
-
ابزارآلات
- برد هوشمند
- پرینتر سه بعدی
- رباتیک و پروازی
- ماژول
- قطعات الکترونیک
- کیت الکترونیکی و انواع جعبه
- موتور
- اصناف مختلف
آموزش 0 تا 100 آردوینو؛ قسمت نهم
در قسمت نهم از سلسله مطالب آموزش صفر تا صد آردوینو در خدمت شما هستیم. در این مقاله میخواهیم در مورد وقفه ها در آردوینو صحبت کنیم؛ پس با ما همراه باشید.
وقفهها یا Interrupts به برخی کارهای مهم در پسزمینه اجازه می دهند تا اجرا شوند. وقفهها به طور پیش فرض فعال هستند حال آنکه برخی دستورات برای اجرا شدن به وقفههای غیرفعال نیاز دارند. البته توجه داشته باشید که غیرفعال کردن وقفهها ممکن است باعث قطع پروتکلهای ارتباطی، تغییر زمانبندی اجرای برنامه و حتی اجرا نشدن بخش خاصی از برنامه شود.
بگذارید با یک مثال ساده تر وقفه ها در آردوینو را توضیح دهیم: فرض کنید شما منتظر رسیدن اتوبوس هستید و هر چند ثانیه یک بار بررسی میکنید که آیا اتوبوس رسیده است یا خیر. این همان روشی است که به صورت پیشفرض در آردوینو استفاده میشود. مثلاً اگر بخواهیم Low بودن یک پایه را بررسی کنیم، آردوینو مدام سرکشی میکند تا ببیند آیا پایه Low شده است یا خیر. همین امر باعث میشود تا فعالیتها به تأخیر بیفتند و برد آردوینو نتواند به همه اعمال واکنش نشان دهد.
در این میان وقفهها مانند همان مثال اتوبوس هستند با این تفاوت که به جای بررسی دائمی برای رسیدن اتوبوس، شما با خیال راحت در ایستگاه مینشینید و زمانی که اتوبوس به ایستگاه رسید، شما متوجه آمدن آن میشوید. وقفهها نیز از همین روش استفاده میکنند و دیگر شلوغی در کار نیست.
وقفههای داخلی مانند تایمرها به طور پیشفرض فعال هستند و در پسزمینه کار میکنند. برای غیر فعال کردن آنها از دستور noInterrupts() استفاده میشود.
یک نمونه کد مربوط به وقفه ها در آردوینو
void setup() {}
void loop()
{
noInterrupts();
// کدهای حساس به زمان
interrupts();
// دیگر کدها
{
وقفه ها در آردوینو؛ وقفههای سختافزاری و خارجی
این وقفهها معمولاً به اینگونه هستند که یک سوئیچ به یک پایه مشخص شده متصل و با فشردن آن برنامه از حلقه اصلی خارج میشود و یک سری دستورات را اجرا میکند و پس از پایان به حلقه اصلی بازمیگردد.
پینهایی که توانایی عملکرد به صورت وقفه را دارند، در بردهای مختلف به صورت زیر میباشند:
پینهای دیجیتال قابل استفاده برای وقفه ها در آردوینو |
بوردهای آردوینو |
2 و 3 |
آردوینو Uno، آردوینو Nano، آردوینو Mini و سایر بردهای آردوینو خانواده 328 |
2، 3، 18، 19، 20 و 21 |
آردوینو Mega، آردوینو Mega2560 و آردوینو MegaADK |
0، 1، 2، 3 و 7 |
آردوینو Micro، آردوینو Leonardo و سایر بردهای آردوینو خانواده 32u4 |
همه پینهای دیجیتال به غیر از پین شماره 4 |
آردوینو Zero |
0، 1، 4، 5، 6، 7، 8، 9، 11 و 12 |
آردوینو MKR1000 Rev.1 |
همه پینهای دیجیتال |
آردوینو Due |
همه پینهای دیجیتال |
آردوینو 101 |
دستور فعالسازی وقفههای خارجی به صورت زیر است که در حلقه setup(); وارد میشود:
attachInterrupt(digitalPinToInterrupt(pin)); ISR, mode
توضیحات و حالتهای وقفه ها در آردوینو
1) digitalPinToInterrupt: این دستور پین مربوط به وقفهها را از دیگر پینهای دیجیتال متمایز میکند.
2) Pin: شماره پین وقفه را مشخص میکند.
3) ISR: بیانگر نام تابعی است که در هنگام وقوع وقفه فعال خواهد شد.
4) Mode: بیانگر نوع فعالساز وقفه میباشد که 5 حالت دارد:
- Low: هرگاه پین Low شود، وقفه فعال میگردد.
- High: وقفه در حالت High فعال میشود (فقط در بردهای آردوینو Zero، آردوینو Due و آردوینو MKR1000)
- Change: هرگاه وضعیت پین عوض شود، وقفه فعال میشود.
- هرگاه پین از حالت Low به High تغییر کند، فعال میشود.
- Falling: هرگاه پین از حالت High به Low تغییر کند، فعال میشود.
مثال:
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;
}
تابعی که در وقفه فعال میشود ()Blink است که در آن با هر بار فشردن سوئیچ پایه 13 تغییر حالت میدهد.
وقتی بخواهیم پین وقفه را رها کنیم تا بتوان از آن استفاده عادی کرد، دستور زیر را وارد میکنیم. این دستور به معنای آن است که پایه آزاد شده است و میتوانید از آن برای کارهای دیگر استفاده کنید:
Detachinterrupt(digitalPinToInterrupt(Pin));