Arduino digital 읽기 오류


10

나는 4 개의 입력 와이어로 Arduino UNO를 설정했으며 포트 10, 11, 12, 13에 연결하고 와이어를 제외한 모든 브레드 보드에 연결합니다.

내 코드는 다음과 같습니다.

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

문제는 핀을 5V 또는 3V3에 간단히 연결 한 후에는 다음과 같이 판독이 시작됩니다. 1 0 1 0 1 1 1 0 1 0 1 1 0 VCC (5V 또는 3V3)에 직접 연결된 와이어가 없어도 판독 값은 항상 0이어야합니다.

내 Arduino가 죽었습니까? 이 문제를 어떻게 해결할 수 있습니까?


트리거되지 않은 경우 트리거 핀을 접지에 연결하십시오!

답변:


18

당신이 가진 것을 Floating 핀 . 디지털 입력 핀은 변화에 매우 민감하며 한 상태 또는 다른 상태 (긍정 또는 낮음)로 긍정적으로 구동되지 않는 한 브레드 보드, 사람의 손가락 또는 공기와 같은 근처 소스에서 부유 정전 용량을 포착합니다. 연결된 모든 전선은 작은 안테나처럼 작동하여 입력 상태가 변경됩니다. 그리고 저는 전선, 보드의 흔적, 브레드 보드의 와이어, 브레드 보드 핀, 심지어 IC 자체의 금속 핀을 의미합니다.

이것은 Arduino 참조 페이지에서 참조됩니다 :

핀이 아무것도 연결되어 있지 않으면 digitalRead ()는 HIGH 또는 LOW를 반환 할 수 있습니다 (임의로 변경 될 수 있음).

Arduino Digital Pin Tutorial 을 보면 :

그러나 이것은 또한 아무것도 연결되지 않은 입력 핀 또는 다른 회로에 연결되지 않은 전선에 연결된 입력 핀은 핀 상태에서 임의로 임의의 변화를보고하거나 환경에서 전기 노이즈를 발생 시키거나 상태를 용량 적으로 결합한다는 것을 의미합니다. 근처 핀의.

입력이없는 경우 입력 핀을 알려진 상태로 조정하는 것이 유용한 경우가 많습니다. 입력에 풀업 저항 (+ 5V) 또는 풀다운 저항 (접지 저항)을 추가하면 10K가 공통 값이됩니다. 소프트웨어에서 액세스 할 수있는 Atmega 칩에는 편리한 20K 풀업 저항이 내장되어 있습니다. 이러한 내장 풀업 저항은 다음과 같은 방식으로 액세스됩니다.

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

이 약한 풀 저항은 입력 핀 상태를 알려진 상태로 강제하고 접지에 직접 연결하거나 + 5v와 같은 더 강한 입력 전압으로 쉽게 덮어 씁니다.


2
어떻 pinMode(pin, INPUT_PULLUP)습니까? 기억하기 쉽고 실수하기가 어렵습니다.
piojo

6

이것은 정상입니다. 입력이 무언가에 연결되어 있지 않으면 높음 또는 낮음으로 표시되거나 지속적으로 변경됩니다. 이는 Arduino 웹 사이트 의 digitalRead 참조 페이지에 설명되어 있습니다.

입력 핀은 약간의 정전 용량으로 작동하므로 3V3 또는 5V에 짧게 연결하면 정전 용량이 충전됩니다. 맨손으로도 비슷한 효과를 얻을 수 있습니다.

핀과 GND 사이에 큰 값의 저항을 추가하면 문제를 피할 수 있습니다.

왜 제로를 기대하는지 스스로에게 물어보십시오.


1
pinMode (pin, INPUT_PULLUP);
jippie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.