정보나눔

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

아두이노 금고
한우영 | 2015-07-17

아두이노 금고 만드는 도중.. 지문 인식기를 살려하니.. 비싸서 못 사겠습니다.

그래서 혹시 키패드로만 하는 코드를 공유해 주실분 있나요?

그리고 lcd가 

위에 16줄이 글자도 안뜨고 그냥 안보이지도 않고 다 보입니다. (백라이트만 비칩니다.)

이거 어쩌죠?(코드 다 써봤습니다.)

 

프로필사진

SaBo 2015-07-20 16:05:15

안녕하세요 질문자님. 아두이노 코드의 경우 지문 인식기에 해당하는 함수와 헤더만 제거해주시면 

간단히 키패드로 구현이 가능합니다.

 

#include "SoftwareSerial.h"
#include <LiquidCrystal.h>
#include <Keypad.h>
#include <Servo.h> 

Servo locker;
LiquidCrystal lcd(13, 12, 11, 9, A1, A0);
char secretCode[4] = {'1', '2', '3', '4'};
char input[4];
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, 1};

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)
  {
    input_key();            // Password Input Mode
    password();             // Confirm Password
    password_check();       // Display current state
  }
  if(a==1)                // Correct Password & registered Fingerprint
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    pinMode(10,OUTPUT);
    locker.write(180);      // OPENING
    lcd.print("perfect complete");
    delay(2000);
    pinMode(10,INPUT);
    key = keypad.waitForKey();
    if(key == '*')
    {  
      a=0;                  // Clear Flag
      lcd.clear();
      lcd.setCursor(0,0);
      pinMode(10,OUTPUT);
      locker.write(90);     // Closing
      lcd.print("    Lock ON");
      delay(2000);
      pinMode(10,INPUT);  
    }
  }
}

void input_key()
{
  lcd.clear();                      
  lcd.setCursor(0, 0);
  lcd.print("    Password");
  for (i = 0; i < 4; i++)
  {
    key = keypad.waitForKey();
    input[i] = key;
    lcd.setCursor(i + 6, 1);
    lcd.print("*");
    Serial.print(input[i], DEC);
    Serial.print("*");
    if (i == 3)
    {
      Serial.println("");
    }
  }
}

void password()
{
  wrong = 0;
  for (j = 0; j < 4; j++)
  {
    if (secretCode[j] == input[j])
    {
    }
    else if (secretCode[j] != input[j])
    {
      wrong += 1;
    }
  }
}

void password_check()
{
  if (wrong == 0)
  {
    Serial.println("correct");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("      PASS");
    delay(2000);
    a=1;
    lcd.clear();
  }
  else if (wrong != 0)
  {
    Serial.println("wrong");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("     wrong");
    delay(2000);
    a=0;
    lcd.clear();
    wrong = 0;
  }
}

 

 

현재 DIY금고 하드웨어를 가지고 직접 코딩한게 아니라 오류가 날수 있지만 이런식으로 지문인식 패드에 관련된 것만 제거해주시면 됩니다.

LCD의 경우 정확한 증상이 어떤지 알아야 합니다~ 만약 LCD전체가 먹통이라면 데이터버스 연결을 확인해주셔야 합니다. LiquidCrystal

함수에 맞게 연결이 되었는지 확인해주시고 만약 회로적으로 연결에 문제가 없다면 LCD 자체 문제 일 수 있습니다.

LCD모듈 뒷면에 보시면 검정색 금속조각이 6개 튀어나와있어 살짝 휘어져있는데 그 것들이 PCB 기판에 제대로 접지가 되었는지 확인해

주셔야 합니다. 

프로필사진

우노호환보드 2015-09-19 16:54:04

소스코드에서

{'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}

이부분을 4*3키패드로 쓸때 A,B,C,D를 안적어도 되나요?

이전글   |    문의 2015-07-17
다음글   |    아두이노 금고 질문. 2015-07-21