klant님이 하신 금고소스를 이용하여 키패드#을 누르면 비밀번호를 설정하고싶은데 조언을 구할수있을까요..
#include <LiquidCrystal.h>
#include <Keypad.h>
#include <Servo.h>
Servo locker;
LiquidCrystal lcd(13, 12, 11, 9, A1, A0);
char secretCode[6] = {'1','2','3','1','2','3'};
char input[6];
char key;
int position = 0;
int wrong = 0;
int i = 0;
int j = 0;
int pos = 0;
int a=0;
int b=0;
const byte rows = 4;
const byte cols = 4;
boolean c=false;
char keys[rows][cols] =
{
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[rows] = {8, 7, 6, 5}; //키패드 행 핀번호
byte colPins[cols] = {4, 3, 2, A2}; //키패드 열 핀번호
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
locker.attach(10);
locker.write(90);
pinMode(10,INPUT); //모터 핀번호에 맞는 모드설정
}
void loop() //계속 루프 된다
{
while(a==0) //a가 0이라면 밑에 써있는 함수 실행
{
input_key(); // 암호입력모드
password(); // 비밀번호 확인
password_check(); // 현재 상태 표시
}
if(a==1) // 올바른 패스워드 일경우
{
lcd.clear();
lcd.setCursor(0, 0);
pinMode(10,OUTPUT);
locker.write(180); // 모터 180도 돌음
lcd.print("perfect complete"); //완료
delay(2000); //딜레이 2초
pinMode(10,INPUT);
key = keypad.waitForKey(); //사용자가 * 을 누를때까지 대기한다.
if(key == '*') //* 을 누르면 잠김
{
a=0; // 플래그 지우기(지우는 이유는 위에 loop부분이 다시 돌기위해서)
lcd.clear(); //LCD 클리어
lcd.setCursor(0,0);
pinMode(10,OUTPUT);
locker.write(90); // 모터 90도 돌고 CLOSE
lcd.print(" Lock ON"); //lock on 표시
delay(2000); //딜레이 2초
pinMode(10,INPUT);
}
}
}
void input_key()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Password");
for (i = 0; i < 6; i++)
{
key = keypad.waitForKey();
input[i] = key;
lcd.setCursor(i + 6, 1);
lcd.print("*"); //비밀번호 * 표시
}
}
void password()
{
wrong = 0;
for (j = 0; j < 6; j++)
{
if (secretCode[j] == input[j])
{
}
else if (secretCode[j] != input[j])
{
wrong += 1;
}
}
}
void password_check()
{
if (wrong == 0)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" PASS");
delay(2000);
a=1;
lcd.clear();
}
else if (wrong != 0)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" wrong");
delay(2000);
a=0;
lcd.clear();
wrong = 0;
}
}
|