当前位置: 首页 > 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)存在很多问题: 信…...

Auto.js开发环境搭建:用雷电模拟器替代真机,解决局域网IP不在同一网段的问题

Auto.js开发环境搭建&#xff1a;雷电模拟器网络架构深度解析与实战指南 当开发者手头没有备用安卓设备&#xff0c;或者真机与电脑的Wi-Fi连接频繁断开时&#xff0c;安卓模拟器成为了Auto.js脚本测试的救星。但模拟器的网络配置往往暗藏玄机——为什么雷电模拟器显示172.16.x…...

大模型应用开发:从需求分析到上线的全流程指南

一、需求分析&#xff1a;锚定测试视角下的开发方向对于软件测试从业者而言&#xff0c;大模型应用开发的需求分析阶段&#xff0c;核心是跳出传统功能测试的思维局限&#xff0c;从“验证功能正确性”转向“定义AI能力边界”。首先要明确业务场景的核心诉求&#xff0c;比如开…...

Phantora:革新GPU集群模拟的LLM训练优化技术

1. Phantora&#xff1a;GPU集群模拟技术的革新者 在大型语言模型&#xff08;LLM&#xff09;训练领域&#xff0c;分布式GPU集群的性能优化一直是个棘手问题。传统方法通常需要在实际硬件上反复试错&#xff0c;这不仅成本高昂&#xff0c;而且调试周期漫长。想象一下&#x…...

Perplexity搜索响应延迟突增2100ms?内部API调用链路拆解,开发者必看避坑清单

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Perplexity搜索响应延迟突增2100ms&#xff1f;现象复现与影响定性 近期监控系统捕获到Perplexity搜索API端点&#xff08; /v1/search&#xff09;在UTC时间2024-06-12T08:14:22Z起出现持续约17分钟的P99延迟…...

STM32 SPI驱动W25Q128避坑指南:CubeMX配置、时序模式与读写超时那些事儿

STM32 SPI驱动W25Q128实战避坑指南&#xff1a;从时序陷阱到性能调优 1. 当SPI遇上Flash&#xff1a;硬件工程师的暗礁地带 在嵌入式存储解决方案中&#xff0c;W25Q128系列SPI Flash凭借其紧凑封装和简单接口&#xff0c;已成为众多STM32项目的标配外设。但看似简单的四线接口…...

遗传算法组卷效果总是不理想?可能是你的‘适应度函数’没调好(Java实战避坑)

遗传算法组卷效果优化&#xff1a;从适应度函数设计到Java实战调优 当你在深夜盯着屏幕&#xff0c;反复运行遗传算法组卷程序却始终得不到理想的试卷时&#xff0c;那种挫败感我深有体会。三年前我在开发在线教育平台时&#xff0c;曾连续两周被组卷效果不稳定问题困扰——试卷…...

操作插件方法

事件触发时机事务状态适用场景beforeExecuteOperationTransaction操作校验通过后&#xff0c;开启事务之前事务未开启✅ 修改源单据关联的其他单据beginOperationTransaction开启事务后&#xff0c;提交数据库之前事务已开启修改当前操作的单据自身数据...

跨国设计大文件同步延迟高?企业网盘选型必须知道的 3 个标准(含 5 款网盘实测)

对于跨国运作的设计与研发团队而言&#xff0c;最折磨人的往往不是时差&#xff0c;而是等待一个 2GB 的大型工程文件&#xff08;PSD、CAD 或项目源文件&#xff09;缓慢同步的“沙漏时长”。国外团队昨晚做好的模型&#xff0c;国内团队早上还要等一个小时才能下载完毕&#…...

DDR3 颗粒信号定义解析

本文围绕 DDR3 标准信号定义、核心信号工作原理、PCB Layout 等长设计规则及行业常见误区展开&#xff0c;全程聚焦工程实践与底层原理。一、DDR3 标准信号完整清单&#xff08;x16 位宽基准&#xff0c;x32 位宽对应翻倍&#xff09;1. 数据信号&#xff08;Data&#xff09;表…...

在Trae 运行、调试这个项目的时候,我发现有些python子进程内存占用超过32G,导致系统内存跑超到100% 。是否项目存在内存泄漏的隐患?我应该怎么让Trae去处理呢?请给我发给Trae的指令

先上结论&#xff1a;Trae一如既往的好用&#xff01;yan的repo&#xff1a;yan:基于 Python 生态的中文函数式编程语言项目 - AtomGit | GitCode 先问Dumate问题 在Windows10 用Trae 运行、调试yan这个中文编程项目的时候&#xff0c;我发现有些python子进程内存占用超过32G…...