Trần Công Thịnh gửi vào
- 20098 lượt xem
I. Giới thiệu
Như chúng ta biết số lượng chân ngắt rất hạn chế trong các dòng vi điều khiển. khi sử dụng nhiều button để ngắt thì các chân ngắt khi sử dụng cho các việc còn lại sẽ rất phí. còn nếu viết hàm để xử lý chống dội vi điều khiển quét các hàm liên tục thì phung phí xung để làm những việc khác. Và khi làm với một hệ thống với rất nhiều nút nhấn và rất hạn chế việc delay thì phương pháp này của mình có thể sẽ giúp cho các bạn :)
II. Nội dung chính
Ví dụ của mình sài ngắt cạnh xuống của chân thứ 2 của arduino uno nhé.
Khi nhấn button thì có hiện tượng ngắt xảy ra. sau đó bạn delay(30); để điện áp ở 8 10 12 ổn định rồi nó đọc giá trị 1 hoặc 0 ở chân. Khi đọc xong thì nó hết tác vụ ngắt, bạn giữ phím cũng không tác dụng. Như vậy khi bạn nhấn nút nó sẽ kiểm tra ngay mà không bị delay chương trình đang chạy ở trong vòng lặp ở hàm void loop().
III. Lập trình
int interruptPin=2;//xem thêm tại http://arduino.vn/reference/attachinterrupt //Trên uno bạn chỉ có thể dùng chan số 2 và số 3 nhé :) void setup() { pinMode(8, INPUT); pinMode(10, INPUT); pinMode(12, INPUT); pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), blink, FALLING); } //hàm ngắt void blink() { delay(30); //chống hiện tượng dội cho tất cả nút đang nhấn //đọc giá trị từng chân xem chân nào nhấn. bt1= digitalRead(8); bt2= digitalRead(10); bt1= digitalRead(12); } void loop() {}
Như vậy các bạn có thể sử dụng hàng chục nút nhấn chỉ với 1 chân ngắt. Tối ưu được dự án của mình rồi :)