Lock Code Буззер и светодиод

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

Доброго времени суток! В простыне кнопки нажимаются в порядке - 2,3,1, после чего загорается светодиод.  Если кнопки нажаты не в правильном порядке, должен пищать буззер. Подскажите куда додумать, сразу отрабатывает буззер. Если закомментить for, то работает, при наборе кода в правильном порядке загорается свтодиод.

 

const int btn1 = 6;
const int btn2 = 9;
const int btn3 = 10;
const int buzz = 2;
const int led = 5;
const int led1 = 3;
int i = 0;

byte val3 = 0;
bool state3 = 0;
byte val1 = 0;
byte val2 = 0;
bool state1 = 0;
bool state2 = 0;

void setup() {
pinMode (btn1, INPUT);
pinMode (btn2, INPUT);
pinMode (btn3, INPUT);
pinMode (buzz, OUTPUT);
pinMode (led, OUTPUT);
pinMode (led1, OUTPUT);

}

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);
}

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

Мужики, ну пришли на форум, ну посмотрите его правила, прежде, постить!

Ну, блин, ну вот как обуждать Ваш код, если он вставлен таким образом? Даже номеров строк нет!

Блин, я сегодня что-то добрый, обычно я этого не делаю ...

const int btn1 = 6;
const int btn2 = 9;
const int btn3 = 10;
const int buzz = 2;
const int led = 5;
const int led1 = 3;
int i = 0;

byte val3 = 0;
bool state3 = 0;
byte val1 = 0;
byte val2 = 0;
bool state1 = 0;
bool state2 = 0;


void setup() {
  pinMode (btn1, INPUT);
  pinMode (btn2, INPUT);
  pinMode (btn3, INPUT);
  pinMode (buzz, OUTPUT);
  pinMode (led, OUTPUT);
  pinMode (led1, OUTPUT);

}


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);
}

sash39 пишет:

сразу отрабатывает буззер

А что, должно быть не так?

Смотрим код на строки 62-67. Эти строки находятся под каким-нибудь условием? Внутри какого-нибудь if'а? Вы там видите if? И я не вижу! Значит, он (пищалка) должен верещать при каждом проходе loop, что он и делает.

Всё работает правильно :)

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

Прошу прощения, не читал правила, и я пока рак=)

Можно ли заставить дождаться события (напрмер, нажатия кнопки)?

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

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

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

Ясно. Код за меня писать не требуется, мне самому интересно.

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

Я бы помог. Но я пишу в  "неправильном программировании".