Arduino大师练成手册 -- 控制 AS608 指纹识别模块

要在 Arduino 上控制 AS608 指纹识别模块,你可以按照以下步骤进行:

硬件连接

  1. 连接指纹模块:将 AS608 指纹模块与 Arduino 连接。通常,AS608 使用 UART 接口进行通信。你需要将 AS608 的 TX、RX、VCC 和 GND 引脚分别连接到 Arduino 的相应引脚。

软件设置

  1. 安装必要的库
    • 安装 Adafruit Fingerprint Sensor Library:

      打开 Arduino IDE,进入库管理器(Library Manager),搜索 “Adafruit Fingerprint Sensor Library”,然后点击安装。

编写代码

  1. 编写 Arduino 代码
    • 导入必要的库:

      #include <Adafruit_Fingerprint.h>
      #include <SoftwareSerial.h>
      
      SoftwareSerial mySerial(2, 3); // RX, TX
      Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
      
      void setup() {
        Serial.begin(9600);
        while (!Serial);  // For Leonardo/Micro/Zero
        delay(100);
        Serial.println("\n\nAdafruit Fingerprint sensor enrollment");
      
        // 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); }
        }
      }
      
      void loop() {
        // Add your code here to enroll, delete, or search fingerprints
      }
      
    • 录入指纹

      uint8_t getFingerprintEnroll(uint8_t id) {
        int p = -1;
        Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
        while (p != FINGERPRINT_OK) {
          p = finger.getImage();
          switch (p) {
            case FINGERPRINT_OK:
              Serial.println("Image taken");
              break;
            case FINGERPRINT_NOFINGER:
              Serial.println(".");
              break;
            case FINGERPRINT_PACKETRECIEVEERR:
              Serial.println("Communication error");
              break;
            case FINGERPRINT_IMAGEFAIL:
              Serial.println("Imaging error");
              break;
            default:
              Serial.println("Unknown error");
              break;
          }
        }
      
        // Convert image to template
        p = finger.image2Tz(1);
        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;
        }
      
        // Store template
        p = finger.createModel();
        if (p == FINGERPRINT_OK) {
          Serial.println("Prints matched!");
        } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
          Serial.println("Communication error");
          return p;
        } else if (p == FINGERPRINT_ENROLLMISMATCH) {
          Serial.println("Fingerprints did not match");
          return p;
        } else {
          Serial.println("Unknown error");
          return p;
        }
      
        p = finger.storeModel(id);
        if (p == FINGERPRINT_OK) {
          Serial.println("Stored!");
        } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
          Serial.println("Communication error");
          return p;
        } else if (p == FINGERPRINT_BADLOCATION) {
          Serial.println("Could not store in that location");
          return p;
        } else if (p == FINGERPRINT_FLASHERR) {
          Serial.println("Error writing to flash");
          return p;
        } else {
          Serial.println("Unknown error");
          return p;
        }
      
        return true;
      }
      
    • 删除指纹

      void deleteFingerprint(uint8_t id) {
        if (finger.deleteModel(id) == FINGERPRINT_OK) {
          Serial.println("Deleted!");
        } else {
          Serial.println("Could not delete");
        }
      }
      
    • 查找指纹

      void searchFingerprint() {
        uint8_t p = finger.getImage();
        if (p != FINGERPRINT_OK) return;
      
        p = finger.image2Tz();
        if (p != FINGERPRINT_OK) return;
      
        p = finger.fingerFastSearch();
        if (p == FINGERPRINT_OK) {
          Serial.print("Found ID #"); Serial.print(finger.fingerID);
          Serial.print(" with confidence of "); Serial.println(finger.confidence);
        } else {
          Serial.println("Did not find a match");
        }
      }
      

运行程序

  1. 运行 Arduino 程序
    • 将代码上传到 Arduino 板,并通过串口监视器查看输出。

这样,你就可以在 Arduino 上控制 AS608 指纹识别模块,实现指纹的录入、删除和查找功能。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/963437.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习深度解析:从基础到前沿

