디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[일반] 옛다 코드

ㅇㅇ(113.198) 2024.05.27 20:12:47
조회 60 추천 0 댓글 0
														

// Rev 1.0


#include <Adafruit_Fingerprint.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);           // LCD pin map

int RELAY = A1;
int BUZZER = 12;

int lcd_key     = 0;
int adc_key_in  = 0;

#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

int read_LCD_buttons(){               // scan the button keys
    adc_key_in = analogRead(0);       // read the analog value of the button

    if (adc_key_in > 1000) return btnNONE;

    if (adc_key_in < 50)   return btnRIGHT;  
    if (adc_key_in < 250)  return btnUP;
    if (adc_key_in < 450)  return btnDOWN;
    if (adc_key_in < 650)  return btnLEFT;
    if (adc_key_in < 850)  return btnSELECT;  

    return btnNONE;                // fails to read the key
}

Adafruit_Fingerprint finger = Adafruit_Fingerprint(Serial);

volatile unsigned char FPMXX_RECEIVE_BUFFER[64];

unsigned char FPMXX_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF};  // protocol header
unsigned char FPMXX_Get_Img[6] = {0x01,0x00,0x03,0x01,0x0,0x05};    // get the fingerprint image
unsigned char FPMXX_Save_Finger[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19};// save the fingerprint to the designated area of BUFFER1
unsigned char FPMXX_Search[11]={0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x03,0xE7,0x0,0xF8}; // search the fingerprint in BUFFER1 scanning 0 to 999
unsigned char FPMXX_Get_Device[6] = {0x01,0x00,0x03,0x16,0x00,0x1A};
unsigned char FPMXX_Get_Templete_Count[6] ={0x01,0x00,0x03,0x1D,0x00,0x21 }; // get the total of the stored fingerprints
unsigned char FPMXX_Img_To_Buffer1[7]={0x01,0x0,0x04,0x02,0x01,0x0,0x08}; // save the fingerprint image to BUFFER1
unsigned char FPMXX_Img_To_Buffer2[7]={0x01,0x0,0x04,0x02,0x02,0x0,0x09}; // save the fingerprint image to BUFFER2
unsigned char FPMXX_Reg_Model[6]={0x01,0x0,0x03,0x05,0x0,0x09}; // systhesize the images of BUFFER1 and BUFFER2
unsigned char FPMXX_Delete_All_Model[6]={0x01,0x0,0x03,0x0d,0x00,0x11};// delete all the stored fingerprints


volatile unsigned char Menu_Max_Item = 3;
volatile unsigned char Menu_Select = 1;

void Buzzer_Init()
{
    pinMode(BUZZER, OUTPUT);
    digitalWrite(BUZZER, LOW);
}

void Buzzer_On(unsigned char num=1)
{
    int i = 0;
    for(i=0;i<num;i++)
    {
        digitalWrite(BUZZER, HIGH);
        delay(150);
        digitalWrite(BUZZER, LOW);
        delay(100);
    }
}

void RELAY_Init()
{
    pinMode(RELAY, OUTPUT);
    digitalWrite(RELAY, HIGH);   // initialize the relay module to HIGH (RELAY OFF)
}

void testRelay()
{

    digitalWrite(RELAY, LOW);   // RELAY ON
    delay(1000);
    digitalWrite(RELAY, HIGH);   // RELAY OFF
}

void FPMXX_Cmd_Receive_Data(unsigned int r_size)
{
    int i = 0;
   
    while(1)
    {
         if(Serial.available()==r_size)
         {
             for(i=0;i<r_size;i++)
             {
                 FPMXX_RECEIVE_BUFFER[i] = Serial.read();
             }
             break;
         }
    }

}

void FPMXX_Send_Cmd(unsigned char length,unsigned char *address,unsigned char returnLength)
{
    unsigned char i = 0;
   
    Serial.flush();
   
    for(i=0;i<6;i++) // HEADER
    {
        Serial.write(FPMXX_Pack_Head[i]);
    }
 
    for(i=0;i<length;i++)
    {        
    Serial.write(*address);        
    address++;
    }  
 
    FPMXX_Cmd_Receive_Data(returnLength);

   
}

void FPMXX_Cmd_StoreTemplate(unsigned int ID)
{
   unsigned int temp = 0;
 
  FPMXX_Save_Finger[5] =(ID&0xFF00)>>8;
  FPMXX_Save_Finger[6] = (ID&0x00FF);
           
  for(int i=0;i<7;i++)  
    temp = temp + FPMXX_Save_Finger[i];
         
  FPMXX_Save_Finger[7]=(temp & 0x00FF00) >> 8;
  FPMXX_Save_Finger[8]= temp & 0x0000FF;
 
  Serial.write(FPMXX_Pack_Head,6);  
  Serial.write(FPMXX_Save_Finger,9);  
 
  FPMXX_Cmd_Receive_Data(12);
}

