Я работаю в системе блокировки клавиатуры паролей на основе Arduino UNO. Я использовал библиотеку паролей с сайта Arduino в.программного обеспечения Arduino (Выход из одной петли и приготовьтесь к другому
То, что я пытаюсь выполнить установить два пароля, а именно pass1 и pass 2.
Условие состоит в том, что эта схема прикреплена к затвору, если пользователь 1 говорит, что знает pass1, после ввода прохода ворота разблокируются в течение 10 секунд, а pass1 становится недействительным т.е. не может использоваться в будущем. Однако, если пользователь 2 приходит и знает pass2, после ввода pass2, ворота будут открыты в течение 10 секунд, а затем pass2 станет недействительным, в двух словах пароль может использоваться только один раз. Ниже приведен код. Проблема с этим кодом заключается в том, что при выполнении pass1 система не принимает pass2 до тех пор, пока система не будет сброшена.
#include <Password.h>
#include <LiquidCrystal.h>
#include <Password.h>
#include <Keypad.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
Password password1 = Password("1234");
Password password2 = Password("4567");
int ledpin = A5;
int a=0;
const byte ROWS = 4; // Four rows
const byte COLS = 4; // columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = { A0, A1, A2, A3 };/
byte colPins[COLS] = { 8, 9, 10, 11 };
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
lcd.begin(16,2);
keypad.addEventListener(keypadEvent); //add an event listener for this keypad
}
void loop(){
keypad.getKey();
}
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
lcd.println(eKey);
switch (eKey){
case '*':
checkPassword();
break;
case '#':
password1.reset();
password2.reset();
break;
default:
password1.append(eKey);
password2.append(eKey);
} return ;
}
}
void checkPassword(){
if (password1.evaluate()){
lcd.setCursor(0,1);
lcd.println("code1 OK");
delay (2000);
digitalWrite(ledpin, HIGH);
delay(10000);
digitalWrite(ledpin,LOW);
password1.append('1');
lcd.clear();
return;
}else if (password2.evaluate()){
lcd.setCursor(0,1);
lcd.println("code2 OK");
delay (2000);
digitalWrite(ledpin,HIGH);
delay(10000);
digitalWrite(ledpin,LOW);
password2.append('2');
lcd.clear();
return;
}else {
lcd.setCursor(0,1);
lcd.println("Wrong");
delay(2000);
lcd.clear();
lcd.print("Wait for 5 Sec");
delay(5000);
lcd.clear();
return;
//add code to run if it did not work
}return;
}
пытаются разместить этот вопрос в [http://arduino.stackexchange.com/](http://arduino.stackexchange.com/) – insilenzio