Arduino kỹ thuật số Đọc sai


10

Tôi đã thiết lập Arduino UNO của mình với 4 dây đầu vào, chúng kết nối với cổng 10, 11, 12, 13, chúng được kết nối với bảng mạch của tôi không có gì ngoài nó.

Mã của tôi chỉ đơn giản là:

Serial.println(digitalRead(13));
Serial.println(digitalRead(12));
Serial.println(digitalRead(11));
Serial.println(digitalRead(10));

Vấn đề là, sau khi tôi kết nối ngắn gọn một chân với 5V hoặc 3V3, việc đọc sẽ bắt đầu trở nên tồi tệ như sau: 1 0 0 1 0 1 1 1 0 1 0 1 1 0 Không có ý nghĩa! Không có bất kỳ dây nào được kết nối trực tiếp với VCC của tôi (5V hoặc 3V3), việc đọc liên tục thay đổi, khi nó phải bằng 0!

Arduino của tôi đã chết? Làm thế nào tôi có thể sửa lỗi này?


Chỉ cần kết nối pin kích hoạt của bạn với mặt đất khi không được kích hoạt!

Câu trả lời:


18

Những gì bạn có được gọi là một Floatingpin. Các chân Đầu vào Kỹ thuật số rất nhạy cảm với sự thay đổi, và trừ khi được điều khiển tích cực sang trạng thái này hoặc trạng thái khác (Cao hoặc Thấp), sẽ lấy điện dung đi lạc từ các nguồn gần đó, như bảng mạch, ngón tay người hoặc thậm chí là không khí. Bất kỳ dây nào được kết nối với nó sẽ hoạt động như một ăng ten nhỏ và khiến trạng thái đầu vào thay đổi. Và tôi có nghĩa là bất kỳ dây, dấu vết trên bảng, dây đến bảng mạch bánh mì, pin pinboard, thậm chí pin kim loại của chính IC.

Điều này được tham khảo trong trang tham khảo Arduino:

Nếu pin không được kết nối với bất cứ thứ gì, digitalRead () có thể trả về CAO hoặc THẤP (và điều này có thể thay đổi ngẫu nhiên).

Nếu bạn xem Hướng dẫn về Pin kỹ thuật số Arduino :

Tuy nhiên, điều này cũng có nghĩa là các chân đầu vào không có kết nối với chúng hoặc với các dây kết nối với chúng không được kết nối với các mạch khác, sẽ báo cáo những thay đổi dường như ngẫu nhiên trong trạng thái pin, thu nhiễu điện từ môi trường hoặc ghép điện dung trạng thái của một pin gần đó.

Thông thường sẽ rất hữu ích khi điều khiển ghim đầu vào đến trạng thái đã biết nếu không có đầu vào nào xuất hiện. Điều này có thể được thực hiện bằng cách thêm một điện trở pullup (đến + 5V) hoặc điện trở kéo xuống (điện trở tiếp đất) trên đầu vào, với 10K là giá trị chung. Ngoài ra còn có các điện trở pullup 20K tiện lợi được tích hợp trong chip Atmega có thể được truy cập từ phần mềm. Những điện trở pullup tích hợp này được truy cập theo cách sau.

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

Các điện trở kéo yếu này buộc trạng thái chân đầu vào thành trạng thái đã biết và dễ bị ghi đè bởi điện áp đầu vào mạnh hơn, như kết nối trực tiếp với mặt đất hoặc + 5v.


2
Làm thế nào về việc đề cập pinMode(pin, INPUT_PULLUP)? Thật dễ nhớ và thật khó để bắt vít.
piojo

6

Điều này là bình thường. Trừ khi một đầu vào được kết nối với một cái gì đó, nó sẽ hiển thị CAO hoặc THẤP hoặc thay đổi liên tục. Điều này được mô tả bởi trang tham chiếu digitalRead trên trang web Arduino.

Chân đầu vào hoạt động với một số điện dung nhỏ, do đó, kết nối nhanh với 3V3 hoặc 5V sẽ sạc điện dung. Bạn có thể tìm thấy một hiệu ứng tương tự bằng cách sử dụng ngón tay trần.

Bạn có thể tránh vấn đề bằng cách thêm một điện trở giá trị lớn giữa pin và GND.

Hãy tự hỏi tại sao bạn mong đợi số không?


1
pinMode (pin, INPUT_PULLUP);
jippie
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.