ksp gửi vào
- 161073 lượt xem
Nội dung chính, cần nắm
Tại bài viết Bài 3: Xác định trạng thái của một nút nhấn (button), bạn đã biết được cách để đọc tín hiệu từ một button bằng cách thiết đặt chân digital là INPUT. Hôm nay, ta cũng đào xới vấn đề đọc trạng thái của một nút nhấn, nhưng đi theo một hướng khác (không dùng điện trở như trong Bài 3). Cách làm này đơn giản hơn và thực tế thường được ứng dụng.
Phần cứng
- Arduino Uno
- Breadboard
- Dây cắm breadboard
- 1 điện trở 560 Ohm (hoặc 220 Ohm hoặc 1kOhm)
- 1 đèn LED siêu sáng
- 1 button (nút nhấn)
Lắp mạch
Lập trình và giải thích
Trước tiên, ta cần phải biết sự khác nhau của INPUT_PULLUP và INPUT, nếu bạn chưa rõ thì cần tham khảo đường dẫn sau. Thực chất INPUT_PULLUP cũng như là INPUT thôi, nhưng cái điện trở mắc ngoài như ở INPUT được "thiết đặt sẵn" bên trong con vi điều khiển của Arduino và khi bạn pinMode một chân là INPUT_PULLUP thì bạn đã kích hoạt cái điện trở này lên. Và sau khi pinMode các chân digital là INPUT_PULLUP, nếu bạn digitalRead các chân này thì sẽ nhận được giá trị HIGH (điều này ngược lại với hướng dẫn tại bài 3). Nếu bạn nhấn button xuống thì chân digitalRead sẽ trả về LOW. Bởi vì nguyên lý chỉ rất đơn giản như vầy thôi, nếu trong khuôn khổ bài viết này, tôi giải thích cặn cẽ tại sao lại như thế thì sẽ làm rối các bạn và không cần thiết. Để hiểu rõ nó hoạt động trong thực tế như thế nào thì hãy chạy đoạn mã dưới đây!
void setup(){ // khởi động cổng Serial ở baudrate 9600 Serial.begin(9600); // Cài đặt các chân digital pinMode(8, INPUT_PULLUP); //INPUT_PULLUP chân button pinMode(3, OUTPUT); // OUTPUT chân led } void loop(){ //đọc tín hiệu chân digital int sensorVal = digitalRead(8); //Xuất tín hiệu ra serial Serial.println(sensorVal); if (sensorVal == HIGH) { //nếu chưa nhấn digitalWrite(3, LOW); // tắt đèn } else { // nếu đã nhấn digitalWrite(3, HIGH);// bật đèn } }