前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >嵌入式-使用蜂鸣器加LED灯实现按键发送SOS求救信号

嵌入式-使用蜂鸣器加LED灯实现按键发送SOS求救信号

原创
作者头像
会洗碗的CV工程师
发布2024-02-09 11:04:37
3480
发布2024-02-09 11:04:37
举报
文章被收录于专栏:LongJava学习资料LongJava学习资料

1. 实验目的

使用蜂鸣器加LED灯实现按键发送SOS求救信号

2. 实验原理

GPIO:GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚,STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。

STM32 芯片的 GPIO 被分成很多组,每组有 16 个引脚,如型号为 STM32F4IGT6 型号的芯片有 GPIOA、GPIOB、GPIOC 至 GPIOI 共 9 组 GPIO,芯片一共 176 个引脚,其中 GPIO就占了一大部分,所有的 GPIO 引脚都有基本的输入输出功能。

最基本的输出功能是由 STM32 控制引脚输出高、低电平,实现开关控制,如把 GPIO引脚接入到 LED 灯,那就可以控制 LED 灯的亮灭,引脚接入到继电器或三极管,那就可以通过继电器或三极管控制外部大功率电路的通断。

最基本的输入功能是检测外部输入电平,如把 GPIO 引脚连接到按键,通过电平高低区分按键是否被按下

按键检测:这些按键在没有被按下的时候,GPIO 引脚的输入状态为高电平(按键所在的电路不通,引脚接地),当按键按下时,GPIO 引脚的输入状态为低电平(按键所在的电路导通,引脚接到电源)。只要我们检测引脚的输入电平,即可判断按键是否被按下。

蜂鸣器:蜂鸣器与我们用到一个 NPN 三极管(S8050)来驱动蜂鸣器,R61 主要用于防止蜂鸣器的误发声。当 PB5 输出高电平的时候,蜂鸣器将发声,当 PB5 输出低电平的时候,蜂鸣器停止发声。

3. 主要仪器设备

GEC-STM32F429开发板和keil 5软件

4. 实验内容及步骤

1,首先用keil软件打开实验项目,确保可编译之后。

2,开发板使用usb连接线连接上电脑

3,然后使用点击load加载到开发板上。

4,修改代码

代码语言:c
复制
#include "stm32f4xx.h"
#include "./led/bsp_led.h"
#include "./key/bsp_key.h" 
#include "./beep/bsp_beep.h"

int i=0;
void delay(int time);
void start();
int led1 = 0;
int led2 = 0;


/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{
	/* LED 端口初始化 */
	LED_GPIO_Config();	 
  
  /*初始化按键*/
  Key_GPIO_Config();
	
 
	/*峰名器 初始化*/
	BEEP_GPIO_Config(); 

	
	/* 轮询按键状态,若按键按下则反转LED */ 

	while(1)                            
	{	   
	
		if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON  )
		{
			led1 = 1;
			
			while(led1){
				start();
			}
			//LED2反转
				LED1(ON);
				LED2(ON);
				LED3(ON);
				BEEP_OFF;			
		}
	}
}

void delay(int time){
if( Key_Scan(KEY2_GPIO_PORT,KEY2_PIN) == KEY_ON  )
{
				led1 = 0;
}
			 
	for(;i<time;i++){
		
		}
	i = 0;
	return;
}

void start(){
			/*LED1反转*/
			LED1(OFF);              //S
			LED2(OFF);
			LED3(ON);
				
			BEEP_ON;
			delay(3000000);
			BEEP_OFF;
			delay(6000000);
			BEEP_ON;
			delay(3000000);
			BEEP_OFF;
			delay(6000000);
			BEEP_ON;
			delay(3000000);	
			BEEP_OFF;
			delay(6000000);				
			delay(21000000);
				
			
			LED1(ON);               //O
			LED2(ON);
			LED3(OFF);             
			
			BEEP_ON;
			delay(9000000);
			BEEP_OFF;
			delay(6000000);
				BEEP_ON;
			delay(9000000);
			BEEP_OFF;
			delay(6000000);
			BEEP_ON;
			delay(9000000);
			BEEP_OFF;
			delay(6000000);
			delay(21000000);
			
			
			LED1(OFF);              //S
			LED2(OFF);
			LED3(ON);
				
			BEEP_ON;
			delay(3000000);
			BEEP_OFF;
			delay(6000000);
			BEEP_ON;
			delay(3000000);
			BEEP_OFF;
			delay(6000000);
			BEEP_ON;
			delay(3000000);	
			BEEP_OFF;
			delay(6000000);	
			delay(21000000);		
}

5. 实验结果与分析

通过观看上述代码可以知道,我实验效果的按键检测是即使当你按下了按键关闭,也得发送完一个SOS信号,因为我觉得要是求救的时候只发送一两个S或O就被迫终止了,那别人或许都不知道你啥意思。因此应该按下关闭按钮的时候也得先发送完一个SOS信号。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com