void FPMXX_Find_Fingerprint()
{
    unsigned int find_finger_id = 0;
    unsigned char address = 0;

    lcd.clear();
    lcd.home();
    lcd.print("TOUCH FINGER!!");
   
    unsigned char key_status = 1000;
   
    while (1)
    {
      FPMXX_Send_Cmd(6,FPMXX_Get_Img,12);
 
        if(FPMXX_RECEIVE_BUFFER[9]==0)
        {
            delay(50);
           
            FPMXX_Send_Cmd(7,FPMXX_Img_To_Buffer1,12);
     
            FPMXX_Send_Cmd(11,FPMXX_Search,16);
     
            if(FPMXX_RECEIVE_BUFFER[9] == 0) // SEARCH
            {
                lcd.setCursor(0, 1);
                lcd.print("FOUND : ");

                find_finger_id = FPMXX_RECEIVE_BUFFER[10]*256 + FPMXX_RECEIVE_BUFFER[11];

                lcd.print(find_finger_id);

                Buzzer_On();
                testRelay();
                delay(1000);
               
                lcd.clear();
                lcd.home();
                lcd.print("TOUCH FINGER!!");

            }
            else
            {
                lcd.setCursor(0, 1);
                lcd.print("NOT FOUND!!  ");
                Buzzer_On(0);

           

                delay(100000);

                lcd.clear();
                lcd.home();
                lcd.print("TOUCH FINGER!!");

            }
        }

        lcd_key = read_LCD_buttons();
        if (lcd_key == btnUP || lcd_key == btnDOWN)
        {
          break;
        }

    }

}

void FPMXX_Add_Fingerprint()
{
    unsigned int writeID = 0;
    unsigned int exit_menu = 0;


RETURN_MENU:
    lcd.clear();
    lcd.home();
    lcd.print("ENROLL MODE:");
    lcd.setCursor(12,0);
    lcd.print(writeID);

    delay(100);

    while (1)
    {

        lcd_key = read_LCD_buttons();
        switch (lcd_key){
          case btnLEFT:{
             exit_menu = 1;
             break;
        }    
          case btnUP:{
             if (writeID == 500) //최대인원수
              {
                writeID= 0;
              }
              else
              {
                writeID = writeID + 1;
              }
              lcd.clear();
              lcd.home();
              lcd.print("ENROLL MODE:");
              lcd.setCursor(0,1);
              lcd.print(writeID);
              delay(200);
              break;
        }
          case btnDOWN:{
             if (writeID == 0)
              {
                writeID = 500; //최대인원수
              }
              else
              {
                writeID = writeID - 1;
              }
              lcd.clear();
              lcd.home();
              lcd.print("ENROLL MODE:");
              lcd.setCursor(0,1);
              lcd.print(writeID);
              delay(200);
              break;
          }
          case btnSELECT:{
              lcd.clear();
              lcd.home();
              lcd.print("ENROLL MODE:");
              lcd.setCursor(12,0);
              lcd.print(writeID);
              lcd.setCursor(0,1);
              lcd.print("Touch Finger!    ");
              while(1)
              {
                FPMXX_Send_Cmd(6,FPMXX_Get_Img,12);
                if(FPMXX_RECEIVE_BUFFER[9]==0)
                {
                    Buzzer_On();
                    delay(100);
                    FPMXX_Send_Cmd(7,FPMXX_Img_To_Buffer1,12);
                    lcd.setCursor(0,1);
                    lcd.print("Touch Again!    ");
                    while(1)
                    {
                       FPMXX_Send_Cmd(6,FPMXX_Get_Img,12);
                       if(FPMXX_RECEIVE_BUFFER[9]==0)
                       {
                          Buzzer_On();
                          delay(500);
                          FPMXX_Send_Cmd(7,FPMXX_Img_To_Buffer2,12);
                          FPMXX_Cmd_StoreTemplate(writeID);
                          lcd.setCursor(0,1);
                          lcd.print("Enroll Succeed! ");
                   
                          delay(1500);
                          goto RETURN_MENU;
                        }
                     }
                  }
              }
              break;
            }
        }
        if (exit_menu == 1) break;
    }
}

