2014-09-04 2 views
0

Wiring Diagram아두 이노 스위치 버튼

나는 간단한 아두 이노 프로젝트, 2 개 버튼이 버튼의 시작 상태가 0 인 것을 이상한 경우에 직면하지만, 버튼을 클릭 후 상태를 해제가 오랫동안 1이된다 시간을 0으로 되돌려주세요. 무엇이 잘못 됐습니까?

코드 : 시작 부분에

int const BTN1_PIN=2; 
int const BTN2_PIN=4; 

void setup(){ 
    pinMode(BTN1_PIN, INPUT); 
    pinMode(BTN2_PIN, INPUT); 
    Serial.begin(9600); 
} 

void loop(){ 
    int status1=digitalRead(BTN1_PIN); 
    Serial.print("BTN1 Status :"); 
    Serial.println(status1); 


    int status2=digitalRead(BTN2_PIN); 
    Serial.print("BTN2 Status :"); 
    Serial.println(status2); 

delay(250); 
} 

, 값은 다음과 같습니다
인 btn1 상태 : 0
BTN2 상태 : 0
.
.

그러나 단추 1에 클릭 후 단추 1의 상태를 해제처럼 0으로 출력을 백업하는 데 시간이 오래 걸릴 :
인 btn1 상태 : 1
BTN2 상태 : 0
인 btn1 상태 : 1
BTN2 상태 : 0
상태 인 btn1 1
BTN2 상태 : 0
상태 인 btn1 1
BTN2 상태 : 0
인 btn1 상태 : 1 01 2, BTN2 상태 : 0
인 btn1 상태 1
BTN2 상태 : 0
인 btn1 상태 1
BTN2 상태 : 0
인 btn1 상태 1
BTN2 상태 : 0
인 btn1 상태 : 0
BTN2 상태 : 0
인 btn1 상태 : 0
BTN2 상태 : 0
인 btn1 상태 : 0
BTN 2 개 상태 : 0
인 btn1 상태 : 0
BTN2 상태 : 0
인 btn1 상태 : 0
BTN2 상태 : 0

+0

귀하의 배선은 무엇입니까? –

+0

지금 무릎에서 벗어난 사진을 찍을 수는 없지만 코드에 오류가 있습니까? – Hazim

+0

'readDigit()'는 어떻게 생겼습니까? 간단합니다'digitalRead()'입니까? 너의 근거가 아무 것도 아닌 것 같아. 또한 INPUT_PULLUP을 사용해 보셨습니까 (예 :'pinMode (BTN1_PIN, INPUT_PULLUP);)? –

답변

0

General pushbutton setup

설계의 문제는, 그 어떤 푸시 버튼 I/O 핀이 연결되어 있지 않습니다. 이로 인해 값은 1에서 0 사이로 점프한다는 의미의 "부동"종류가됩니다. 일반적으로 I/O 핀을 높은 값의 저항 (예 : 10K 옴)을 통해 + 5V에 직접 연결 한 다음 I/O 푸시 버튼을 통해 핀을 접지하십시오. 이렇게하면 푸시 버튼을 누르지 않은 상태에서 핀을 읽을 때 솔리드 + 5V (저항으로 인해 전류가 거의 없음)가되지만 버튼을 누르면 (저항을 통해) 접지로 단락되고 고체 0v. 이렇게하면 버튼 상태가 0v 인 매우 깨끗한 "켜짐"과 "꺼짐"을 얻을 수 있습니다.

Arduinos는 보드 자체에 내장 된 + 5v 저항을 가지고 있기 때문에 시원합니다. pinMode(pinBUTTON, INPUT_PULLUP);을 사용하여 켜기 만하면됩니다. 귀하의 회로 레이아웃이 위에 있어야하는 디자인을 포함 시켰습니다.

arduinos에서 기억해야 할 중요한 사항은 항상 pinMode를 설정해야한다는 것입니다. 이것은 잊기 쉬운 단계이며, arduino는 그것 없이는 "일종의"일을 할 것이지만, 이것은 프로젝트에서 이상한 결과를 가져 오는 일반적인 원인입니다.

const int pinBUTTONONE = 2; 
const int pinBUTTONTWO = 4; 

void setup(){ 
    pinMode(pinBUTTONONE, INPUT_PULLUP); 
    pinMode(pinBUTTONTWO, INPUT_PULLUP); 
} 

void setup(){ 
    if(digitalRead(pinBUTTONONE) == LOW){ 
    // Execute button one pressed code. 
    } 

    if(digitalRead(pinBUTTONTWO) == LOW){ 
    // Execute button two pressed code. 
    } 
}