文章目录


前言

在学完C语言之后,在学校学长的建议之下开始了Arduino的学习,其实本人刚开始对于硬件方面其实毫无兴趣,但学长说我们学习需要得到及时的反馈,就像工作了需要拿到工资一样,于是在学习了一周的Arduino之后抱着试一试的心态做出了这个指纹锁。

一、需要的制作材料

1:Arduino nano开发板一块  2:AS608指纹模块  3:SG90舵机若干(这个取决于到时连接门栓时的连接方式) 4:0.96寸OLED屏幕一块  5:DHT11温湿度传感器  6 杜邦线若干、面包板一块

二、代码编写逻辑(部分)

1.需要引入的库及引脚定义

//温湿度传感器模块
#include"DHT.h"
#include<Wire.h>
#define DHTPIN  2//将温湿度传感器连接到二号引脚
#define DHTTYPE  DHT11
DHT dht(DHTPIN,DHTTYPE);
//OLED屏幕模块
#include <U8g2lib.h>//屏幕大小为0.96的 才能用,驱动芯片为SSD1306
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0,SCL,SDA,U8X8_PIN_NONE);

//电机模块SG90
#include <Servo.h> 
Servo myservo;  //定义电机 
int pos = 0; 

//指纹锁模块AS608
#include <Adafruit_Fingerprint.h>
SoftwareSerial mySerial(11, 12);//将指纹连接到11,12号引脚
#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
#else
#define mySerial Serial1
#endif
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

2.代码主体部分

代码如下(示例):

void setup()
{
  dht.begin();
  u8g2.begin();
  myservo.attach(9); //将电机连到9号引脚上
  delay(100);
  Serial.begin(9600);
  while (!Serial);
  delay(100);
  Serial.println(F("\n\n准备开始指纹录入")); 
  finger.begin(57600);
  if (finger.verifyPassword()) {
    Serial.println(F("发现指纹锁已连接!"));
  } else {
    Serial.println(F("发现指纹锁没有连接"));
    while (1) { delay(1); }
  }
  finger.getTemplateCount();
  if (finger.templateCount == 0) {
    Serial.print(F("该设备没有录入任何指纹,请录入后再操作"));
  }
  else {
    Serial.println(F("正在等待已被录入指纹"));
      Serial.print(F("该设备已包括:")); Serial.print(finger.templateCount); Serial.println(F("个指纹"));
  }
  
}

uint8_t readnumber(void) {
  uint8_t num = 0;

  while (num == 0) {
    while (! Serial.available());
    num = Serial.parseInt();//分析串口数据中的信息,并赋值给变量num
  }
  return num;
}


void loop()                   
{
MENNU(); 
 while(Serial.available()>0)
  {
  Serial.println(F("准备好录入一个指纹!"));
  Serial.println(F("请输入指纹编号(1到6)!"));
  id = readnumber();
  if (id == 0) {
     return;
  }
  Serial.print(F("指纹ID #"));
  Serial.println(id);
  if(id==1||id==2||id==3||id==4||id==5||id==6)
  {
    getFingerprintEnroll();
    delay(100);
  }
if(id==66)
{
Del_Finger();
}
  } 
 while(Serial.available()==0){
  finger.getTemplateCount();

  if (finger.templateCount == 0) {
    Serial.print(F("设备不包括任何指纹,请先录入指纹"));
  }
  else {
    Serial.println(F("等待正确的指纹"));
      Serial.print(F("该设备包括")); Serial.print(finger.templateCount); Serial.println(F("个指纹"));
  }
 Detect_finger(); 
}
}


总结

上面的代码主体部分中调被调用的函数代码没有详细列出,对于getFingerprintEnroll()、Del_Finger()、Detect_finger()三个函数其实本人与Arduino中的示例库函数是大体上相同的,本人花费的最多时间就是去看懂“#include <Adafruit_Fingerprint.h>”这个库里面的两个示例函数enroll(储存指纹)和fingerprint(验证指纹)两大部分,弄清楚每段代码的含义,那么你就可以将两者结合起来了。

完整代码链接:http://t.csdn.cn/3AwlM

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