void FPMXX_Delete_All_Fingerprint()
{
    unsigned int yesno = 0;
    unsigned int exit_menu = 0;
   
    lcd.clear();
    lcd.home();
    lcd.print("DELETE ALL?");
    lcd.setCursor(12,0);
    lcd.print("NO ");

    while(1)
    {
      lcd_key = read_LCD_buttons();
      switch (lcd_key){               // 어떤 키가 눌려졌는지 확인
         case btnUP:{
            yesno = 1;
            lcd.setCursor(12,0);
            lcd.print("YES");
            delay(100);
            break;
         }
         case btnDOWN:{
            yesno = 0;
            lcd.setCursor(12,0);
            lcd.print("NO ");
            delay(100);
            break;
         }
         case btnSELECT:{
            if(yesno == 0)
            {
                lcd.setCursor(0,1);
                lcd.print("CANCELED");
                Buzzer_On();
            }
            else
            {
                FPMXX_Send_Cmd(6,FPMXX_Delete_All_Model,12);
                lcd.setCursor(0,1);
                lcd.print("ALL DELETED!");
                Buzzer_On();
                delay(500);
                Buzzer_On();
            }
            delay(2000);
            exit_menu = 1;
            break;
         }
      }
      if (exit_menu == 1) break;
    }
}

void setup() {

  lcd.begin(16, 2);
  lcd.home();
  lcd.print("WELCOME SAFE1 V1");
  delay(1000);

  Serial.begin(57600);

}

