当前位置: 首页 > news >正文

物联网D3——按键控制LED、光敏传感蜂鸣器

按键控制LED

按键抖动,电平发生变化,可用延时函数抵消按键抖动对系统的影响

在这里插入图片描述

传感器电路图

在这里插入图片描述

按键电路图

在这里插入图片描述

c语言对应类型

“_t”后缀表示使用typedef重命名的数据类型

在这里插入图片描述

枚举类型

在这里插入图片描述

#include<iostream>
using namespace std;
//定义枚举类型
typedef enum{Mon=1,Tue=2,Wed=3
} week_t;
int main(){week_t w;w=Wed; //对星期类型设定指定量cout << w << endl;return 0;
}

按键控制LED灯

主函数

#include "stm32f10x.h"                  // Device header
#include "MyDelay.h"   //自定义延时函数
#include "Delay.h"     //官方延迟函数
#include "Button.h"   //按键Led驱动
#include "stdio.h"uint8_t KeyNum ;
int main(void){//初始化Led_Init();Button_Init();//按键控制led灯while(1){KeyNum = Key_GetNum();if(KeyNum==1) {Led_One_Turn();}if(KeyNum==2){Led_Two_Turn();}}return 0;
}

Button

//头文件
#ifndef Led_h  //若没有定义该变量,则定义
#define led_h
//LED驱动
void Led_Init(void);
//按键初始化,按键用于输入,不用设置输出的速度
void Button_Init(void);
//获取是哪个按键被按下
uint8_t Key_GetNum(void);
//灯1亮
void Led_One_Turn(void);
//灯2亮
void Led_Two_Turn(void);
#endif//源文件
#include "stm32f10x.h" 
#include "Delay.h"
#include "stdio.h"
//Led初始化
void Led_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GI;GI.GPIO_Mode = GPIO_Mode_Out_PP;GI.GPIO_Pin = GPIO_Pin_All;GI.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GI);//设置led灯对应引脚为高电平GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1); //A0,A1引脚高电平,灯灭
}
//按键初始化,按键用于输入,不用设置输出的速度
void Button_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //时钟使能GPIO_InitTypeDef Button;Button.GPIO_Mode = GPIO_Mode_IPU; //上拉输入模式,保持高电平Button.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_11; //按键所在引脚  Button.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&Button);
}  
//获取是哪个按键被按下
uint8_t Key_GetNum(void){uint8_t KeyNum=0;//按键1if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0){  //按键按下读取输入数据Delay_ms(20); //按下抖动while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0 ); //等待度过按键触底期Delay_ms(20);  //弹起抖动KeyNum=1;  //按键一}//按键11if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0){  //读取输入数据Delay_ms(20); //按下抖动while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == 0); //等待度过按键触底期Delay_ms(20);  //弹起抖动KeyNum=2;  //按键二}return KeyNum; //返回按键号码
}
//灯1
void Led_One_Turn(void){uint8_t Light_Status = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);if(Light_Status==0) GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);else GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
}//灯2
void Led_Two_Turn(void){uint8_t Light_Status = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);if(Light_Status==0) GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET);else GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);
}

光敏传感蜂鸣器(绿灯常亮,光线变暗,红灯亮,警报响起,光线恢复,警报解除)

在这里插入图片描述

