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..