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

i78
Offline
Зарегистрирован: 27.02.2016

Есть 2 кнопки. Как написать код, чтобы программа ждала пока не нажата кнопка 1 или 2. Если нажать кнопку 1 выполняется одно действие , если нажата кнопка 2 - другое, если нажаты одновременно кнопка 1 и 2 -третье действие, а если вообще не нажаты кнопки то нужно ждать пока не будут нажаты кнопки

не могу написать просто через условие if... else.

i78
Offline
Зарегистрирован: 27.02.2016

хотя бы намек дайте на какую конструкцию  условных операторов смотреть, можно ли внутрь конструкции do......while вставить еще условный оператор.

 

okta
Offline
Зарегистрирован: 10.01.2015

кнопки как подключены?

если просто на разных пинах, то алгоритм:

в переменную1 сохраняем нажата ли кнопка 1 (например , 0-отпущена 1-нажата)

в переменную2 сохраняем нажата ли кнопка 2 (также как с кнопкой 1)

if (переменная1==1 && переменная2==1){обе кнопки нажаты}

else if (переменная1==1){нажата кнопка один}

else if (переменная2==1){нажата кнопка два}

i78
Offline
Зарегистрирован: 27.02.2016

кнопки на разных пинах

а если кнопки не нажаты то как вернуться чтобы ждать нажатия кнопки? иначе если кнопки не были нажаты то код выполняется дальше, а мне нужно продолжать только после факта нажатия.

okta
Offline
Зарегистрирован: 10.01.2015

какой есть код сейчас?

i78
Offline
Зарегистрирован: 27.02.2016

кода нет, я хочу понять через какой оператор возможно это сделать. Допустим через if мы узнали что ни одна из двух кнопок не была нажата, то каким способом можно вернутьмся в начало и ждать нажатия кнопки. Если сделать цикл через do... while, например:

do

считать состояние кнопки 1,

считать состояние кнопки 2

while ( if нажата кнопка 1 - делать действие 1, if нажата кнопка 2- делать действие 2, if нажата кнопка 1 и 2 делать действие 3)

i78
Offline
Зарегистрирован: 27.02.2016

правильно ли я понимаю что при нажатии кнопки цикл прекратится,  а если нажатия не было то считывание состояния кнопок зациклится, вообще можно ли внутрь while встроить условный оператор?

okta
Offline
Зарегистрирован: 10.01.2015

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

i78
Offline
Зарегистрирован: 27.02.2016

okta пишет:

описнное можно сделать множеством способов.

самый простой?

железо -ардуино про мини

okta
Offline
Зарегистрирован: 10.01.2015

Результат требуемый не описали. Потому сферический пример в вакууме. Цикл будет крутиться, пока не будут нажаты обе кнопки:

переменная1=0;

переменная2=0;

переменная3=0;

do{

переменная1=считать состояние кнопки 1;

переменная2=считать состояние кнопки 2;

if(переменная1==1 && переменная2==1){переменная3=1;}

переменна1=0;

переменная2=0;

}while(переменная3==0)

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

условие выхода из цикла тоже можно переписать как хочешь.

bwn
Offline
Зарегистрирован: 25.08.2014

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

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

bwn пишет:

Сделали что надо, вернулись взад.

Как-то стрёмно.... И почему туда-то сразу ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

нельзя ли CASEми или IFами обойти это место ?

bwn
Offline
Зарегистрирован: 25.08.2014

SU-27-16 пишет:

bwn пишет:

Сделали что надо, вернулись взад.

Как-то стрёмно.... И почему туда-то сразу ?

Где взял, туда и вернул.))))