2016-12-07 70 views
0

因此,當我嘗試撤防系統時遇到了問題。當我將代碼上傳到arduino時,它會要求我輸入一個引腳,然後立即激活系統。但是當我嘗試停用系統時,它會佔用這個引腳,只是清除屏幕並執行我設置的mainScreen函數。佈防/撤防家庭安全系統arduino鍵盤液晶顯示器

的代碼如下規定:

#include "Keypad.h" 
#include "LiquidCrystal.h" 
#include "Password.h" 
LiquidCrystal lcd(0,1,10,11,12,13); 
char newPasswordString; //hold the new password 
char newPassword[4]; //charater string of newPasswordString 

//initialize password to 1234 
//you can use password.set(newPassword) to overwrite it 
Password password = Password("1234"); 

byte maxPasswordLength = 4; 
byte currentPasswordLength = 4; 
// keypad type definition 
const byte ROWS = 4; //four rows 
const byte COLS = 4; //three columns 
char keys[ROWS][COLS] = { 
{'1','2','3','A'}, 
{'4','5','6','B'}, 
{'7','8','9','C'}, 
{'*','0','#','D'} 
}; 
byte rowPins[ROWS] = {9,8,7,6}; //Rows 0 to 3 
byte colPins[COLS]= {5,4,3,2}; //Columns 0 to 3 
int count=0;  
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); 
void setup() 
{  
    lcd.begin(16, 2); 
    mainScreen(); 
} 
void loop(){ 
    char key = keypad.getKey(); 
    if (key != NO_KEY){ 
     delay(60); 
     switch (key){ 
     case 'A': activate(); break; 
     case 'B': break; 
     case 'C': break; 
     case 'D': deactivate(); break; 
     case '#': break; 
     case '*': break; 
     default: processNumberKey(key); 
     } 
    } 
} 
void processNumberKey(char key) { 
    lcd.print(key); 
    currentPasswordLength++; 
    password.append(key); 
    if(password.evaluate()){ 
    activate(); 
    } 
}  
void activate() { 
    if (password.evaluate()){ 
     lcd.clear(); 
     lcd.print("Activated."); 
     delay(1000); 
     mainScreen(); 
    } else { 
     lcd.clear(); 
     lcd.print("Wrong Password!"); 
      mainScreen();  
    } 
} 
void deactivate(){ 
    if (password.evaluate()){ 
     lcd.clear(); 
     lcd.print("Deactivated."); 
     delay(1000); 
    } else { 
     lcd.clear(); 
     lcd.print("Wrong Password!"); 
     mainScreen(); 
    } 
} 
void mainScreen(){ 
    lcd.clear(); 
    lcd.print("Enter Pin:"); 
    keypad.getKey(); 
    } 
+0

不需要針腳,只需按D取消激活... – dandavis

+0

如何讓它接受針腳 –

回答

0

正如Arduino keypad 4x4 to LCD activate/deactivate,你必須保持目前的狀態,注意,你必須CLEARpasswordcurrenPasswordLength。請參閱答案中的WORKING示例。

它不會幫助您設置byte currenPasswordLength = 4。如果你按下第一個鍵,它會增加到5,下一個鍵增加到6,等等。

在256個按鍵之後你會再次得到4個!!!!!!!由於您沒有清除以前檢查過的密碼,因此您將得到「密碼錯誤」結果(並最終導致堆棧溢出)。