GPIO Interrupt

ESP8266 GPIO Interrupts

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);

که فقط هم شماره‌ی پایه را می‌گیرد.

 

نکته: تابع دیگری هم داریم به اسم digitalPinToInterrupt که معمولا برای چک کردن شماره‌ی پین استفاده می‌شود. تا یک وقت شماره‌ی اشتباهی به عنوان ورودی به تابع attachInterrupt  داده نشود.

تنها کاری که می‌کند چک کردن کوچکتر بودن شماره‌ی داده شده از 16 می‌باشد. پس شکل کلی تابع راه‌انداز به صورت زیر می‌شود.

attachInterrupt(digitalPinToInterrupt(D2), IntCallback, RISING);


 

 

 

دیدگاه ها :

من بات نیستم

  1. سبحان موثق گفت:

    سلام

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

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