Ngược lại với chế độ digital output là digital input. Bạn sẽ dùng digital input khi pin digital nối với các module trả về trạng thái là 0 hoặc 1. Trong bài này chúng ta tìm hiểu các sử dụng nút nhấn (button) và đọc tín hiệu nút nhấn để phát hiện mỗi khi nút được nhấn và bật đèn led. Ngược lại, chúng ta sẽ tắt đèn led khi nút nhấn được thả ra.
Bạn cần chuẩn bị các thiết bị sau:
1 x Node Wifi.
1 x Module nút nhấn.
Bạn cắm module nút nhấn vào cổng Digital 0 (hoặc bất kỳ cổng digital 1 hay 2 tùy ý).
Nút nhấn là những nút các bạn thường thấy trong cuộc sống, từ bàn phím, công tắc điện, quạt… và làm việc với chúng trong Arduino rất đơn giản.
Arduino đọc tín hiệu đầu vào digital input cho các pin là 1 khi điện áp đo được là 3.3V (một số board khác có thể sử dụng 5V) và 0 khi điện áp là 0V. Để button có thể xuất ra các giá trị điện thế này thì module Button được thiết kế theo sơ đồ sau:
Theo sơ đồ mạch của module Button ở trên, thì một bên chân của button được nối xuống Ground (0V, mức 0) thông qua 1 con trở giá trị 10K và một bên chân còn lại nối với VCC (3.3V, mức 1). Bên chân nối với trở được nối vào chân tín hiệu của ESP8266.
Như vậy khi bình thường nút không được nhấn thì chân tín hiệu nối với 0V và sẽ đọc được giá trị 0. Khi nút được nhấn thì 2 bên chân của nút nhấn được tiếp xúc với nhau và chân tín hiệu sẽ được nối với 3.3V (do đường 0V có qua điện trở 10K) và đọc được giá trị là 1.
Bạn upload đoạn code mẫu như bên dưới.
// lưu số pin nối với nút nhấn và led const int buttonPin = 14; const int ledPin = 15; int buttonState = 0; // lưu trạng thái của nút nhấn void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); } void loop() { // lấy trạng thái của nút nhấn buttonState = digitalRead(buttonPin); // kiểm tra xem nút có được nhấn hay không, nếu có thì đọc được giá trị là HIGH if (buttonState == HIGH) { // bật đèn LED digitalWrite(ledPin, HIGH); } else { // tắt đèn LED digitalWrite(ledPin, LOW); } }
Phần đầu đoạn code ta khai báo 2 hằng số cho 2 chân nối với led và button. Vì 2 giá trị này là không đổi nên có thể dùng hằng (constant) thay vì dùng biến thường để tối ưu hóa chương trình. Ngoài ra ta cũng khai báo 1 biến kiểu int để lưu trạng thái của button.
Hằng (constant) là gì? Với một từ khóa “const” nằm trước một khai báo biến, bạn sẽ làm cho biến này thành một biến chỉ có thể đọc “read-only”, sử dụng cho những giá trị không thay đổi trong suốt chương trình. Trình biên dịch sẽ thay thế các hằng số này bằng giá trị khai báo trước mà không cần tính toán và để dành bộ nhớ, từ đó tối ưu và tăng tốc độ của chương trình.
Ta sử dụng led onboard nối với pin 15. Cổng digital 0 sử dụng 2 pin là 14 và 13. Vì nút nhấn chỉ sử dụng 1 pin nên sẽ được nối với pin chính là 14. Vì vậy ta khai báo trong code số pin tương ứng cho led và nút nhấn là 15 và 14.
Trong phần setup, ta khai báo chân nối với button sử dụng chế độ digital input bằng câu lệnh pinMode(buttonPin, INPUT).
Trong hàm loop, ta liên tục kiểm tra giá trị đầu vào của chân nối với button bằng lệnh digitalRead(buttonPin) và bật tắt đèn led tương ứng giá trị đo được dùng cấu trúc if else.
Bạn chọn board và port trong Arduino rồi upload code và quan sát đèn led sẽ được bật mỗi khi nhấn nút và tắt khi thả ra.
Bạn hãy thử viết lại chương trình trên để mỗi khi nhấn nút thì ta sẽ đảo trạng thái của đèn led. Ví dụ, khi ta nhấn 1 lần thì đèn led sẽ bật. Nếu ta nhấn thêm 1 lần nữa thì đèn led sẽ tắt và cứ tiếp tục như thế.