Кодовый замок

_Sok_
Offline
Зарегистрирован: 04.12.2017

Есть скетч для Arduino под кодовый замок. Скомпилировал и залил на Mega 2560. Код по умолчанию "1234". При вводе верного кода срабатывает через раз, то есть первый раз - успех, второй раз - ошибка. И так постоянно. Можете сказать в чём может быть проблема? 

Часть кода: 

void keypadEvent(KeypadEvent eKey)
{
  switch (keypad.getState())
  {
    case PRESSED:
 
      int i;
      for ( i = 1; i <= 1; i++ )
      {
        digitalWrite(buzzer, HIGH);
        delay(50);
        digitalWrite(buzzer, LOW);
        delay(50);
      }
 
      Serial.print("Pressed: ");
      Serial.println(eKey);
 
      switch (eKey)
      {
        /*
          case '#':
          break;
 
          case '*':
          break;
        */
 
        default:
          ilosc = ilosc + 1;
          password.append(eKey);
      }
      //Serial.println(ilosc);
 
      if (ilosc == 1)
      {
        lcd.clear();
        lcd.setCursor(1, 0);
        lcd.print("   < PIN >");
        lcd.setCursor(0, 1);
        lcd.print("*_");
      }
      if (ilosc == 2)
      {
        lcd.clear();
        lcd.setCursor(1, 0);
        lcd.print("   < PIN >");
        lcd.setCursor(0, 1);
        lcd.print("**_");
      }
      if (ilosc == 3)
      {
        lcd.clear();
        lcd.setCursor(1, 0);
        lcd.print("   < PIN >");
        lcd.setCursor(0, 1);
        lcd.print("***_");
      }
      if (ilosc == 4)
      {
        lcd.clear();
        lcd.setCursor(1, 0);
        lcd.print("   < PIN >");
        lcd.setCursor(0, 1);
        lcd.print("****_");
      }
      if (ilosc == 5)
      {
        lcd.clear();
        lcd.setCursor(1, 0);
        lcd.print("   < PIN >");
        lcd.setCursor(0, 1);
        lcd.print("*****_");
      }
      if (ilosc == 6)
      {
        lcd.clear();
        lcd.setCursor(1, 0);
        lcd.print("   < PIN >");
        lcd.setCursor(0, 1);
        lcd.print("******_");
      }
      if (ilosc == 7)
      {
        lcd.clear();
        lcd.setCursor(1, 0);
        lcd.print("   < PIN >");
        lcd.setCursor(0, 1);
        lcd.print("*******_");
      }
      if (ilosc == 8)
      {
        lcd.clear();
        lcd.setCursor(1, 0);
        lcd.print("   < PIN >");
        lcd.setCursor(0, 1);
        lcd.print("********");
      }
 
      if (ilosc == dlugosc)
      {
        delay(250);
        checkPassword();
        ilosc = 0;
      }
  }
}
void checkPassword()
{
  if (password.evaluate())
  {
    int i;
    for ( i = 1; i <= 2; i++ )
    {
      digitalWrite(buzzer, HIGH);
      delay(70);
      digitalWrite(buzzer, LOW);
      delay(70);
    }
    ilosc = 0;
 
    Serial.println("Open");
 
    digitalWrite(ledRed, LOW);
    digitalWrite(ledGreen, HIGH);
 
    lcd.clear();
    lcd.setCursor(6, 0);
    lcd.print("Open");
    tone(4, 5000, 150);  //Звуковой сигнал, оповещающий об открытии замка
  servo.write(170);  //Замок открывается Servo в положение "Open"
   }
  else
  {
    int i;
    for ( i = 1; i <= 1; i++ )
    {
      digitalWrite(buzzer, HIGH);
      delay(200);
      digitalWrite(buzzer, LOW);
      delay(200);
    }
    ilosc = 0;
    password.reset();
 
    Serial.println("Wrong");
 
    digitalWrite(ledGreen, LOW);
    digitalWrite(ledRed, HIGH);
 
    lcd.clear();
    lcd.setCursor(5, 0);
    lcd.print("Wrong");
    lcd.setCursor(4, 1);
    lcd.print("Password");
    delay(2000);
 
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print("Authorize");
 
      }
}

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

password.reset();

 

_Sok_
Offline
Зарегистрирован: 04.12.2017

Penni пишет:

password.reset();

 

О, да! Спасибо большое! Помогло!