2014-09-04 2 views
0

Wiring DiagramArduino кнопка переключения

У меня есть простой Arduino проект, 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
.
.

Но после щелчка на button1 и освободить статус button1 займет много времени, чтобы вернуться к 0, выход, как:
btn1 Статус: 1
BTN2 Статус: 0
btn1 Статус: 1
BTN2 Статус: 0
btn1 Статус: 1
BTN2 Статус: 0
btn1 Статус: 1
BTN2 Статус: 0
btn1 Статус: 1
BTN2 Статус: 0
btn1 Статус: 1
BTN2 Статус: 0
btn1 Статус: 1
BTN2 Статус: 0
btn1 Статус: 1
BTN2 Статус: 0
btn1 Статус: 0
BTN2 Статус: 0
btn1 Статус: 0
BTN2 Статус: 0
btn1 Статус: 0
БТН 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

Проблема с вашим дизайном является то, что при отсутствии кнопочный , ваши контакты ввода/вывода не подключены ни к чему. Это приводит к тому, что их значения становятся «плавающими» вокруг значений, которые скатываются между 1 и 0. Обычно вы подключаете вывод I/O напрямую к + 5v через резистор с высоким значением (например, 10 кОм), а затем также подключаете ввод/вывод нажимайте на землю с помощью кнопки. Таким образом, когда вы читаете штифт без нажатия кнопки, вы получаете твердое + 5v (и вряд ли какой-либо ток из-за резистора), но когда вы нажимаете кнопку, вы замыкаетесь на землю (через резистор) и получаете твердый 0v. Это дает вам очень чистое «включено» и «выключено», когда ваше нажатое состояние кнопки равно 0 В.

Arduinos - это круто, потому что они имеют эти резисторы до + 5 В, встроенные в плату. Вам просто нужно включить их, используя pinMode(pinBUTTON, INPUT_PULLUP);. Я включил дизайн того, что должно быть над вашей схемой.

Важно помнить, что с ардуинами вы ВСЕГДА должны установить свои pinModes. Это простой шаг, чтобы забыть, и ардуино будет «работать» без него, но это общий источник нечетных результатов в ваших проектах.

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. 
    } 
} 
Смежные вопросы