Interrupts وقفه
وقفه اتفاق افتادن یک رویداد در جریان انجام کاری است. مثل اینکه شما مشغول کاری باشید و تلفن شما زنگ بخورد، جدا از اینکه شما آن تماس را جواب میدهید یا نه. بعضی مواقع هست که تماسی برای شما اهمیت دارد و منتظر تماس مهمی هستید. وقتی مشغول کار هستید و تلفن شما زنگ می خورد شما تماس را جواب میدهید و دوباره به ادامهکار خود مشغول میشوید. دقیقا همین اتفاق در میکرو هم میافتد. در اینجا ما وقفه روی پینها را بررسی میکنیم که اصطلاحا وقفهی خارجی گفته میشود. میکرو مشغول انجام برنامه است ولی میخواهیم اگر تغییری روی یکی از پینها اتفاق افتاد در کمترین زمان به آن رسیدگی شود و دوباره به انجام ادامهی برنامه برگردد.
NodeMCU که بر پایهی چیپ ESP8266 است دارای این ویژگی روی پایههای خود میباشد. بر روی کیت NodeMCU از پایه D1 الی D8 این امکان وجود دارد. وقفه برای تمام پایه ها بغیر از پایه D0 یا GPIO16 کار میکند.
توابعی که در آردوینو برای وقفهی خارجی است برای NodeMCU هم کار میکنند. attachInterrupt, detachInterrupt.
شرح توابع وقفه
()attachInterrupt
این تابع برای پیکربندی کردن یک وقفه بر روی یک پین به کار میرود.
attachInterrupt(pin, ISR(callback function), interrupt type/mode);
- pin شمارهی پایهای است که میخواهیم وقفه روی آن اعمال شود.
- ISR که اختصار Interrupt Routine Service است، تابعی است که وقفی وقفه اتفاق افتاد میخواهیم انجام شود. این تابع نه پارامتری میگیرد و نه چیزی برمیگرداند.
- inerrupt type/mode برای تنظیم نوع وقفه بکار میرود.
- CHANGE برای وقتی است که میخواهیم با تغییر ولتاژ وقفه رخ بدهد.
- RISING وقتی ولتاژ روی پایه از LOW به HIGH تغغیر کند وقفه رخ میدهد.
- FALLING وقتی ولتاژ روی پایه از HIGH به LOW تغییر کند وقفه رخ میدهد.
()detachInterrupt
این فانکشن برای بی اثر کردن وقفه بکار میرود.
detachInterrupt(pin);
که فقط هم شمارهی پایه را میگیرد.
تنها کاری که میکند چک کردن کوچکتر بودن شمارهی داده شده از 16 میباشد. پس شکل کلی تابع راهانداز به صورت زیر میشود.
attachInterrupt(digitalPinToInterrupt(D2), IntCallback, RISING);
سلام