정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

소스코드 질문
우노호환보드 | 2015-11-12

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;
  }
}

이전글   |    안녕하세요 2015-11-12
다음글   |    아두이노 Tian처럼 BLE와 WiFi 모듈이 모두 탑재된 보드를 만들 계획은 없는지요?... 2015-11-14