2015-06-16 2 views
0

Я работаю в системе блокировки клавиатуры паролей на основе 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; 
    } 
+1

пытаются разместить этот вопрос в [http://arduino.stackexchange.com/](http://arduino.stackexchange.com/) – insilenzio

ответ

0

Ничего себе, этот код немного беспорядок (без обид).

То, что вы пытаетесь сделать, так же просто, как установка глобального bool; попробуйте создать bool, к которому вы будете обращаться, и установите значение false, как только пароль будет введен. Затем необходимо проверить, используется ли пароль повторно, if (String x = password1 && bool y = false) { // Then allow or disallow }

Таким образом, вы можете работать в своей основной петле и никогда не пропускать входящий символ.

+0

сильный Привет Не обижайтесь принято ... Ну могли бы вы любезно разработать изменение, которое вы предложили !! С уважением Fawad – Fawad

+0

Хорошо, так что вы попадаете в петлю. Попробуйте вывести некоторые println и проверить ваш отладочный файл, чтобы увидеть, где цикл застревает после ввода первого пароля, но, как я уже сказал, вы должны устанавливать логическое значение для каждого пароля, если он используется, задает логическое значение для этого пароля противоположным вы заявили об этом. Затем сделайте проверку в своем основном цикле на этот пароль и определите, было ли оно введено. Также помните, что добавление пароля без использования библиотеки конструктора паролей, скорее всего, просто даст вам ответ от мусора. –