STM32F103RCT6实现智能门禁

2023-11-21 10:50

本文主要是介绍STM32F103RCT6实现智能门禁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

趁着现在刚做完这个小项目,脑子里的感觉还新鲜,赶紧写写文章来总结一下,方便日后查看。

本文主要分两大部分来展开,先总结体会心得,再具体说说怎么做

目录

  • 心得体会
    • 思考方式
    • 如何debug
  • 具体做法
    • AS608指纹识别模块
    • SIM900A短信模块
    • 蜂鸣器模块
    • 步进电机28BYJ-48
  • 注意事项

心得体会

思考方式

这种思考方式主要是把“是什么”、“怎么用”这两方面解决就行了,先明确我要干嘛,我在干嘛,这在我的上一个小项目里面也用到。
比如在学习如何使用串口的时候,我把串口的几个参数搞明白是什么,以及如何用串口发送函数、怎么处理接收中断就行了。在调试AS608、SIM900A的时候,因为这些本身就已经模块化、函数化了,我并不需要了解指纹识别算法,SIM900A是如何发送、接收信息的,我只需要知道你给它什么指令,它就怎么去做,这样就已经能够达到目的了。

如何debug

每当调试新的模块,很多时候不是一下子就能成功的,往往遇到问题。
首先是想想自己对这个模块的理解吧,既然要用它,那么这一整套操作流程下来是怎么样的?找出来还有疑问、不清晰的地方,就我目前的体会而言,要多动手,不能让疑惑只留在脑海里,一般在解决疑问的过程就能解决问题。
例如调试SIM900A时,用4节1.5V电池给模块供电,电话打不进去,串口发送指令无响应,并且它上面D5、D6两个LED灯异常长亮,没有用户手册里面说的情况,一开始我也是挺懵的。就梳理了下发送指令的流程,感觉这个应该没什么问题,可能就是模块自身的问题吧,然后发现模块供电必须要求是5V 1A的,四节电池已经6A了,所以就改用三节电池看看,发现LED指示灯的情况符合手册说的供电不足,最后确定问题下来了。

具体做法

AS608指纹识别模块

主要是实现三个功能:录指纹、刷指纹和删除指纹
想了解原理的话可以看这个视频(我不是打广告的)
AS608原理讲解
了解原理后,结合用户手册流程图和例程理解,很快就懂了
在这里插入图片描述

#include "fingerprint.h"
#include "as608.h"
#include "led.h"
#include "pwm.h"
#include "key.h"
#include "delay.h"
#include "MOTOR.h"
u16 ValidN;//模块内有效模板个数void Add_FR(void)
{u8 i=0,unlock=0,ensure,processnum=0;u16 ID;unlock = encryption();if(unlock == 1){while(1){switch(processnum){case 0:i++;Remind();//提示用户操作,按下指纹while(PS_Sta != 1);//等待用户按下手指ensure=PS_GetImage();//等待用户按下,命令指纹模块采集图像至图像缓冲区if(ensure == 0x00){ensure=PS_GenChar(CharBuffer1);//生成特征,保存至缓冲区1if(ensure==0x00){i=0;//Success();//提示成功了processnum=1;//跳到第二步}elseError();}elseError();break;case 1:i++;Remind();//提示用户操作,按下指纹while(PS_Sta != 1);//等待用户按下手指ensure=PS_GetImage();//命令指纹模块采集图像至图像缓冲区if(ensure==0x00){ensure = PS_GenChar(CharBuffer2);//生成特征,保存至缓冲区2if(ensure == 0x00){i = 0;processnum=2;//跳到第三步}elseError();}elseError();break;case 2:ensure=PS_Match();//比对缓冲区1和2两个特征是否一致if(ensure == 0x00){//Success();processnum=3;//跳到第四步}else{Error();i=0;processnum=0;//跳回第一步}break;case 3:ensure = PS_RegModel();//将CharBuffer1与CharBuffer2中的特征文件合并生成模块存于CharBuffer1与CharBuffer2if(ensure == 0x00){//Success();processnum=4;//跳到第五步}else{processnum = 0;Error();}break;case 4:ensure=PS_ValidTempleteNum(&ValidN);//读取指纹个数if(ensure != 0x00){Error();}
//				ensure=PS_ReadSysPara(&AS608Para);//读AS608模块参数
//				if(ensure != 0x00)
//				{
//					Error();
//				}
//				doID = ValidN;//ID递增
//				while(!(ID<300));ensure = PS_StoreChar(CharBuffer2, ID);//储存模板if(ensure == 0x00){Success();return ;//返回空值,退出函数}else{processnum=0;Error();}break;}if(i == 5)//超过5次没有按手指则退出{Error();break;}}}elseError();
}void press_FR(void)
{u8 i;SearchResult search;u8 ensure;ensure=PS_GetImage();if(ensure == 0x00)//获取图像成功{ensure=PS_GenChar(CharBuffer1);if(ensure == 0x00)//生成特征成功{ensure= PS_HighSpeedSearch(CharBuffer1,0,300,&search);if(ensure == 0x00)//搜索成功{Success();Motorcw();//开锁for(i=0;i<5;i++)delay_ms(1000);Motorccw();//关锁}elseError();}elseError();}
}void Del_FR(void)
{u8 ensure,unlock = 0;u8 key_num;unlock = encryption();if(unlock == 1){Remind();//提示用户操作dokey_num = KEY_Scan(0);while(key_num == 0);if(key_num == KEY0_PRES)//key0清空指纹库{ensure=PS_Empty();//清空指纹库if(ensure == 0x00

这篇关于STM32F103RCT6实现智能门禁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/401891

相关文章

Nginx更新SSL证书的实现步骤

《Nginx更新SSL证书的实现步骤》本文主要介绍了Nginx更新SSL证书的实现步骤,包括下载新证书、备份旧证书、配置新证书、验证配置及遇到问题时的解决方法,感兴趣的了解一下... 目录1 下载最新的SSL证书文件2 备份旧的SSL证书文件3 配置新证书4 验证配置5 遇到的http://www.cppc

Nginx之https证书配置实现

《Nginx之https证书配置实现》本文主要介绍了Nginx之https证书配置的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录背景介绍为什么不能部署在 IIS 或 NAT 设备上?具体实现证书获取nginx配置扩展结果验证

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

nginx跨域访问配置的几种方法实现

《nginx跨域访问配置的几种方法实现》本文详细介绍了Nginx跨域配置方法,包括基本配置、只允许指定域名、携带Cookie的跨域、动态设置允许的Origin、支持不同路径的跨域控制、静态资源跨域以及... 目录一、基本跨域配置二、只允许指定域名跨域三、完整示例四、配置后重载 nginx五、注意事项六、支持

Qt实现对Word网页的读取功能

《Qt实现对Word网页的读取功能》文章介绍了几种在Qt中实现Word文档(.docx/.doc)读写功能的方法,包括基于QAxObject的COM接口调用、DOCX模板替换及跨平台解决方案,重点讨论... 目录1. 核心实现方式2. 基于QAxObject的COM接口调用(Windows专用)2.1 环境

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换