RTthread+STM32F407ZGTx+烟雾报警检测+蜂鸣器报警+LED闪烁||使用RTthread Studio
目录
实验背景
1.安装环境
2.配置环境
3.先编译下载实例程序2,观察DS0是否闪烁
4.实验方法
5.实例代码
6.硬件连接
7.实验效果
8.关于这次开发遇到的问题
1.反应慢,都熄灭1分钟多了,才报的问题?
2.关于rt_pin_mode(KEY0_PIN, PIN_MODE_INPUT_PULLDOWN);PIN_MODE_INPUT_PULLDOWN参数会导致什么现象?
无聊的小知识
参考文章
实验背景
想实现串口打印输出烟雾传感器的状态,无烟雾时每个1s打印0,LED灯循环闪烁;存在烟雾时打印1,同时进行一个5s的滤波,当5s后烟雾依旧存在则蜂鸣器报警,LED灯不在循环闪烁。同时,也可以通过模拟按键来实现烟雾报警的效果。主要是想对烟雾报警器做一个长时间测试,看是否有误报的现象。
1.安装环境
rtthread官网下载RTthread Studio安装包安装
2.配置环境
新建工程

3.先编译下载实例程序2,观察DS0是否闪烁
4.实验方法
本次使用PF9、PF8、PA0引脚,来实现该效果。


5.实例代码
#define KEY0_PIN GET_PIN(A,0) //PA0
#define LED0_PIN GET_PIN(F,9)
#define BEEP_PIN GET_PIN(F,8) //定义蜂鸣器 超过5次后蜂鸣器叫,打印0,叫完后程序将不在运行
#define KEY_FILTER_TIME 5 //定义滤波时间:5次
static int SmokeFlog=0;
static int consecutive_ones = 0; // 1连续出现的次数
int main(void)
{rt_pin_mode(KEY0_PIN, PIN_MODE_INPUT_PULLDOWN); //上拉是1 下拉是0rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);rt_pin_mode(BEEP_PIN, PIN_MODE_OUTPUT);rt_pin_write(BEEP_PIN, PIN_LOW);while (1){rt_kprintf(" %d\n",rt_pin_read(KEY0_PIN));Detect_Smoke();//异常if(SmokeFlog==1){//对应指示灯亮起 //让PF9灯亮rt_pin_write(LED0_PIN, PIN_HIGH);//开启蜂鸣器rt_pin_write(BEEP_PIN, PIN_HIGH); //开启蜂鸣器}if(SmokeFlog==0){//对应指示灯一两一灭 看看蜂鸣器引脚pf8rt_pin_write(BEEP_PIN, PIN_LOW);rt_pin_write(LED0_PIN, PIN_HIGH);rt_thread_mdelay(500);rt_pin_write(LED0_PIN, PIN_LOW);rt_thread_mdelay(500);//均无异常关闭蜂鸣器}rt_thread_mdelay(1000);// 延时1000e}
}void Detect_Smoke(void){//rt_kprintf(" %d\n",rt_pin_read(KEY0_PIN));//当烟雾指数高于20则触发异常if (rt_pin_read(KEY0_PIN) == 1) // 如果读取到的值为1{consecutive_ones++; // 递增连续出现1的次数}if (rt_pin_read(KEY0_PIN) == 0){consecutive_ones = 0; // 重置连续出现1的次数}if (consecutive_ones >= KEY_FILTER_TIME) // 如果连续出现1的次数达到5次{SmokeFlog = 1; // 设置烟雾标志位为1}else {SmokeFlog = 0;}
}
6.硬件连接
| PA0 | 烟雾传感器A |
| GND | GND |
| VCC5V | 5V |
7.实验效果

8.关于这次开发遇到的问题
1.反应慢,都熄灭1分钟多了,才报的问题?
可能是接触不良,受到了干扰,用热融胶固定一下
2.关于rt_pin_mode(KEY0_PIN, PIN_MODE_INPUT_PULLDOWN);PIN_MODE_INPUT_PULLDOWN参数会导致什么现象?
这要从原理图说起:

