Lock_Code
- Войдите на сайт для отправки комментариев
Ср, 21/09/2016 - 17:26
Доброго времени суток! Подскажите пожалуйста, необходимо нажать 3 кнопки в правильной комбинации, если нажаты правильно - горит светодиод, если неправильно - пищит буззер 5 раз. Можно ли заставить дождаться события (напрмер, нажатия кнопки)?
void loop() { digitalWrite (led, HIGH); val2 = digitalRead (btn2); if (val2== HIGH) { state2=!state2;} if (state2==true) { val3 = digitalRead (btn3); if (val3== HIGH) { state3=!state3;} if (state3==true) { val1 = digitalRead (btn1); if (val1== HIGH) { state1=!state1;} if (state1==true){ digitalWrite (led1, HIGH); delay (200); } } } else { digitalWrite (led1, LOW); } /*for (i=0; i<5; i=i+1) { digitalWrite (buzz, HIGH); //перевод вывода в активное состояние delay (300); digitalWrite (buzz, LOW); //перевод вывода в неактивное состояние delay (300); } delay (1000);*/ }
Что такое комбинация?
Если нужно проверить, нужная ли комбинация кнопок нажата, лучше проверять их не по одной, а проверить сразу все - по маске.
Комбинация, проще говоря код, как в замке, в данной случае 2-3-1, после чего загорается светодиод, если 1-2-3 или иной, пищит спикер. Пищание я пока закоментил, т.к. оно возникает сразу после того, как вгрузили скетч. А нужно, чтобы пищал только тогда, когда набрали неверную комбинацию (код).
231 и 123 - это одна и та же комбинация - она состояит из ордних и тех же кнопок.
147 и 264 - разные комбинации.
Извиняюсь, не так объяснил или я не прав? Если я нажимаю 2 кнопку, затем 3, затем 1, то светодиод загорается. Если меняем порядок нажатия - пищит спикер, так должно быть. Но спикер пищит с самого начала.
Извиняюсь, не так объяснил или я не прав? Если я нажимаю 2 кнопку, затем 3, затем 1, то светодиод загорается. Если меняем порядок нажатия - пищит спикер, так должно быть. Но спикер пищит с самого начала.
надо писать новый код - ваш не соответствует вашей задаче
Так у Вас последовательность, а не комбинация.
Я посмотрел в коде - все кнопки опрашиваются одномоментно.
Собственно, vvadim прав - Вы пытаетесь анализировать комбинацию, а не последовательность.
Для начала попытайтесь составить алгормитм по-русски. Вот представьте, Вы сидите и перед Вами 3 лампы, загорающиеся каждаяф при нажатии своей кнопки. И кто-то другой эти кнопки нажимает. Как Вы будете определять, кнопки нажаты в нужной последовательности или нет?
Сделайте кнопку Enter, по каждой кнопке пишите в массив длиной 4 байта, причем перед тем как писать - сдвигать, то есть в первый байт записать второй, во второй - третий, в третий - четвертый, в четвертый - то что нажали. Если в массиве оказалось 2, 3, 1, Ent - вкл светодиод, если что-то, что-то, что-то, Ent - пищать, если что-то и Ent не на последнем месте - ничего не делать.
1. Вообще-то у ТС, насколько я помню, не было ничего насчет Enter, и совершенно непонятно, зачем она нужна. Система должна решать, что делать по третьему нажатию ЛЮБОЙ кнопки, а не кнопки Enter.
2. Я посоветовал ТС, что делать. Думаю, это нужно сделать в любом случае, т.к. иначе он даже не может толково объяснить, что ему нужно. Из-за чего и появляются посты типа предыдущего.
Система должна решать, что делать по третьему нажатию ЛЮБОЙ кнопки, а не кнопки Enter.
нельзя разрешать системе решать, иначе после третьго нажатия система оторвёт тебе голову или потушит Солнце.
... система оторвёт тебе голову или потушит Солнце.
Так кто ж ей даст?
(только не надо отвечать "я!")
О, вот что значит, уехал на работу.. Благодарю за ваши советы, принял к сведению, что я РАК)) Буду разбираться с кодом.
Старался делать в рамках вот этого курса http://robotclass.ru/wp-content/uploads/2016/07/Arduino-basic-2.pdf самое последнее задание. Там даже millis нельзя использовать, все delay да delay..