Giả sử rằng khi bạn đang chăm chỉ làm một việc gì đó, nhưng bỗng dưng có số điện thoại người thân gọi đến với công việc quan trọng, và bạn phải tạm ngưng công việc để nghe điện thoại.
Ngắt (Interrupts) cũng thể hiểu đơn giản gần giống như vậy. Bạn có thể thiết kế một nút nhấn đặc biệt mà khi bạn nhấn nút đó thì một khối lệnh phải được thực hiện, bất kể chương trình đang làm gì.
Trong ESP8266 cú pháp hàm đó như sau:
attachInterrupt(Pin, ISR(callback function), Interrupt type/mode);
Trong đó:
Pin: là chân chỉ định nhận tín hiệu ngắt.
ISR (Callback function): Là một thủ tục (không trả về, không tham số) để thực thi một khối lệnh nào đó khi ngắt được gọi.
Interrupt type/mode: gồm
CHANGE: Khi pin thay đổi trạng thái
RISING: Khi pin thay đổi từ LOW thành HIGH
FALLING: Khi pin chuyển từ HIGH thành LOW.
Trong ví dụ sau đây, chúng ta chỉ ra chân số 2 làm chân nhận tín hiệu Ngắt. Khi bạn nhấn nút một khối lệnh được thực hiện.
Sơ đồ kết nối
Đoạn mã Arduino để nạp code cho ESP8266
// Khai báo chân Ngắt
const int chanNgat = D2;
int soLanGoiNgat = 0;
void ICACHE_RAM_ATTR HamGoiNgat(){
soLanGoiNgat++;
Serial.print("Số lần bạn gọi ngắt: ");
Serial.println(soLanGoiNgat);
}
void setup() {
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt(chanNgat), HamGoiNgat, RISING);
}
void loop() {
// Vòng lặp này tốn 1 giờ mới thoát ra được
// Nhưng khi bạn nhấn nút gọi ngắt thì khối của HamGoiNgat được chạy.
for(int i=1; i<=3600; i++){
delay(1000);
}
}