本次使用的是KEY_UP,该按键按下,高电平有效,这导致烟雾传感器不接地的话就会报警,PIN_MODE_INPUT_PULLDOWN该参数会让KEY_UP松开时,也就是低电平能在控制台打印0,烟雾报警器报警时打印1,比较直观。
KEY0是低电平有效,上拉模式(PIN_MODE_INPUT_PULLUP),按下是1,烟雾传感器接上会变成1(是因为接地导通了,不能因此说明烟雾传感器的值是不对的),这是个硬件问题,因为测量的烟雾报警器它是一个开关量,让开关量连续几次检测到,在进行滤波,这也是本项目测试的解决思路。
无聊的小知识
1.怎么区分三极管是NPN还是PNP?
三级管都是从P>(指向)N,那就是NPN

参考文章
Stm32F103&Rt_Thread系列开发——03 日志管理_stm32 日志-CSDN博客
(STM32)从零开始的RT-Thread之旅--GPIO_rt-thread 配置gpio-CSDN博客
STM32F407ZE基于RT-Thread和ZigBee实现多传感器检测以及数据上传到oneNet_stm32f407对于外设传感器信息采集和处理-CSDN博客
教你搞懂RT-Thread的移植和配置ENV工具环境_rtthread keil env 教程 知乎-CSDN博客
基于RT-Thread(RTT)的HAL库+ADC+DMA多通道采集_rt-thread dma+adc-CSDN博客
keil 5 : Error: L6218E: Undefined symbol 问题解决方法小记-CSDN博客
RT-Thread 串口的使用_env没有usart2-CSDN博客
STM32F407——基于RT-Thread实现触摸屏按键点灯案例_stm32 mipi-CSDN博客
相关文章:
RTthread+STM32F407ZGTx+烟雾报警检测+蜂鸣器报警+LED闪烁||使用RTthread Studio
目录 实验背景 1.安装环境 2.配置环境 3.先编译下载实例程序2,观察DS0是否闪烁 4.实验方法 5.实例代码 6.硬件连接 7.实验效果 8.关于这次开发遇到的问题 1.反应慢,都熄灭1分钟多了,才报的问题? 2.关于rt_pin_mode(KEY…...
k8s资源的基本操作
文章目录 一、Namespace1、概述2、预定义的k8s命名空间2.1、default2.2、kube-public2.3、kube-system2.4、kube-node-lease 3、命名空间基本操作3.1、查看3.1.1、查看所有的命名空间3.1.2、查看指定的命名空间3.1.3、指定输出格式3.1.4、查看ns详情 3.2、创建3.2.1、命令行创建…...
19.面包屑导航制作
面包屑导航制作 官网:组件 | Element 1. 在layout下新建BreadCrumb.vue BreadCrumb.vue <template><div class"bread-text"><el-breadcrumb class"bred"separator"/"><el-breadcrumb-item v-for"item in…...
做动画?Animatediff 和 ComfyUI 更配哦!
如果从工作流和内存利用率的角度来说,Animatediff 和 ComfyUI 可能更配一些,毕竟制作动画是一个很吃内存的操作。 首先,我们需要在管理器中下载 Animatediff 插件,当然也可以直接导入听雨的工作流,然后在管理器的安装…...
笔记-python里面的xlrd模块详解
那我就一下面积个问题对xlrd模块进行学习一下: 1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模块? ♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel&…...
oracle将字符串中的字符和数字拆分开等功能
将字符串中的字符和数字拆分开 create or replace procedure F_GetNumber1( inString IN VARCHAR2,n_return1 out varchar2, n_return2 out varchar2) ISDCHAR VARCHAR2(1024); OUTCHAR VARCHAR2(1024); j number default 0; ulen number; BEGINOUTCHAR:;DCHAR:TRIM(inStr…...
汇编基础之使用vscode写hello world
汇编语言(Assembly Language) 概述 汇编语言(Assembly Language)是一种低级编程语言,它直接对应于计算机的机器代码(machine code),但使用了更易读的文本符号。每台个人计算机都有…...
APS计划排程系统如何打破装备使用约束
APS计划排程系统是离散制造型企业在计划控制方向的重要支撑,它提供的是交期预测、订单排产计划、物料采购计划、人力分配计划等等。近些几年来,多品种、小批量、多订单的生产模式,让企业的计划员应接不暇、疲累不堪,传统的人工经验…...
gigachad - suid
gigachadeasyftp利用、google反图搜索、 suid提权、s-nail 提权 主机发现 ┌──(kali㉿kali)-[~/桌面/OSCP] └─$ sudo netdiscover -i eth0 -r 192.168.44.138/24服务探测 ┌──(kali㉿kali)-[~/桌面/OSCP] └─$ sudo nmap -sV -A -T 4 -p- 192.168.44.138 |_/kingchad…...
QtScript模块
在Qt中,可以使用Qt Script模块来将C类和方法绑定到Qt脚本引擎中,从而使得可以在Qt脚本中调用这些C类和方法。以下是一个简单的示例,演示了如何在Qt中将C类暴露给Qt Script引擎: 假设有一个名为 MyClass 的C类,其头文件…...
qt中for循环不要使用循环中会更改的变量
检查代码,发现始终会少了一位,最后发现我在使用for循环时,懒省事,判断条件中使用的变量是涉及到循环体中更改的变量,代码如下,更直观 for (int i 0; i < m_images.size(); i) {packageToDBList[0].imag…...
spark独立集群搭建
spark独立集群搭建(不依赖Hadoop) 1、上传spark-2.4.5-bin-hadoop2.7.tgz至 /usr/local/moudel ,再解压到 /usr/local/soft tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /usr/local/soft/ 重命名 mv spark-2.4.5-bin-hadoop2.7/ spark-2.4.5 配…...
【BFS算法】广度搜索·由起点开始逐层向周围扩散求得最短路径(算法框架+题目)
0、前言 深度优先搜索是DFS(Depth Frst Search),其实就是前面所讲过的回溯算法,它的特点和它的名字一样,首先在一条路径上不断往下(深度)遍历,获得答案之后再返回,再继续往下遍历。…...
微信小程序---登录
手机号登录 手机号快速验证和手机号实时验证区别 手机号快速验证组件,平台会对号码进行验证,但不保证是实时验证;收费0.0.3元手机号实时验证组件,在每次请求时,平台均会对用户选择的手机号进行实时验证。收费0.0.4元…...
IPython大师课:提升数据科学工作效率的终极工具
IPython是一个增强的Python交互式shell,它提供了丰富的功能和易用性改进,特别适合进行数据分析、科学计算和一般的Python开发。本文将全面介绍IPython的基本概念、使用方法、主要作用以及注意事项。 一、IPython简介 1. IPython的起源 IPython最初由Fe…...
抖音素材网站平台有哪些?素材下载网站库分享
在这个视觉信息充斥的时代,抖音已经成为众多自媒体人展示才华的舞台。要在众多创作者中脱颖而出,不仅需要独特的创意,还需要优质的素材来支持你的内容制作。今天,我将介绍几个为抖音视频提供高品质素材的网站,包括国内…...
MODBUS TCP协议实例数据帧详细分析
MODBUS TCP协议实例数据帧详细分析 1.简介 2.ModbusTCP数据帧 2.1.报文头MBAP 2.2.帧结构PDU 3.ADU详细结构 3.1. 0x01:读线圈 3.2. 0x02:读离散量输入 3.3. 0x03:读保持寄存器 3.4. 0x04:读输入寄存器 3.5. 0x05:写单…...
Spring Boot启动与运行机制详解:初学者友好版
Spring Boot启动与运行机制详解:初学者友好版 随着微服务的兴起和容器化部署的流行,Spring Boot以其快速搭建、简单配置和自动化部署的特性,成为了众多开发者的首选。对于初学者而言,理解Spring Boot的启动与运行机制是掌握其精髓…...
Ubuntu 22.04 解决 firefox 中文界面乱码
问题复现 在为Ubuntu 22.04 Server安装完整的GNOME 42.01桌面后,将桌面语言设置为中文时,打开Firefox可能会出现中文乱码的问题。经过网上调查发现,这个问题是由Snap软件包引起的。 解决方案 为了避免在Ubuntu 22.04中文模式下的乱码问题…...
前端面试题日常练-day77 【面试题】
题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末 在Sass中,以下哪个功能用于将样式规则应用于多个选择器? a) extend b) mixin c) import d) include Sass中的嵌套规则(Nested Rules)有助于实现以下哪个…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