引言 深度学习作为人工智能的一个重要分支&#xff0c;通过模拟人脑的神经网络结构来进行数据分析和模式识别。它在图像识别、自然语言处理、语音识别等领域取得了显著成果。本文将深入探讨深度学习的基础知识、主要模型架构以及当前的研究热点和发展趋势。 基础概念与数学原理…

享元模式——C++实现

目录 1. 享元模式简介 2. 代码示例 1. 享元模式简介 享元模式是一种结构型模式。 享元模式用于缓存共享对象&#xff0c;降低内存消耗。共享对象相同的部分&#xff0c;避免创建大量相同的对象&#xff0c;减少内存占用。 享元模式需要将对象分成内部状态和外部状态两个部分…

ResNet--深度学习中的革命性网络架构

一、引言 在深度学习的研究和应用中&#xff0c;网络架构的设计始终是一个关键话题。随着计算能力和大数据的不断提升&#xff0c;深度神经网络逐渐成为解决复杂任务的主流方法。然而&#xff0c;随着网络层数的增加&#xff0c;训练深度神经网络往往面临梯度消失或梯度爆炸的…

HTML特殊符号的使用示例

目录 一、基本特殊符号的使用 1、空格符号&#xff1a; 2、小于号 和 大于号&#xff1a; 3、引号&#xff1a; 二、版权、注册商标符号的使用 1、版权符号&#xff1a;© 2、注册商标符号&#xff1a; 三、数学符号的使用 四、箭头符号的使用 五、货币符号的使用…

C++11—右值引用

目录 简介 左值和右值 左值 右值 右值引用 生命周期 引用折叠 实际应用 移动语义 移动构造函数 移动赋值运算符 完美转发 简介 之前我们曾学习过引用叫左值引用&#xff0c;但那是C98的&#xff0c;在C11中新增了一种引用叫右值引用。右值引用主要用于支持移动语…

Ubuntu下的Doxygen+VScode实现C/C++接口文档自动生成

Ubuntu下的DoxygenVScode实现C/C接口文档自动生成 Chapter1 Ubuntu下的DoxygenVScode实现C/C接口文档自动生成1、 Doxygen简介1. 安装Doxygen1&#xff09;方法一&#xff1a;2&#xff09;方法二&#xff1a;2. doxygen注释自动生成插件3. doxygen注释基本语法4. doxygen的生成…

函数与递归

函数与递归 声明或者定义应该在使用之前&#xff08;不单单针对于函数&#xff09; 函数对全局变量做出的改变还是不会随着函数结束而消失的 函数声明在main函数里面也是可以的 引用变量和引用实体的变化是一样的 传址调用比传值调用效率高 重载函数->编译器会根据传递…

网络编程套接字(中)

文章目录 &#x1f34f;简单的TCP网络程序服务端创建套接字服务端绑定服务端监听服务端获取连接服务端处理请求客户端创建套接字客户端连接服务器客户端发起请求服务器测试单执行流服务器的弊端 &#x1f350;多进程版的TCP网络程序捕捉SIGCHLD信号让孙子进程提供服务 &#x1…

96,【4】 buuctf web [BJDCTF2020]EzPHP

进入靶场 查看源代码 GFXEIM3YFZYGQ4A 一看就是编码后的 1nD3x.php 访问 得到源代码 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;用于调试或展示代码结构 highlight_file(__FILE__); // 关闭所有 PHP 错误报告&#xff0c;防止错误信息泄露可能的安全漏洞 erro…

C++模板编程——可变参函数模板之折叠表达式

目录 1. 什么是折叠表达式 2. 一元左折 3. 一元右折 4. 二元左折 5. 二元右折 6. 后记 上一节主要讲解了可变参函数模板和参数包展开&#xff0c;这一节主要讲一下折叠表达式。 1. 什么是折叠表达式 折叠表达式是C17中引入的概念&#xff0c;引入折叠表达式的目的是为了…

如何用微信小程序写春联

