Прошу совета, проблема с кнопкой

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

Здравствуйте! Возникла такая проблема: Arduino Uno R3,элементарный скетч с кнопкой на А0 и выводом на D7. Все работает. Вставляю в R3 Ethernet shield на W5100 и уже в него кнопку. Срабатывает только первое нажатие.В чем может быть проблема? Да, кнопка через 10к на земле, подается +5, пайка проверена, ни ляпов ни непропаев нет. 

01int flag=0;
02 
03void setup()   
04{
05        
06    pinMode(7, OUTPUT);        
07       
08         
09}
10 
11void loop()
12 
13{
14         
15     if(digitalRead(14)==HIGH&&flag==0)//если кнопка нажата   
16     // и перемення flag равна 0 , то ...
17     {
18            
19       digitalWrite(7,!digitalRead(7));
20       flag=1;
21        //это нужно для того что бы с каждым нажатием кнопки
22        //происходило только одно действие
23        // плюс защита от "дребезга"  100%
24         
25     }
26         
27      if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата
28     //и переменная flag равна - 1 ,то ...
29     {
30            
31        flag=0;//обнуляем переменную flag
32     }
33}

 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Я бы попытался найти в документации - на какие пины "садится" шилд w5100, и на сколько он просаживает питание ардуины.

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

Он садится на 10,11,12,13. Насчет питания, думаете имеет смысл запитать его отдельно?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

vvg10 пишет:

Он садится на 10,11,12,13. Насчет питания, думаете имеет смысл запитать его отдельно?

У меня - все вместе запитано, но кнопок пока нет. Питание может проседать и несильно, но достаточно для того, чтобы вход не опознал напряжение как "единицу".

Zhyravlev_AS
Offline
Зарегистрирован: 03.04.2013

Попробуйте так:

Библиотека Bounce.h

01#include <Bounce.h>
02 
03Bounce bouncer = Bounce(2, 40); //создаем экземпляр класса Bounce для 2 вывода
04 
05void setup()
06{
07  pinMode(2, INPUT);   //переключаем 2 вывод в режим входа
08  digitalWrite(2, 1);  //включаем на нем подтягивающий резистор
09}
10 
11void loop()
12{
13  if (bouncer.update()) {     //если произошло событие
14    if (bouncer.read()==0) {    //если кнопка нажата
15      /* ... */
16    } else {
17      /* ... */
18    }
19  }
20}

Только я не понял на каком пине у Вас кнопка?

"элементарный скетч с кнопкой на А0"

а в коде

1if(digitalRead(14)==HIGH&&flag==0)//если кнопка нажата  

Разве на UNO есть 14 пин? Хм..

 

vvg10
vvg10 аватар
Offline
Зарегистрирован: 18.04.2013

Когда пишешь digital 14 имеется ввиду analog 0. И вопрос значально был о том, что перестает работать при подключении Ethernet Shield, без него все работает...

buka
buka аватар
Offline
Зарегистрирован: 07.06.2012

На W5100 analog 0 и 1 подтянуты к +5. Они используються для SD

buka
buka аватар
Offline
Зарегистрирован: 07.06.2012

На W5100 analog 0 и 1 подтянуты к +5. Они используються для SD