//光敏蜂鸣器头文件
#ifndef Buzzer
#define Buzzer
//读取光敏传感器的数据
uint8_t Read_Buzzer_Data(void);
//初始化环境
void Buzzer_PhotoResitors_Init(void);
//光敏电阻响应
void Reaction_PhotoResitors(void);
//蜂鸣器响应
void Buzzer_Ring(void);
//蜂鸣器安静
void Buzzer_Slient(void);
#endif//源文件
#include "stm32f10x.h"
#include "Button.h"
#include "Delay.h"
//读取光敏传感器的数据
uint8_t Read_Buzzer_Data(void){return  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13); //读取蜂鸣器引脚数据
}
//初始化蜂鸣器和光敏电阻环境
void Buzzer_PhotoResitors_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);  //B端口时钟使能GPIO_InitTypeDef Buzzer;Buzzer.GPIO_Mode = GPIO_Mode_IPU; //上拉输入,保持光敏电阻在线Buzzer.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_12; Buzzer.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB,&Buzzer);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);
}
//蜂鸣器响应,红灯亮
void Buzzer_Ring(void){GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);  //红灯亮GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET);  //绿灯灭while(1){GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);  //低电平有效Delay_ms(200);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);Delay_ms(300);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);  //低电平有效Delay_ms(300);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);Delay_ms(100);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_RESET);  //低电平有效Delay_ms(200);GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);Delay_ms(300);break;     //要退出循环,不然一直响,也回不到绿灯状态}}
//蜂鸣器安静,绿灯亮
void Buzzer_Slient(void){GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);  //红灯灭GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);  //绿灯亮GPIO_WriteBit(GPIOB,GPIO_Pin_12,Bit_SET);  //高电平无效
}
//光敏电阻响应
void Reaction_PhotoResitors(void){uint8_t  RP = GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);  if(RP==1) Buzzer_Ring();else Buzzer_Slient();
}

项目结构

在这里插入图片描述

相关文章:

物联网D3——按键控制LED、光敏传感蜂鸣器

按键控制LED 按键抖动&#xff0c;电平发生变化&#xff0c;可用延时函数抵消按键抖动对系统的影响 传感器电路图 按键电路图 c语言对应类型 “_t”后缀表示使用typedef重命名的数据类型 枚举类型 #include<iostream> using namespace std; //定义枚举类型 typedef enu…...

Spring初学入门(跟学笔记)

一、Spring概述 Spring是一款主流的Java EE轻量级开源框架。 Spring的核心模块&#xff1a;IoC&#xff08;控制反转&#xff0c;指把创建对象过程交给Spring管理 &#xff09;、AOP&#xff08;面向切面编程&#xff0c;在不修改源代码的基础上增强代码功能&#xff09; 二、…...

二进制部署k8s---下篇

一 master02 节点部署 1 先在master01 添加映射master02 对master02进行环境初始化 3 从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点 scp -r /opt/etcd/ root192.168.11.12:/opt/ scp -r /opt/kubernetes/ root192.168.11.12:/opt…...

基于Sentinel-1遥感数据的水体提取

本文利用SAR遥感图像进行水体信息的提取&#xff0c;相比光学影像&#xff0c;SAR图像不受天气影响&#xff0c;在应急情况下应用最多&#xff0c;针对水体&#xff0c;在发生洪涝时一般天气都是阴雨天&#xff0c;云较多&#xff0c;光学影像质量较差&#xff0c;基本上都是利…...

C++自定义头文件使用(函数和类)

简单案例需求&#xff1a; 1&#xff0c;计算正方形和三角形的周长——函数 2&#xff0c;模拟不同类型的动物叫声——类 一、创建项目 C空项目 Class_Study 二、创建主函数 在源文件下添加新建项&#xff0c;main.cpp 三、自定义头文件——函数 需求&#xff1a;1&a…...

消息队列选型

一、要解决的问题 1.1 异步 分析&#xff1a; 需要根据场景来判断。若整体链路的逻辑中&#xff0c;某些逻辑是不需要强实时的&#xff0c;滞后一段时间是允许的&#xff0c;同时又不会对用户带来不好的体验&#xff0c;那么可以使用MQ完成异步操作。 例如&#xff1a;秒杀场…...

ubuntu在conda环境中使用 pip install -r requirements.txt但是没有安装在虚拟环境中

whereis pip pip listubuntu在conda环境中使用pip install lpips0.1.3 但是安装在了这里 Requirement already satisfied: lpips0.1.3 in /home/uriky/anaconda3/lib/python3.11/site-packages (0.1.3) 就会出现黄色波浪&#xff0c;未在虚拟环境中安装包 解决办法1&#xff1…...

力扣127.单词接龙讲解

距离上一次刷题已经过去了.........嗯............我数一一下............整整十天&#xff0c;今天再来解一道算法题 由于这段时间准备简历&#xff0c;没咋写博客。。今天回来了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…...

latex笔记

