Lock_Code

sash39
Offline
Зарегистрирован: 22.07.2016

Доброго времени суток! Подскажите пожалуйста, необходимо нажать 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);*/
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Что такое комбинация?

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

sash39
Offline
Зарегистрирован: 22.07.2016

Комбинация, проще говоря код, как в замке, в данной случае 2-3-1, после чего загорается светодиод, если 1-2-3 или иной, пищит спикер. Пищание я пока закоментил, т.к. оно возникает сразу после того, как вгрузили скетч. А нужно, чтобы пищал только тогда, когда набрали неверную комбинацию (код).

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

231 и 123 - это одна и та же комбинация - она состояит из ордних и тех же кнопок.

147 и 264 - разные комбинации.

sash39
Offline
Зарегистрирован: 22.07.2016

Извиняюсь, не так объяснил или я не прав? Если я нажимаю 2 кнопку, затем 3, затем 1, то светодиод загорается. Если меняем порядок нажатия - пищит спикер, так должно быть. Но спикер пищит с самого начала.

vvadim
Offline
Зарегистрирован: 23.05.2012

sash39 пишет:

Извиняюсь, не так объяснил или я не прав? Если я нажимаю 2 кнопку, затем 3, затем 1, то светодиод загорается. Если меняем порядок нажатия - пищит спикер, так должно быть. Но спикер пищит с самого начала.

надо писать новый код - ваш не соответствует вашей задаче

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Так у Вас последовательность, а не комбинация.

Я посмотрел в коде - все кнопки опрашиваются одномоментно.

Собственно, vvadim прав - Вы пытаетесь анализировать комбинацию, а не последовательность.

Для начала попытайтесь составить алгормитм по-русски. Вот представьте, Вы сидите и перед Вами 3 лампы, загорающиеся каждаяф при нажатии своей кнопки. И кто-то другой эти кнопки нажимает. Как Вы будете определять, кнопки нажаты в нужной последовательности или нет?

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Сделайте кнопку Enter, по каждой кнопке пишите в массив длиной 4 байта, причем перед тем как писать - сдвигать, то есть в первый байт записать второй, во второй - третий, в третий - четвертый, в четвертый - то что нажали. Если в массиве оказалось 2, 3, 1, Ent - вкл светодиод, если что-то, что-то, что-то, Ent - пищать, если что-то и Ent не на последнем месте - ничего не делать.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Вообще-то у ТС, насколько я помню, не было ничего насчет Enter, и совершенно непонятно, зачем она нужна. Система должна решать, что делать по третьему нажатию ЛЮБОЙ кнопки, а не кнопки Enter.

2. Я посоветовал ТС, что делать. Думаю, это нужно сделать в любом случае, т.к. иначе он даже не может толково объяснить, что ему нужно. Из-за чего и появляются посты типа предыдущего.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

andriano пишет:

Система должна решать, что делать по третьему нажатию ЛЮБОЙ кнопки, а не кнопки Enter.

нельзя разрешать системе решать, иначе после третьго нажатия система оторвёт тебе голову или потушит Солнце.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Клапауций 232 пишет:

... система оторвёт тебе голову или потушит Солнце.

Так кто ж ей даст?

(только не надо отвечать "я!")

sash39
Offline
Зарегистрирован: 22.07.2016

О, вот что значит, уехал на работу.. Благодарю за ваши советы, принял к сведению, что я РАК)) Буду разбираться с кодом.

Старался делать в рамках вот этого курса http://robotclass.ru/wp-content/uploads/2016/07/Arduino-basic-2.pdf самое последнее задание. Там даже millis нельзя использовать, все delay да delay..