اتصال میکرو سوئیچ به ESP8266 با اینتراپت یا وقفه
اینتراپت یا وقفه در میکرو کنترلر ها به شما این امکان رو میده که برای اینکه وضعیت یک ورودی رو بررسی کنه بدون اینکه همیشه Cpu مشغول بشه ، یعنی در واقع در تابع LOOP شما هیچ گونه کدی رو برای بررسی وضعیت پایه ورودی نویسید و این یک مزیت خیلی خوب به حساب میاد. البته فقط استفاده از اینتراپت به این ختم نمیشه و می تونه لبه ی بالا رونده (RISING) و پایین رونده (FALLING) رو هم تشخیص بده مثلا وقتی شما بدون استفاده از اینتراپت یه میکرو سوئیچ رو به میکروکنترلر وصل کنید هنگام فشار دادن کلید برنامه در یک حلقه گیر می افته تا زمانی که دستتون از رو کلید بردارید ولی در اینتراپت شما تابعی رو یک بار با استفاده از تشخیص لبه بالارونده یا پایین رونده فراخوانی می کنید.
نمونه کد و مدار استفاده شده در ماژول ESP8266
در ESP8266 بجز پایه GPIO16 و GPIO6 تا GPIO11 می تونید برای اینتراپت استفاده کنید که در مثالی که اینجا آورده شده است از پایه GPIO14 استفاده و PULLUP شده است یعنی در مدار نیازی به مقاومت برای PULLUP کردن ندارد.
#include <Arduino.h> #include <ESP8266WiFi.h> void SendR() { Serial.println("OK"); delay(250); } void setup(){ pinMode(14, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(14), SendR, FALLING); Serial.begin(115200); } void loop(){ }
در کد بالا با هر بار تشخیص لبه پایین رونده تابع SendR فراخوانی می شود. اما در عمل خطا زیاد دارد به دلیل وجود نویز در کلید که با هر با فشار دادن کلید تابع چندین بار فراخوانی می شود که با مدار زیر حذف می شود.