ESP8266 NodeMCU Interrupt
คำสั่ง Interrupt คือการทำงานขัดจังหวะ โดยเมื่อมีคำสั่ง interrupt เข้ามา โปรแกรมจะหยุดและไปทำคำสั่งใน interrupt ก่อนเมื่อเสร็จแล้ว จึงกลับมาทำคำสั่งที่ค้างไว้ ข้อดีเช่น เราสามารถเช็คสถานะของเหตุการณ์สำคัญได้ โดยไม่ต้องใช้คำสั่ง if เช็คตลอดเวลา
คำสั่ง Interrupt ใน ESP8266 มี 2 คำสั่ง
- attachInterrupt() เป็นการสั่งให้เริ่มเช็ค Interrupt
- detachInterrupt() เป็นการสั่งยกเลิกเช็ค Interrupt
เงื่อนไขเหตุการณ์ที่ทำให้เกิดการเรียก Interrupt มี 3 แบบ
- CHANGE : เมื่อไฟที่ขา interrupt มีการเปลี่ยนค่า เช่น จาก 0 เป็น 1 หรือ จาก 1 เป็น 0
- RISING : เมื่อไฟที่ขา interrupt มีการเปลี่ยนสถานะจาก 0 เป็น 1
- FALLING : เมื่อไฟที่ขา interrupt มีการเปลี่ยนสถานะจาก 1 เป็น 0
* ขา GPIO ทุกขาสามารถใช้คำสั่ง Interrupt ได้ ยกเว้นขา GPIO16
ตัวอย่างการใช้งาน Interrupt CHANGE :
เมื่อไฟที่ขา interrupt มีการเปลี่ยนค่า เช่น จาก 0 เป็น 1 หรือ จาก 1 เป็น 0
const byte ledPin = D4;
const byte interruptPin = D2;
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;
}
RISING : เมื่อไฟที่ขา interrupt มีการเปลี่ยนสถานะจาก 0 เป็น 1
const byte ledPin = D4;
const byte interruptPin = D2;
volatile byte state = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT);
attachInterrupt(interruptPin, blink, RISING);
}
void loop() {
digitalWrite(ledPin, state);
}
void blink() {
state = !state;
}
FALLING : เมื่อไฟที่ขา interrupt มีการเปลี่ยนสถานะจาก 1 เป็น 0
const byte ledPin = D4;
const byte interruptPin = D2;
volatile byte state = LOW;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(interruptPin, blink, FALLING);
}
void loop() {
digitalWrite(ledPin, state);
}
void blink() {
state = !state;
}
ข้อมูลเพิ่มเติม https://www.arduino.cc/en/Reference/AttachInterrupt