Обработка нажатия хотя бы одной кнопки
- Войдите на сайт для отправки комментариев
Пт, 23/08/2019 - 17:17
Здравствуйте, столкнулся с небольшой проблемой. Нужно с помощью пяти разных кнопок задать определенные значения, каждая кнопка отвечает за свое значение. Однако, с вводом этих значений возникла проблема. Ожидать нажатие кнопки с помощью
while(digitalRead(prog_btn)!=HIGH || digitalRead(left_btn)!=HIGH || digitalRead(right_btn)!=HIGH || digitalRead(fwd_btn)!=HIGH || digitalRead(rwd_btn)!=HIGH);
не лучшее решение. Как реализовать групповую обработку кнопок или есть какой-то еще вариант?
Заранее, спасибо.
Титановый волосипед.
Карбоновый лучше.
А что значит "не лучшее решение". Чем оно плохо? Чем не устраивает? Чем какое-то другое лучше?
у меня есть дорожный.
Тем, что не срабатывает, программа не идет в этом случае дальше.
кнопки все на один порт, читать порт махом, потом битовые маски.
Тем, что не срабатывает, программа не идет в этом случае дальше.
это означает только одно, все ваши выводы имеют состояние HIGH, притянуты к плюсу.
это означает только одно, все ваши выводы имеют состояние HIGH, притянуты к плюсу.
Нет, проверял. Все выходи имеют состояние LOW, на схеме они подтянуты к земле, через резистор.
Заранее, спасибо.
это означает только одно, все ваши выводы имеют состояние HIGH, притянуты к плюсу.
Нет, проверял.
как?
это означает только одно, все ваши выводы имеют состояние HIGH, притянуты к плюсу.
Нет, проверял.
как?
Вывод состояний всех кнопок в серийник, при нажатии, менялось с 0 на 1.
makavity - не выпендривайтесь, для начала сделайте для каждой кнопки отдельное условие. А вот когда этот вариант "в лоб" заработает - тогда будете думать об оптимизации.
makavity - не выпендривайтесь, для начала сделайте для каждой кнопки отдельное условие. А вот когда этот вариант "в лоб" заработает - тогда будете думать об оптимизации.
А кто-то выпендривается? Я пришел сюда за помощью, т.к мой вариант не работает. Условие для каждой кнопки есть.
А кто-то выпендривается? Я пришел сюда за помощью, т.к мой вариант не работает. Условие для каждой кнопки есть.
Тот код, что вы показали - это не условия для кнопок. Я имел в виду вот так:
if (digitalRead(prog_btn)!=HIGH) { // обработка нажатия кнопки } if (digitalRead(right_btn)!=HIGH) { // обработка нажатия кнопки } if (digitalRead(left_btn)!=HIGH) { // обработка нажатия кнопки } ......Да, я понимаю. Условия для кнопок есть в программе. Суть только в том, что зарегистрировать надо максимально 50 нажатий. Для этого я использовал цикл со счетчиком, если не поставить условие на ожидание нажатия хотя бы одной кнопки, цикл моментально прогоняется 50 раз. И вот сейчас возникла проблема с условием ожидания нажатия кнопки.
Да, я понимаю. Условия для кнопок есть в программе. Суть только в том, что зарегистрировать надо максимально 50 нажатий. Для этого я использовал цикл со счетчиком, если не поставить условие на ожидание нажатия хотя бы одной кнопки, цикл моментально прогоняется 50 раз. И вот сейчас возникла проблема с условием ожидания нажатия кнопки.
для обработки десятков кнопок их подключают в виде матрицы, это уменьшает число занятых выходов МК и упрощает обработку нажатий. Но это так, на будущее.
А пока Ваше обьяснение не дает понять, что у вас за проблема. Выкладывайте код, посмотрим
Loop это уже цикл, бесконечный. Вот в нем и прибавляйте свой счетчик нажатий, когда кнопка меняет свое состояние. Только почитайте еще про дребезг кнопок.
Вам нужно зарегистрировать именно смену состояния кнопки, а вы, похоже, ставите условие просто по лог. Уровню (HIGH вроде в вашем случае)
Тем, что не срабатывает, программа не идет в этом случае дальше.
Это не проблема решения. Это проблема того, что Вы в трёх соснах заблудились.
Когда я посмотрел, я подумал, что они у Вас к питанию притянуты, а коль скорос они у Вас приятнуты к земле, то смотрите, что получается. Вот Ваша строка
Ваше выражение "digitalRead(prog_btn)!=HIGH" означает, что кнопка НЕ нажата.
Вы такие проверки объединили через || (ИЛИ). B итоге Ваше выражение получилось таким
ЕСЛИ НЕ НАЖАТА ХОТЯ БЫ ОДНА ИЗ КНЛОПОК! Чтобы цикл завершился, нужно, чтобы нажаты были все одновременно. Очевндно тут нужно либо не "!=", либо не "||". Испраьте и не парьтесь.
Вот, знаете, я поражаюсь, почему новички боятся написать лишнюю строчку и тем самым создают себе проблемы. Если бы Вы нажатось или не нажатость каждой кнопки оформили функцией, то ошибку увидели бы сразу.
Благодарю всех.
Типа, все свободны.
Типа, все свободны.
типа что вы ко мне все пристали, я все равно ничего не понял
Нет, я понял свою ошибку, за что очень признателен. ЕвгенийП дал мне понять мою ошибку, а Вы подсказали вариант с матрицей. Все предельно понятно.