Arduino软件(从一个循环退出并为另一个循环做好准备



我正在研究基于Arduino UNO的键盘密码锁定系统。我使用了Arduino网站上的密码库。

我试图完成的是设置两个密码,即pass1和pass2。

条件是该电路连接到一个门上,如果用户 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;
  }

哇,代码有点混乱(没有冒犯)。

您要做的就像设置全局布尔值一样简单;尝试创建一个布尔值,一旦输入密码,您将访问该布尔值并将其设置为 false。然后检查是否再次使用密码的条件 if (String x = password1 && bool y = false) { // Then allow or disallow }

通过这种方式,您可以在主循环中工作,而不会错过传入的字符。

相关内容

  • 没有找到相关文章

最新更新