BASIC4MCU | 질문게시판 | 지문인식기 코드 질문
페이지 정보
작성자 흔한공대생 작성일2020-11-26 16:10 조회5,273회 댓글1건본문
여기서 스위치를 눌렀을때 다시 지문인식을 다시하는 걸로 돌아가고 싶은데 어떻게 해야될지 모르겠네요
const int Relaypin = 4;
const int Switch = 5;
int val= 0;
int old_val = 0;
int state = 0;
int data = 0;
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
void setup() {
//시리얼 통신 시작
Serial.begin(9600);
while (!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
Serial.println("\n\nAdafruit finger detect test");
// set the data rate for the sensor serial port
//지문인식 센서 통신 시작
finger.begin(57600);
//지문인식 디바이스 연결 확인
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
//등록된 지문 유무 판단
finger.getTemplateCount();
Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
Serial.println("Waiting for valid finger...");
pinMode(Switch, INPUT);
pinMode(Relaypin, OUTPUT);
}
void loop()
{
///Switch를 눌렀을때 함수 불러옴
if(data == 1){
Serial.println("일치");
val = digitalRead(Switch);
if((val==HIGH)&&(old_val==LOW))
{
state = 1-state;
delay(50);
}
old_val = val;
if(state == 1)
{
digitalWrite(Relaypin,HIGH);
}
else
{
digitalWrite(Relaypin,LOW);
}
}
else {
data = getFingerprintIDez();
digitalWrite(Switch, LOW);
digitalWrite(Relaypin, LOW);
}
delay(50); //don't ned to run this at full speed.
}
uint8_t getFingerprintID() {
uint8_t p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println("No finger detected");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK success!
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
// OK converted!
p = finger.fingerFastSearch();
if (p == FINGERPRINT_OK) {
Serial.println("Found a print match!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
Serial.println("Did not find a match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return -1;
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
댓글 1
조회수 5,273master님의 댓글
master 작성일
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3);
Adafruit_Fingerprint finger=Adafruit_Fingerprint(&mySerial);
//
const int Relaypin=4;
const int Switch=5;
//
int val=0;
int old_val=0;
int state=0;
int data=0;
//
void setup(){
Serial.begin(9600); while(!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
Serial.println("\n\nAdafruit finger detect test");
//지문인식 센서 통신 시작
finger.begin(57600);
//지문인식 디바이스 연결 확인
if (finger.verifyPassword()){ Serial.println("Found fingerprint sensor!"); }
else{ Serial.println("Did not find fingerprint sensor :("); while (1)delay(1); }
//등록된 지문 유무 판단
finger.getTemplateCount();
Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
Serial.println("Waiting for valid finger...");
pinMode(Switch,INPUT);
pinMode(Relaypin,OUTPUT);
}
//
void loop(){
///Switch를 눌렀을때 함수 불러옴
if(data==1){
Serial.println("일치");
val=digitalRead(Switch);
if((val==HIGH)&&(old_val==LOW)){ state=1-state; delay(50); }
old_val=val;
if(state==1){ digitalWrite(Relaypin,HIGH); } else{ digitalWrite(Relaypin,LOW); }
}
else{
data=getFingerprintIDez();
digitalWrite(Switch,LOW);
digitalWrite(Relaypin,LOW);
}
delay(50); //don't ned to run this at full speed.
}
//
uint8_t getFingerprintID(){
uint8_t p=finger.getImage();
switch (p){
case FINGERPRINT_OK: Serial.println("Image taken"); break;
case FINGERPRINT_NOFINGER: Serial.println("No finger detected"); return p;
case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p;
case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); return p;
default: Serial.println("Unknown error"); return p;
}
// OK success!
p=finger.image2Tz();
switch (p){
case FINGERPRINT_OK: Serial.println("Image converted"); break;
case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p;
case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p;
case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return p;
case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return p;
default: Serial.println("Unknown error"); return p;
}
// OK converted!
p=finger.fingerFastSearch();
if (p==FINGERPRINT_OK) { Serial.println("Found a print match!"); }
else if (p==FINGERPRINT_PACKETRECIEVEERR){ Serial.println("Communication error"); return p; }
else if (p==FINGERPRINT_NOTFOUND) { Serial.println("Did not find a match"); return p; }
else { Serial.println("Unknown error"); return p; }
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
//
// returns -1 if failed,otherwise returns ID #
int getFingerprintIDez(){
uint8_t p=finger.getImage(); if (p !=FINGERPRINT_OK)return -1;
p=finger.image2Tz(); if (p !=FINGERPRINT_OK)return -1;
p=finger.fingerFastSearch(); if (p !=FINGERPRINT_OK)return -1;
// found a match!
Serial.print("Found ID #"); Serial.print(finger.fingerID);
Serial.print(" with confidence of "); Serial.println(finger.confidence);
return finger.fingerID;
}
여기서
if(data==1){
data초기값은 0인데 1이 될 수 있나요?
ID가 1인가보죠?