void loop() {

  Buzzer_Init();
  RELAY_Init();
  Buzzer_On(2);

  while(1) {
   
    FPMXX_Find_Fingerprint();
    switch (lcd_key){               // check which key is pressed
       case btnUP:{
          FPMXX_Add_Fingerprint();
          break;
       }
       case btnDOWN:{
          FPMXX_Delete_All_Fingerprint();
          break;
       }
    }
  }

}


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
- 설문 끝까지 다 본 걸 후회하게 만든 용두사미 드라마는? 운영자 25/07/07 - -
5658 일반 브레드보드 질문 [1] ㅇㅇ(175.123) 24.05.28 48 0
5657 일반 우노보드 해먹은 거 같은데 질문좀.. [4] 1234(125.184) 24.05.27 158 0
5656 일반 Mg 811 사진이요 [1] 0000(106.255) 24.05.27 44 0
5655 질문 아두이노 입문자 우노 보드R3 [2] ㅇㅇ갤로그로 이동합니다. 24.05.27 160 1
일반 옛다 코드 ㅇㅇ(113.198) 24.05.27 60 0
5653 질문 소프트웨어시리얼을 시리얼로 코드 변경 (제발제발제발 손 싹싹) [1] 제발제발제발(118.235) 24.05.27 59 0
5652 일반 Mg 811 ㅣ써보신분있나요 [4] 0000(106.255) 24.05.27 50 0
5651 질문 서보모터 파워서플라이좀 알려주십쇼..! [1] 캡디(112.219) 24.05.27 165 0
5650 일반 센서로 간단한 설계하는 과제인데 주제(223.39) 24.05.27 92 0
5649 질문 SCL, SDA핀 [3] 아라타갤로그로 이동합니다. 24.05.27 80 0
5648 일반 Midi 입력받아 블루투스 출력하고 싶은데 [5] ㅇㅇ(223.38) 24.05.27 178 0
5646 일반 이런거 해보고싶은데 [1] ㅇㅇ(223.39) 24.05.26 81 0
5645 일반 ㅈ만한 mcu중에 성능 젤 좋은게 esp32s3 맞음? [2] ㅇㅇ(223.39) 24.05.26 154 0
5644 일반 근데 모터같은거 전압 높은거 쓰면 안되냐? [1] ㅇㅇ(39.7) 24.05.26 94 0
5643 일반 아두이노 cloud나만 이상하냐 ㅇㅇ(118.218) 24.05.26 54 0
5642 일반 브레드보드 외부전원 관련해서 궁금한거 있음 [3] ㅇㅇ(136.23) 24.05.26 233 0
5641 질문 자율주행 아두이노<< 이거 왜안되노? [4] 후니이글스갤로그로 이동합니다. 24.05.26 186 0
5640 일반 아두이노 메가보드 + 적외선 거리 센서 [14] 아라타갤로그로 이동합니다. 24.05.24 168 0
5639 일반 아두이노로 cnc 쉴드 V3 제어해보신 고수분 질문(존나 절실함) [1] ㅇㅇ(211.205) 24.05.24 293 0
5638 일반 돌아버리겠네 아.. dfplayer 불량 원래 많음? [2] ㅇㅇ(39.7) 24.05.23 98 0
5637 일반 아다ㅜㅏ이노 ESP32-CAM 질문 [2] ㅇㅇ(211.251) 24.05.23 112 0
5636 일반 강좌같은거 어디서 찾음 Yeowoo갤로그로 이동합니다. 24.05.23 48 0
5635 질문 sg90 서보모터 소리 관련 질문 [1] ㅇㅇㅇ(166.104) 24.05.23 171 0
5633 질문 프로 미니 고장 현상 걸린거 같은데 [2] ㅇㅇ(115.143) 24.05.23 74 0
5631 일반 nRF24l01 아래 질문은 모듈 문제인듯합니다.. 뱃사공1갤로그로 이동합니다. 24.05.22 70 0
5629 일반 도와주세요.. [2] ㅇㅇ(211.235) 24.05.22 109 0
5627 일반 nRF24L01 업로딩후 RX TX LED에 초반에만 불들어오고 안들어옴 뱃사공1갤로그로 이동합니다. 24.05.21 123 0
5625 일반 혹시 적외선 센서 최소 거리가 어느정도 되나요? [2] ㅇㅇ(110.14) 24.05.21 87 0
5624 질문 뉴비 질문좀 [3] ㅇㅇ(125.244) 24.05.21 465 0
5623 질문 MG996R 초기 세팅 해야됨? [2] ㅇㅇ(121.161) 24.05.20 202 0
5622 일반 아두이노 푸시버튼 누를때마다 LCD가 조금 흐려집니다. ㅇㅇ(220.89) 24.05.20 87 0
5621 질문 아두이노 vscode에 데이터 전송 질문 [3] 그렇습니까기린입니다갤로그로 이동합니다. 24.05.20 92 0
5619 질문 [추가]아두이노 업로드 오류 봐주세요. port도 확인했지만 안되네용 [4] 뱃사공1갤로그로 이동합니다. 24.05.19 117 0
5618 일반 행님들 IR리모컨 9번 누르면 다른 키가 안눌려지는데 왜 그런가요? [1] ㅇㅇ(180.189) 24.05.19 54 0
5617 일반 아두이노 우노?? 업로드가 안되네요? 드라이버 설치를 해도 반응이 없는데 [3] 뱃사공1갤로그로 이동합니다. 24.05.19 235 0
5616 일반 아두이노 입문용으로 뭐 사면 됨? [2] 실패작소녀갤로그로 이동합니다. 24.05.18 138 0
5615 일반 아두이노 입문용으로 뭐 사면 됨? [1] 실패작소녀갤로그로 이동합니다. 24.05.18 500 0
5614 일반 Rx핀에 전기 들어가면 업로드 안되는구나 [1] Felpi갤로그로 이동합니다. 24.05.18 73 0
5613 일반 서보모터에 보조전원 어떻게주면됨? [1] ㅇㅇ(175.223) 24.05.18 119 0
5610 일반 모듈 직구 막히나? ㅇㅇ(180.83) 24.05.18 103 0
5609 일반 코딩은 인텔 데탑으로 하고 구동은 맥으로 하고싶은데 가능할까요 [5] 닉넴바꿀수있나갤로그로 이동합니다. 24.05.17 103 0
5607 일반 요즘 아두이노 하는데 궁금한점 있음 [1] 기매델갤로그로 이동합니다. 24.05.17 86 0
5606 일반 9V 건전지로는 아두이노가 안켜지는데 원래 이럼? [1] ㅇㅇ(175.223) 24.05.17 270 0
5605 일반 서보모터 샤프트 [1] ㅇㅇ(211.36) 24.05.17 102 0
5604 일반 아두이노 부품 연결하고 컴퓨터에 연결해도 됨?? [1] ㅇㅇ(59.25) 24.05.16 79 0
5603 질문 아까 쉴드장착 질문 올린사람입니다 [2] 거니바니갤로그로 이동합니다. 24.05.16 59 0
5602 질문 쉴드 장착이 이게 맞나요? [2] 거니바니갤로그로 이동합니다. 24.05.16 72 0
5601 질문 이게 뭔지 아시는분 계신가요? [3] 거니바니갤로그로 이동합니다. 24.05.16 69 0
5600 일반 씨발 따거 막히네 ㅇㅇ(115.143) 24.05.16 87 0
5599 일반 게임기 만드는 중인데 배경음 어떻게 틀음? [2] ㅇㅇ(110.70) 24.05.16 88 0
뉴스 '화려한 날들' 배우 이태란, ‘세련 미모’ 뽐내며 감각적인 재벌 안주인 고성희 役으로 완벽 변신! 디시트렌드 07.07
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2