双列排版&#xff0c;右端margin不对齐怎么解决 如下图这种情况&#xff0c; 解决方法&#xff1a; 在文档开头引入ragged2e包 \usepackage{ragged2e}然后在子章节的开头添加 \justifying\subsection{camouflaged object detection based on coarse-to-fine strategy} \just…...

秋招算法——AcWing101——拦截导弹

文章目录 题目描述思路分析实现源码分析总结 题目描述 思路分析 目前是有一个笨办法&#xff0c;就是创建链表记录每一个最长下降子序列所对应的节点的链接&#xff0c;然后逐个记录所有结点的访问情况&#xff0c;直接所有节点都被访问过。这个方法不是很好&#xff0c;因为需…...

IDEA不能创建新项目和新模块

问题&#xff1a; IDEA不管是创建新项目还是新模块都创建不成功&#xff0c;会报如下图错误 解决方案&#xff1a; 在电脑设置里搜索 “防火墙和网络保护” &#xff0c;打开如下图所示 找到你所安装的IDEA&#xff0c;更改设置&#xff0c;选中IDEA 最后&#xff0c;确定&am…...

WebRTC 的核心:RTCPeerConnection

WebRTC 的核心&#xff1a;RTCPeerConnection WebRTC 的核心&#xff1a;RTCPeerConnection创建 RTCPeerConnection 对象RTCPeerConnection 与本地音视频数据绑定媒体协商ICE什么是 Candidate&#xff1f;收集 Candidate交换 Candidate尝试连接 SDP 与 Candidate 消息的互换远端…...

LeetCode hot100-39-N

101. 对称二叉树给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。做不出来哇&#xff0c;递归一生之敌 普通的对一棵树的递归遍历根本没办法只接比较左子树的左和右子树的右这样来比较&#xff0c;所以这题比较巧妙的是把这棵树当做两棵树一样去遍历比较。 官方…...

NumPy常用操作

目录 一:简介 二:NumPy 常用操作 三:总结 一:简介 是一个开源的Python库,它为Python提供了强大的多维数组对象和用于处理这些数组的函数。NumPy的核心是ndarray,它是一个高效的多维数组容器,用于存储和处理大规模的数据。NumPy还提供了许多数学函数,用于数组之间的操…...

学习笔记——字符串(单模+多模+练习题)

单模匹配 Brute Force算法&#xff08;暴力&#xff09; 算法思想 母串和模式串字符依次配对&#xff0c;如果配对成功则继续比较后面位置是否相同&#xff0c;如果出现匹配不成功的位置&#xff0c;则j&#xff08;模式串当前的位置&#xff09;从头开始&#xff0c;i&…...

DOT + graphviz 轻松画图

GraphViz&#xff1a;2 DOT语法和相关应用_graphviz dot-CSDN博客 图可视化之Graphviz - 知乎 Graphviz 是由AT&T Research、Lucent Bell实验室开源的可视化图形工具&#xff0c;可以很方便的用来绘制结构化的图形网络。具体地&#xff0c;其使用一种名为dot语言的DSL来编…...

使用Vue调用ColaAI Plus大模型,实现聊天(简陋版)

首先去百度文心注册申请自己的api 官网地址&#xff1a;LuckyCola 注册点开个人中心 查看这个文档自己申请一个ColaAI Plus定制增强大模型API | LuckyColahttps://luckycola.com.cn/public/docs/shares/api/colaAi.html来到vue的页面 写个样式 <template><Header …...

Unity使用sherpa-onnx实现离线语音合成

sherpa-onnx https://github.com/k2-fsa/sherpa-onnx 相关dll和lib库拷进Unity&#xff0c;官方示例代码稍作修改 using SherpaOnnx; using System; using System.IO; using System.Runtime.InteropServices; using UnityEngine;public class TTS : MonoBehaviour {public st…...

Elasticsearch入门基础和集群部署

Elasticsearch入门基础和集群部署 简介基础概念索引&#xff08;Index&#xff09;类型&#xff08;Type&#xff09;&#xff08;逐步弃用&#xff09;文档&#xff08;Document&#xff09;字段&#xff08;Field&#xff09;映射&#xff08;Mapping&#xff09;分片&#x…...

12、24年--信息系统治理——IT治理

