#pullup #pulldown
Với thử nghiệm nhỏ này, tôi hy vọng bạn sẽ hiểu tại sao điện trở kéo lên (và kéo xuống) lại cần thiết trong các mạch kỹ thuật số như trong Arduino.
Điện trở PullUp
Ví dụ ta có hình sau:
Với một điện trở kéo lên (Pull-up), thì khi nhấn nút, Arduino sẽ đọc giá trị chân là LOW, và khi không nhấn, Arduino nhận giá trị là HIGH.
int buttonPin = 3;
int Led = 10;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(Led, OUTPUT);
Serial.begin(9600);
}
void loop() {
int buttonState = digitalRead(buttonPin); // đọc trang thái nút nhấn
if (buttonState == LOW) { // nếu nút nhấn thì trạng thái là LOW
digitalWrite(Led, HIGH); //sáng LED
} else {
digitalWrite(Led, LOW);
Serial.println(buttonState);
}
}
Khi không có điện trở PullUP
Và khi không có điện trở PullUp đầu ra khi không nhấn nút nhấn sẽ là
Tại sao LED bị nhấp nháy ?
Ta thấy vì không có điện trở PullUp, Nút không nhấn, Arduino không thể xác định được trạng thái tại nút nhấn là HIGH hay LOW, tất nhiên khi nhấn nút thì trạng thái sẽ là LOW. Vi vậy để Arduino không nhận trạng thái thì với các nút nhấn ta cần có điện trở Pullup.
Vì vậy cần có điện trở PullUP
Điện trở PullDown
Với điện trở kéo xuống (Pull-down) , Khi không nhất, Giá trị là LOW, và giá trị là HIGH khi nhấn.
Giả sử không dùng điện trở được không ??, Nếu không có điện trở, thì khi bạn không nhấn, giá trị tại chân sẽ không thể xác định bởi Arduino.
int button = 2;
int led = 10;
int buttonState = 0;
void setup() {
pinMode(led, OUTPUT);
pinMode(button, INPUT);
Serial.begin(9600);
}
void loop() {
buttonState = digitalRead(button);
if (buttonState == HIGH) { // nút được nhấn
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
Serial.println(buttonState);
}