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

相关文章

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Java反射实现多属性去重与分组功能

《Java反射实现多属性去重与分组功能》在Java开发中,​​List是一种非常常用的数据结构,通常我们会遇到这样的问题:如何处理​​List​​​中的相同字段?无论是去重还是分组,合理的操作可以提高... 目录一、开发环境与基础组件准备1.环境配置:2. 代码结构说明:二、基础反射工具:BeanUtils

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

在Java中将XLS转换为XLSX的实现方案

《在Java中将XLS转换为XLSX的实现方案》在本文中,我们将探讨传统ExcelXLS格式与现代XLSX格式的结构差异,并为Java开发者提供转换方案,通过了解底层原理、性能优势及实用工具,您将掌握... 目录为什么升级XLS到XLSX值得投入?实际转换过程解析推荐技术方案对比Apache POI实现编程

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译