按键修改阈值功能、报警功能、空气质量功能实现(STM32)

文章描述了一种基于STM32微控制器的系统,该系统使用按键修改不同传感器(如温度、烟雾和CO浓度)的阈值,并通过LED和OLED显示屏反馈状态。当空气质量指标超过预设阈值时,系统会触发报警。此外,按键4用于控制OLED显示当前的空气质量等级和可调整的阈值类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按键修改阈值功能

        要使用按键,首先要定义按键。通过查阅资料,可知按键的引脚如图所示:按键1(S1)通过KEY0与PA0连接,按键2(S2)通过KEY1与PE2连接,按键3(S3)通过KEY2与PE3连接,按键4(S4)通过KEY3与PE4连接。

按键引脚

        key.c

        这段代码主要是对四个按键进行了初始化配置,使其能够进行读取输入操作。

#include "key.h"

void Key_Init()
{
	GPIO_InitTypeDef  GPIO_InitStructure;

	/*四个按键*/
	/* GPIOA 引脚的时钟使能  */
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);	
	
	/* 配置PA0引脚为输出模式 s1*/
	GPIO_InitStructure.GPIO_Pin 	= GPIO_Pin_0;			//配置的引脚
	GPIO_InitStructure.GPIO_Mode 	= GPIO_Mode_IN;		    //输入模式
	GPIO_InitStructure.GPIO_OType 	= GPIO_OType_PP;		//推挽模式
	GPIO_InitStructure.GPIO_Speed 	= GPIO_Speed_100MHz;	//速度为100MHz
	GPIO_InitStructure.GPIO_PuPd 	= GPIO_PuPd_NOPULL;		//上下拉电阻:无上下拉电阻
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	/* 配置PE2引脚为输出模式 s2*/
	GPIO_InitStructure.GPIO_Pin 	= GPIO_Pin_2;			//配置的引脚
	GPIO_InitStructure.GPIO_Mode 	= GPIO_Mode_IN;		    //输入模式
	GPIO_InitStructure.GPIO_OType 	= GPIO_OType_PP;		//推挽模式
	GPIO_InitStructure.GPIO_Speed 	= GPIO_Speed_100MHz;	//速度为100MHz
	GPIO_InitStructure.GPIO_PuPd 	= GPIO_PuPd_NOPULL;		//上下拉电阻:无上下拉电阻
	GPIO_Init(GPIOE, &GPIO_InitStructure);
	
	/* 配置PE3引脚为输出模式 s3*/
	GPIO_InitStructure.GPIO_Pin 	= GPIO_Pin_3;			//配置的引脚
	GPIO_InitStructure.GPIO_Mode 	= GPIO_Mode_IN;		    //输入模式
	GPIO_InitStructure.GPIO_OType 	= GPIO_OType_PP;		//推挽模式
	GPIO_InitStructure.GPIO_Speed 	= GPIO_Speed_100MHz;	//速度为100MHz
	GPIO_InitStructure.GPIO_PuPd 	= GPIO_PuPd_NOPULL;		//上下拉电阻:无上下拉电阻
	GPIO_Init(GPIOE, &GPIO_Init
在OpenMV中,可以使用按键来调整阈值。有几种方法可以实现这个功能。 第一种方法是通过将P1口设为输入模式,并定义为pin1。然后在一个while循环中,使用pin1.value()方法获取P1口的电平值。当按键按下时,电平值会变化,进入if循环并执行相应的语句。这种方法简单易用,支持连按,按下按键后可以一直触发,直到松开。适合在数据校准时通过按键调整阈值。如果触发速度过快,可以在判断中增加延时函数来减慢触发速度。以下是示例代码: ```python import sensor, image, time from pyb import Pin sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time = 2000) clock = time.clock() pin1 = Pin('P1', Pin.IN, Pin.PULL_UP) while True: clock.tick() img = sensor.snapshot() key0 = pin1.value() if key0 == 0: print("key0 pressed!") ``` 第二种方法是通过定时器触发。这种方法融合了前两种方法的优点和不足,支持单次触发和连按。可以通过更改定时器的频率来调整触发频率。以下是示例代码: ```python import sensor, image, time from pyb import Pin, Timer sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time = 2000) clock = time.clock() pin1 = Pin('P1', Pin.IN, Pin.PULL_UP) def tick(timer): key0 = pin1.value() if key0 == 0: print("111") if key0 == 1: print("222") tim = Timer(2, freq=1) # 创建一个定时器对象,频率为1Hz tim.callback(tick) # 将回调函数设置为tick函数 while True: clock.tick() img = sensor.snapshot() ``` 这些方法可以根据实际需求选择使用,以便通过按键来调整阈值
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nazonomaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值