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   下拉是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博客

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F407ZGTX是一款高性能的微控制器,具有强大的外部中断功能。外部中断是通过引脚上的外部信号触发的,可以用于检测、处理外部事件。下面我将以300字回答关于STM32F407ZGTX外部中断实验的问题。 首先,我们需要准备好实验所需的硬件和软件。硬件方面,需要准备一块STM32F407ZGTX开发板和一些外部设备,如按钮或开关等。软件方面,需要使用STM32CubeMX和Keil MDK工具进行代码开发和编译。 接下来,我们可以使用STM32CubeMX来配置外部中断。打开STM32CubeMX,选择对应的芯片型号,创建一个新工程。在Pinout & Configuration选项中,选择需要使用的引脚作为外部中断触发引脚。然后,打开Configuration选项卡,选择相应引脚的GPIO模式为GPIO_EXTI和GPIO模式为EXTI Mode。配置完成后,点击生成代码按钮,并将生成的代码导入到Keil MDK中进行编译和烧录。 接下来,在Keil MDK中进行代码开发。打开生成的代码工程,找到main.c文件,在HAL_GPIO_EXTI_Callback函数中编写对外部中断的处理代码。在这个函数中,可以实现对外部中断触发事件的检测和相应的处理逻辑。例如,可以在按下按钮时,让LED灯亮起或发送一个响应的信号。 最后,编译并烧录代码到STM32F407ZGTX开发板上。连接好外部设备(如按钮)后,运行实验。当外部中断(按钮按下)发生时,相应的处理代码会被触发执行。 要注意的是,实验中还需要注意配置外部中断的触发模式,如上升沿触发、下降沿触发等,可根据实际需求进行配置。 总结来说,STM32F407ZGTX外部中断实验的步骤包括:硬件和软件准备、配置外部中断引脚、编写处理代码、编译和烧录代码,最后进行实验。希望以上回答能帮助到你对STM32F407ZGTX外部中断实验的理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值