主要考选择题,2分左右,案例、论文涉及概率不大,需要认证读课本原文。 1、IT治理基础 IT治理是描述组织采用有效的机制对信息技术和数据资源开发利用,平衡信息化发展和数字化转型过程中的风险,确保实现组织的战略目标的过程。 1.1 IT治理的驱动因素 1)存在很多问题: 信…...

重构求职效率:boss_batch_push批量投递工具的颠覆性价值

重构求职效率&#xff1a;boss_batch_push批量投递工具的颠覆性价值 【免费下载链接】boss_batch_push Boss直聘批量投简历&#xff0c;解放双手 项目地址: https://gitcode.com/gh_mirrors/bo/boss_batch_push boss_batch_push是一款专为Boss直聘平台设计的开源自动化投…...

微信QQ防撤回神器:RevokeMsgPatcher 2.1 终极使用教程

微信QQ防撤回神器&#xff1a;RevokeMsgPatcher 2.1 终极使用教程 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.co…...

别再瞎调了!FOC电机控制中,采样电阻选型和PCB布局的5个实战避坑点

FOC电机控制实战指南&#xff1a;采样电阻选型与PCB布局的5个关键避坑点 在无刷电机控制领域&#xff0c;FOC&#xff08;磁场定向控制&#xff09;算法凭借其优异的动态性能和效率表现&#xff0c;已成为工业驱动、消费电子和机器人关节的主流方案。然而&#xff0c;许多工程师…...

OFA-COCO蒸馏版部署教程:Windows WSL2环境下PyTorch服务调试全流程

OFA-COCO蒸馏版部署教程&#xff1a;Windows WSL2环境下PyTorch服务调试全流程 1. 引言&#xff1a;为什么选择OFA图像描述模型&#xff1f; 你有没有遇到过这样的场景&#xff1f;手头有一堆图片&#xff0c;需要为它们配上文字说明&#xff0c;一张张手动写描述&#xff0c…...

ARL灯塔扫不出指纹?手把手教你用Python脚本批量导入指纹库,提升资产识别准确率

ARL灯塔指纹识别优化实战&#xff1a;Python脚本批量导入与精准率提升指南 资产侦察灯塔&#xff08;ARL&#xff09;作为渗透测试领域的重要工具&#xff0c;其核心价值在于准确识别目标资产的技术特征。然而许多中级用户发现&#xff0c;默认指纹库在面对特定行业或新型资产…...

BI 项目交付 SOP

...

三极管信号滤波原理与工程实践

1. 三极管在信号滤波中的独特应用作为一名嵌入式硬件工程师&#xff0c;我经常需要处理各种传感器信号。最近在无刷电机驱动项目中&#xff0c;遇到了霍尔信号毛刺干扰的问题。传统教科书上总是强调三极管的放大作用&#xff0c;但实际工程中&#xff0c;我发现三极管在信号滤波…...

开源新形态:从代码到Prompt的转变

【导语&#xff1a;3月末&#xff0c;开源作者yetone发布新项目voice-input-src&#xff0c;以独特方式“开源”&#xff0c;即用自然语言Prompt生成代码&#xff0c;此做法引发讨论&#xff0c;或预示开源模式新转变。】AI驱动的语音输入法开源项目开源作者yetone在GitHub上发…...

告别重复造轮子:用快马AI一键生成嵌入式Modbus协议栈提升效率

作为一名嵌入式开发者&#xff0c;我经常需要为各种项目实现Modbus通信协议。每次从零开始编写协议栈不仅耗时&#xff0c;还容易引入低级错误。最近尝试用InsCode(快马)平台生成基础框架&#xff0c;效率提升明显&#xff0c;分享下具体实践过程。 传统开发痛点分析 在STM32项…...

BurpSuite导入P12证书遇到密码问题?3种无密码解决方案实测

BurpSuite导入P12证书遇到密码问题&#xff1f;3种无密码解决方案实测 在企业安全测试和渗透评估过程中&#xff0c;客户端证书认证是常见的防护机制。当BurpSuite提示需要P12证书密码而您又无法获取时&#xff0c;整个测试流程可能陷入僵局。本文将分享三种经过实战验证的解决…...