#include <Keypad.h> //引用函式庫
const byte ROWS = 4; //4列(rows)
const byte COLS = 4; //4行(columns)
char keys[ROWS][COLS] = { //定義矩陣鍵盤對應的陣列
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'E', '0', 'F', 'D'}
};
byte rowPins[ROWS] = { 19, 18, 5, 17};
byte colPins[COLS] = {25, 26, 27, 14};
//建立物件,並加入剛才設定的參數
Keypad myPad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char userInput[4]; //宣告陣列,存放使用者輸入字元
char *password = "1234"; //正確密碼。字元指標等價於字元陣列
byte count = 0 ; //計數輸入的字元數
void setup() {
Serial.begin(9600); //啟動序列埠傳輸,速度9600bps
pinMode(4, OUTPUT); //LED燈
}
void loop() {
char key = myPad.getKey(); //取得按下的鍵
if (key && count<4) { //如果有按下按鍵,及陣列未滿
Serial.print(key);
userInput[count] = key ; //把字元放入陣列中
count++; //計數值加1
}
//輸入了4個字元,並比對密碼
if (count == 4 && memcmp(userInput, password, 4) ==0 ) { //如果輸入和密碼相同
digitalWrite(4, HIGH); //led亮
Serial.println("解鎖");
delay(2000); //延遲2秒後,再度上鎖
digitalWrite(4, LOW); // led滅
Serial.println("2秒後自動上鎖");
count = 0; //將計數值清空,便可重新輸入
}
else if (count == 4 && memcmp(userInput, password, 4) != 0) { //輸入和密碼不同
Serial.println("密碼錯誤,請重新輸入");
count = 0; //將計數值清空,便可重新輸入
}
}