目录
实验背景
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 下拉是0
rt_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){
//对应指示灯一两一灭 看看蜂鸣器引脚pf8
rt_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博客