​ 生活没有模板,只需心灯一盏。 如果笑能让你释然,那就开怀一笑;如果哭能让你减压,那就让泪水流下来。如果沉默是金,那就不用解释;如果放下能更好地前行,就别再扛着。 一、引入 Vant UI 1、通过 npm 安装 npm i @vant/weapp -S --production​​ 2、修改 app.json …

openRv1126 AI算法部署实战之——TensorFlow TFLite Pytorch ONNX等模型转换实战

Conda简介 查看当前系统的环境列表 conda env list base为基础环境 py3.6-rknn-1.7.3为模型转换环境&#xff0c;rknn-toolkit版本V1.7.3&#xff0c;python版本3.6 py3.6-tensorflow-2.5.0为tensorflow模型训练环境&#xff0c;tensorflow版本2.5.0&#xff0c;python版本…

电介质超表面中指定涡旋的非线性生成

涡旋光束在众多领域具有重要应用&#xff0c;但传统光学器件产生涡旋光束的方式限制了其在集成系统中的应用。超表面的出现为涡旋光束的产生带来了新的可能性&#xff0c;尤其是在非线性领域&#xff0c;尽管近些年来已经有一些研究&#xff0c;但仍存在诸多问题&#xff0c;如…

Python3 OS模块中的文件/目录方法说明十七

一. 简介 前面文章简单学习了 Python3 中 OS模块中的文件/目录的部分函数。 本文继续来学习 OS 模块中文件、目录的操作方法&#xff1a;os.walk() 方法、os.write()方法 二. Python3 OS模块中的文件/目录方法 1. os.walk() 方法 os.walk() 方法用于生成目录树中的文件名&a…

2025年2月2日(网络编程 tcp)

tcp 循环服务 import socketdef main():# 创建 socket# 绑定tcp_server socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_server.bind(("", 8080))# socket 转变为被动tcp_server.listen(128)while True:# 产生专门为链接进来的客户端服务的 socketprint(&qu…

Rust 中的注释使用指南

Rust 中的注释使用指南 注释是代码中不可或缺的一部分&#xff0c;它帮助开发者理解代码的逻辑和意图。Rust 提供了多种注释方式&#xff0c;包括行注释、块注释和文档注释。本文将详细介绍这些注释的使用方法&#xff0c;并通过一个示例展示如何在实际代码中应用注释。 1. 行…

使用Pygame制作“青蛙过河”游戏

本篇博客将演示如何使用 Python Pygame 从零开始编写一款 Frogger 风格的小游戏。Frogger 是一款早期街机经典&#xff0c;玩家需要帮助青蛙穿越车水马龙的马路到达对岸。本示例提供了一个精简原型&#xff0c;包含角色移动、汽车生成与移动、碰撞检测、胜利条件等关键点。希望…

渗透测试过程中碰到的Symfony框架

0x01 不是很顺利的Nday利用 在一次渗透测试过程中发现了目标使用了Symfony框架&#xff0c;然后扫了下目录&#xff0c;发现存在app_dev.php 文件&#xff0c;尝试访问 发现开启了debug模式&#xff0c;Symfony 版本号为2.8.34 php版本5.6.40 也能查看phpinfo页面 然后在网上搜…

Games104——网络游戏的进阶架构

这里写目录标题 前言位移移动插值内插&#xff08;Interpolation&#xff09;外插&#xff08;Extrapolation&#xff09; 命中判定Hit Registration在客户端去判定 在服务器端去判定延迟补偿掩体问题躲进掩体走出掩体 技能前摇本地暴击效果 基础MMO框架分布式架构一致性哈希服…

2025年01月27日Github流行趋势

项目名称&#xff1a;onlook项目地址url&#xff1a;https://github.com/onlook-dev/onlook项目语言&#xff1a;TypeScript历史star数&#xff1a;5340今日star数&#xff1a;211项目维护者&#xff1a;Kitenite, drfarrell, iNerdStack, abhiroopc84, apps/dependabot项目简介…