Кнопки

vladprogramer
Offline
Зарегистрирован: 03.09.2013

Uno. Подключаю к аналоговым портам две кнопки по такой вот схеме. Далее стоит задача, на кнопку можно нажать только два раза - пишу код . Итог: если во время подачи питания на ардуино кнопка была нажата то она сразу же обрбатываеться, если же нажать на кнопку после того как было подано питание она не обрабатываеться. Как это исправить? Почему так получаеться? 

int butn = 0;
void setup()
{
  Serial.begin(9600);  //скорость порта
}

void loop()
{

  while (butn < 2) {
    butn++;
    if (digitalRead(18) == HIGH) //если кнопка нажата ...
    {
      Serial.print("port5 door \n");
      delay(500);
    }


    if (digitalRead(19) == HIGH) //если кнопка нажата ...
    {
      Serial.print("port6 door \n");
      delay(500);
    }

  }
}

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017
evgta
Offline
Зарегистрирован: 02.09.2016

http://arduino.ru/Reference/DigitalRead

в сетапе задать что порт вход

в 11 строке косяк

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

evgta пишет:

в сетапе задать что порт вход

это его не спасёт - он не понимает, что физически не сможет сделать нажатие равным по времени одному циклу луп.

а во время делея может успеть сделать с десяток нажатий, которые ему по каким-то принам делать нельзя.

evgta
Offline
Зарегистрирован: 02.09.2016

ну почему если butn++; в правильные места расставит, то после нажатия у него будет пол секунды до повторного срабатывания

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

evgta пишет:

ну почему если butn++; в правильные места расставит, то после нажатия у него будет пол секунды до повторного срабатывания

полсекунды для сколько угодного количества нажатий.

*вдогонку:

Выводы Arduino (Atmega) стандартно настроены как порты ввода, таким образом, не требуется явной декларации в функции pinMode()

evgta
Offline
Зарегистрирован: 02.09.2016

пусть будет, зато в других МК надо,

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

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

evgta
Offline
Зарегистрирован: 02.09.2016

я так понял что если на какую-нибудь кнопку нажать 2 раза то при последующих нажатиях  печать в сериал больше недолжна идти

и упустим что могут быть нажатия во время делей которые небудут обрабатываться

vladprogramer
Offline
Зарегистрирован: 03.09.2013

получаеться что пробелма в дребезге кнопки или в чем ? 

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

vladprogramer пишет:

получаеться что пробелма в дребезге кнопки или в чем ? 

в дребезге в том числе, но.

допустим, у нас дребезга нет и ты переместил butn++; в место, которое будет выполняться при нажатии кнопки(снова непонятка: ты говоришь об одной кнопке, в коде у тебя две кнопки, на схеме одна.

но. не суть...

что ты желаешь получать до нажатия кнопок и после?

в варианте с циклом у тебя будет кирпич, ждущий двух нажатий кнопки(кнопок?) и пуляющий в сериал сообщения, что кнопка нажата и ничего более.

это так задумано - ничего не делать, пока два раза не нажмёшь кнопку(кнопки)?

vladprogramer
Offline
Зарегистрирован: 03.09.2013

проект "GSM сигнализация на гараж". Суть такова: есть ворота на гараже, две дверцы, на них стоят "кнопки" которые определяют открыта или закрыта дверь, если дверь открыта - кнопка зажата и мы звоним мне на телефон, но позвонить можно максимум только 2 раза..... Код который я представил это сугубо фрагмент кода, на самом деле он больше .. Ещё раз, кнопок 2 штуки, при нажатии они должны отработать звонок(вывести текст в нашем случае), вывести этот текст можно максимум 2 раза.. потом только перезагрузка МК ... Нормально я объяснил ? 

vladprogramer
Offline
Зарегистрирован: 03.09.2013

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

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

vladprogramer пишет:

Нормально я объяснил ? 

ненормально.

двери из двух половинок? почему две кнопки?

ещё раз, кнопок 2 штуки, дверь одна, нажимается одна кнопка, посылается 2 сообщения.

здесь ты говоришь, что должно происходить, когда нажата 1 кнопка

vladprogramer пишет:

кнопка зажата и мы звоним мне на телефон

здесь ты говоришь, что кнопок 2 и всё должно происходить, когда нажаты 2 кнопки

vladprogramer пишет:

кнопок 2 штуки, при нажатии они должны

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

vladprogramer пишет:

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

у тебя счётчик срабатывает вне условия, досчитывает до 2-х и ты выскакиваешь из цикла - т.е. сразу и всё, нет у тебя кнопок

evgta
Offline
Зарегистрирован: 02.09.2016

butn++; удалить с 11 строки и поставить в 13 и 20 строки (за скобкой)

если это ворота, то зачем два выключателя? берется 2 или 100500 выключателей который в режиме охраны должны быть замкнуты

и включаются последовательно, тогда из 100500 выключателей получается одна замкнутая цепь которая будет рваться при размыкании 1 из 100500 выключателей, соответственно тогда нужен всего один порт на ардуине

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

evgta пишет:

берется 2 или 100500 выключателей который в режиме охраны должны быть замкнуты

более 2-х кнопок бессмысленно - замыкание 100500 кнопок нащёлкает счётчик первыми двумя замкнувшимися.

*кароче. зарекался сто раз не выносить себе мозг в попытках найти крупицу логики в алгоритмах ползателей кнопок.

vladprogramer
Offline
Зарегистрирован: 03.09.2013

Ребята, всем огромное спасибо, я понял с вашей помощью где у меня была ошибка. Всем успехов !!!