Блокировка кнопки
- Войдите на сайт для отправки комментариев
Сб, 20/04/2013 - 19:20
Две кнопки подключены на один аналоговый пин. Каждая работает на три нажатия. Как сделать блокировку второй кнопки пока не прошёл цыкл нажатий первой кнопки и блокировать первую во время нажатий второй
void loop() { buttonVAL = analogRead(buttonPin); if (buttonVAL < 100 && flag1 ==0) { regim1 ++; flag1 =1; if(regim1 >3) { regim1 =1; } } if (buttonVAL == 0 && flag1 ==1) { flag1 =0; } if(regim1 == 1) { digitalWrite(led1XPin, HIGH); digitalWrite(led2Xpin, LOW); digitalWrite(led3Xpin, LOW); } if(regim1 == 2) { digitalWrite(led1XPin, LOW); digitalWrite(led2Xpin, HIGH); digitalWrite(led3Xpin, LOW); } if(regim1 ==3) { digitalWrite(led1XPin, LOW); digitalWrite(led2Xpin, LOW); digitalWrite(led3Xpin, HIGH); } if ((buttonVAL > 110 && buttonVAL < 200 ) && flag2 ==0 ) { regim2 ++; flag2 =1; if(regim2 >3) { regim2 =1; } } if (buttonVAL == 0 && flag2 ==1) { flag2 =0; } if(regim2 == 1) { digitalWrite(led4XPin, LOW); digitalWrite(led5Xpin, LOW); digitalWrite(led6Xpin, HIGH); } if(regim2 == 2) { digitalWrite(led4XPin, LOW); digitalWrite(led5Xpin, HIGH); digitalWrite(led6Xpin, LOW); } if(regim2 ==3) { digitalWrite(led4XPin, HIGH); digitalWrite(led5Xpin, LOW); digitalWrite(led6Xpin, LOW); } }
а если тупо добавить
if ((buttonVAL > 110 && buttonVAL < 200 ) && flag2 ==0 && режим1 == 1 )
так и в первой части.
Ну сейчас так и получается. Мне нужно чтобы допустим в режиме regim2==2 и regim2==3 нельзя было получить regim1==2 и regim1==3 и наоборот.
Можно попробовать записать regim2==2 && regim1==1 и regim2==3 && regim1==1 но я не знаю, корректна ли такая запись.
цыклциклМне стыдно за ошибку.
А что нужно то? Допустим нажали два раза кнопку 1, потом кнопку 2. Игнорировать нажатие или еще что?
Мне нужно чтобы в режиме regim2==2 и regim2==3 нельзя было получить regim1==2 и regim1==3 и наоборот, нажатие второй кнопки блокировать (игнорировать).
Ну сейчас так и получается. Мне нужно чтобы допустим в режиме regim2==2 и regim2==3 нельзя было получить regim1==2 и regim1==3 и наоборот.
Можно попробовать записать regim2==2 && regim1==1 и regim2==3 && regim1==1 но я не знаю, корректна ли такая запись.
если это лично вам, то корректна.
в дальнейшем выносите это всё в отдельные функции, читать будет легче.
А как быть с тем, что при нажатии второй кнопки изменится значение buttonVAL и тогда уже первая кнопка не будет читаться?
та я хз. я так никогда не писал.
создайте две функции, и не выходите ни из одной пока не произойдет определенное условие.
Я об этом тоже думал (когда кнопки на разных пинах тогда всё нормально), но все кнопки на одном пине и случайное нажатие второй кнопки вырубит первую. maksim в теме " Работа с кнопками. В помощь новичку" показывал подобное подключение кнопок, но вопрос блокировки так и завис.
Определить какая кнопка нажата. Если нажата неправильная кнопка, игнорировать. Если нажата правильная, то увеличить счетчик нажатий. Когда это проверили, выполнять всё остальное.
та нифига. если по нажатию кнопки №1 вызвать функцию, и в ней зациклится пока эта же кнопка не нажмется еще два раза, то обработки кнопки №2 просто не будет, она в другой функии. как-то так.
Спасибо. Соберу завтра схему и попробую, надеюсь заработает.
как-то так, только ожидания отпускания кнопки добавить надо.
Ну майтесь, мой вариант - тупее не придумаешь
А как проверить и игнорировать?
Игнорировать - return, определить - я не совсем понял подключения на аналоговый пин, по уровню? Если проясните подключение кнопок - подскажу. Я догадываюсь, но лучше знать точно.
Кнопки на одном аналоговом пине через разные резисторы. Считываются значения при нажатии и тогда определяется какая кнопка нажата. Я в начале поста в коде указал.
Ок, забудьте, нет времени выпрашивать информацию, схема подключения - единственное что могло помочь
Код "грязный", дребезг, уровни, отображение на LCD не отлаживал.
Кнопки подключал, 1КОм на +5В, второй конец на A2. К A2 либо на землю (кнопка2) или через 1КОм тоже на землю (кнопка1)