Trạng thái nút thay đổi ngẫu nhiên


14

Tôi có một nút ấn được nối với Arduino của tôi nhưng nó dường như được kích hoạt ngẫu nhiên.

Tôi có một chân của nút được kết nối với chân 2 trên arduino và chân còn lại được nối với mặt đất.

void setup() {
    Serial.begin(9600);

    pinMode(2, INPUT);
}

void loop() {
    Serial.println(digitalRead(2));
}

Tôi hy vọng nó sẽ in 1 liên tục và về 0 khi tôi nhấn nút xuống nhưng đôi khi nó hiển thị 0 ngay cả khi tôi không chạm vào nó.

Câu trả lời:


17

Khi một nút được kết nối trong cấu hình đó, đầu vào là cái được gọi là nổi , nghĩa là không phải là 0 hoặc 1. Khi nhấn nút, nó được kết nối với mặt đất, vì vậy đó chắc chắn là 0, nhưng khi nó không được nhấn xuống, chúng tôi không biết giá trị của pin.

Kéo điện trở lên

Chúng ta cần bao gồm những gì được gọi là điện trở "kéo lên" để kéo tín hiệu lên mức logic 1 khi không nhấn nút.

kéo điện trở lên

Hình ảnh từ Sparkfun

Điều này có nghĩa là khi nút không được nhấn, Arduino đọc logic 1. Khi nhấn nút, dòng điện chạy qua điện trở xuống đất và Arduino đọc logic 0.

Điện trở kéo lên bên trong

Arduino cũng có điện trở kéo lên bên trong, do đó bạn không nhất thiết phải thêm một thành phần phụ vào mạch của mình. Có một vài cách để sử dụng này.

Bạn đã từng phải làm điều đó như thế này:

pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

Bây giờ chúng ta có thể làm điều đó chỉ trong một dòng:

pinMode(pin, INPUT_PULLUP);

Điều này cho phép điện trở kéo lên 20k trên pin đó. Đầu vào sẽ không còn nổi khi nhấn nút này.

Lưu ý: Điều này chỉ hoạt động khi đầu kia được kết nối với mặt đất.


1
Điều đáng chú ý là ý tưởng tương tự cũng có tác dụng đối với điện trở kéo xuống; tức là điện trở thường kéo pin xuống thấp, nhưng nhấn nút mang lại cho nó cao. Rõ ràng nó phải ở bên ngoài, vì không có sự kéo xuống bên trong đối với Arduinos tiêu chuẩn.
Peter Bloomfield
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.