2015-06-16 45 views
0

我基於Arduino的UNO鍵盤密碼鎖系統的工作。我已經使用了從Arduino的網站密碼庫。Arduino的軟件(從一個循環退出,並準備另一

我試圖做到的是設置兩個密碼,即pass1和pass2。

條件是該電路連接到門,如果用戶1說知道pass1,進入門後門將解鎖10秒,pass1變爲無效即不能在未來的使用。但是,如果用戶2來了,知道PASS2,進入PASS2後,門打開10秒鐘,然後PASS2變爲無效,簡而言之密碼只能使用一次。我attachi下面的代碼。這個代碼的問題是,當執行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; 
    } 
+1

請嘗試在[http://arduino.stackexchange.com/](http://arduino.stackexchange.com/)中發佈此問題 – insilenzio

回答

0

哇,代碼有點亂(沒有冒犯)。

什麼你正在試圖做的是設置一個全局布爾那樣簡單;嘗試創建一個你將訪問的bool,並在輸入密碼後設置爲false。然後檢驗一個條件,如果密碼被再次使用,if (String x = password1 && bool y = false) { // Then allow or disallow }

這樣您可以在主循環內工作,不會錯過任何來電字符。

+0

強大您好 沒有采取進攻... 那麼你能不能詳細說明改變你的建議! 問候 Fawad – Fawad

+0

好了,你要陷入一個循環。嘗試彈出一些的println的,並檢查您的調試,看看一旦進入第一密碼環卡住,但就像我說的,你應該設置每個密碼一個布爾值,如果它是用來設置布爾爲密碼到對面的那你宣佈爲。然後在你的主循環中檢查密碼並確定它是否被輸入。另外請記住,在不使用密碼構造函數庫的情況下追加密碼很可能只會給你一個垃圾回答。 –