Обработка нажатия хотя бы одной кнопки

makavity
Offline
Зарегистрирован: 23.08.2019

Здравствуйте, столкнулся с небольшой проблемой. Нужно с помощью пяти разных кнопок задать определенные значения, каждая кнопка отвечает за свое значение. Однако, с вводом этих значений возникла проблема. Ожидать нажатие кнопки с помощью 

while(digitalRead(prog_btn)!=HIGH || digitalRead(left_btn)!=HIGH || digitalRead(right_btn)!=HIGH || digitalRead(fwd_btn)!=HIGH || digitalRead(rwd_btn)!=HIGH);

не лучшее решение. Как реализовать групповую обработку кнопок или есть какой-то еще вариант?
Заранее, спасибо.

nik182
Offline
Зарегистрирован: 04.05.2015

Титановый волосипед.

Green
Offline
Зарегистрирован: 01.10.2015

Карбоновый лучше.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что значит "не лучшее решение". Чем оно плохо? Чем не устраивает? Чем какое-то другое лучше?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

у меня есть дорожный.

makavity
Offline
Зарегистрирован: 23.08.2019

Тем, что не срабатывает, программа не идет в этом случае дальше.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

кнопки все на один порт, читать порт махом, потом битовые маски.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

makavity пишет:

Тем, что не срабатывает, программа не идет в этом случае дальше.

это означает только одно, все ваши выводы имеют состояние HIGH, притянуты к плюсу.

makavity
Offline
Зарегистрирован: 23.08.2019

xDriver пишет:

это означает только одно, все ваши выводы имеют состояние HIGH, притянуты к плюсу.


Нет, проверял. Все выходи имеют состояние LOW, на схеме они подтянуты к земле, через резистор.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

makavity пишет:
Как реализовать групповую обработку кнопок или есть какой-то еще вариант?

Заранее, спасибо.

Научиться программировать .Заранее, пожалуста.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

makavity пишет:

xDriver пишет:

это означает только одно, все ваши выводы имеют состояние HIGH, притянуты к плюсу.


Нет, проверял. 

как?

makavity
Offline
Зарегистрирован: 23.08.2019

xDriver пишет:

makavity пишет:

xDriver пишет:

это означает только одно, все ваши выводы имеют состояние HIGH, притянуты к плюсу.


Нет, проверял. 

как?

Вывод состояний всех кнопок в серийник, при нажатии, менялось с 0 на 1.

b707
Offline
Зарегистрирован: 26.05.2017

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

makavity
Offline
Зарегистрирован: 23.08.2019

b707 пишет:

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

А кто-то выпендривается? Я пришел сюда за помощью, т.к мой вариант не работает. Условие для каждой кнопки есть.

b707
Offline
Зарегистрирован: 26.05.2017

makavity пишет:

А кто-то выпендривается? Я пришел сюда за помощью, т.к мой вариант не работает. Условие для каждой кнопки есть.

Тот код, что вы показали - это не условия для кнопок. Я имел в виду вот так:

if (digitalRead(prog_btn)!=HIGH) {
// обработка нажатия кнопки
}

if (digitalRead(right_btn)!=HIGH) {
// обработка нажатия кнопки
}

if (digitalRead(left_btn)!=HIGH) {
// обработка нажатия кнопки
}

......

 

makavity
Offline
Зарегистрирован: 23.08.2019

Да, я понимаю. Условия для кнопок есть в программе. Суть только в том, что зарегистрировать надо максимально 50 нажатий. Для этого я использовал цикл со счетчиком, если не поставить условие на ожидание нажатия хотя бы одной кнопки, цикл моментально прогоняется 50 раз. И вот сейчас возникла проблема с условием ожидания нажатия кнопки.

b707
Offline
Зарегистрирован: 26.05.2017

makavity пишет:

Да, я понимаю. Условия для кнопок есть в программе. Суть только в том, что зарегистрировать надо максимально 50 нажатий. Для этого я использовал цикл со счетчиком, если не поставить условие на ожидание нажатия хотя бы одной кнопки, цикл моментально прогоняется 50 раз. И вот сейчас возникла проблема с условием ожидания нажатия кнопки.

для обработки десятков кнопок их подключают в виде матрицы, это уменьшает число занятых выходов МК и упрощает обработку нажатий. Но это так, на будущее.

А пока Ваше обьяснение не дает понять, что у вас за проблема. Выкладывайте код, посмотрим

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

Loop это уже цикл, бесконечный. Вот в нем и прибавляйте свой счетчик нажатий, когда кнопка меняет свое состояние. Только почитайте еще про дребезг кнопок.

MaksVV
Offline
Зарегистрирован: 06.08.2015

Вам нужно зарегистрировать именно смену состояния кнопки, а вы, похоже, ставите условие просто по лог. Уровню (HIGH вроде в вашем случае)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

makavity пишет:

Тем, что не срабатывает, программа не идет в этом случае дальше.

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

Когда я посмотрел, я подумал, что они у Вас к питанию притянуты, а коль скорос они у Вас приятнуты к земле, то смотрите, что получается. Вот Ваша строка

while(digitalRead(prog_btn)!=HIGH || digitalRead(left_btn)!=HIGH || digitalRead(right_btn)!=HIGH || digitalRead(fwd_btn)!=HIGH || digitalRead(rwd_btn)!=HIGH);

Ваше выражение "digitalRead(prog_btn)!=HIGH" означает, что кнопка НЕ нажата.

Вы такие проверки объединили через || (ИЛИ). B итоге Ваше выражение получилось таким

ЕСЛИ НЕ НАЖАТА ХОТЯ БЫ ОДНА ИЗ КНЛОПОК! Чтобы цикл завершился, нужно, чтобы нажаты были все одновременно. Очевндно тут нужно либо не "!=", либо не "||". Испраьте и не парьтесь.

Вот, знаете, я поражаюсь, почему новички боятся написать лишнюю строчку и тем самым создают себе проблемы. Если бы Вы нажатось или не нажатость каждой кнопки оформили функцией, то ошибку увидели бы сразу.

makavity
Offline
Зарегистрирован: 23.08.2019

Благодарю всех. 

Green
Offline
Зарегистрирован: 01.10.2015

Типа, все свободны.

b707
Offline
Зарегистрирован: 26.05.2017

Green пишет:

Типа, все свободны.

типа что вы ко мне все пристали, я все равно ничего не понял

makavity
Offline
Зарегистрирован: 23.08.2019

Нет, я понял свою ошибку, за что очень признателен. ЕвгенийП дал мне понять мою ошибку, а Вы подсказали вариант с матрицей. Все предельно понятно.