ARM.day8
1.自己设置温度湿度阈值,当温度过高时,打开风扇,蜂鸣器报警
2.当湿度比较高时,打开LED1灯,蜂鸣器报警
main.c
#include "si7006.h"
#include "CH1.h"
#include "led.h"
// 延时函数int main()
{// iic初始化iic_init();// si7006初始化si7006_init();// 风扇,蜂鸣器,LED灯初始化TIM1_init();TIM4_init();all_led_init();// 温度short tem;// 湿度unsigned int short hum;while (1){// 读取温度数据tem=si7006_read_tme();// 读取湿度数据hum=si7006_read_hum();// 计算温湿度数据tem=175.72*tem/65536-46.85;hum=125*hum/65536-6;// 串口打印printf("tem:%d\n",tem);printf("hum:%d",hum);if(tem>25){TIM1_ON();TIM4_ON();}if(hum>60){LED1_ON();TIM4_ON();}delay(1000);TIM1_OFF();LED1_OFF();TIM4_OFF();}return 0;
}
si7006.c
#include"si7006.h"
//封装延时函数
void delay(int ms)
{int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++){}}
}
void si7006_init()
{//发起起始信号i2c_start();//发送从机地址+写标志i2c_write_byte(0X40<<1|0);//等待从机应答i2c_wait_ack();//发送寄存器地址 0XE6i2c_write_byte(0XE6);//等待从机应答i2c_wait_ack();//传输要写入的数据0X3A、i2c_write_byte(0X3A);//等待从机应答i2c_wait_ack();//发送终止信号i2c_stop();
}short si7006_read_tem()
{short tem;char tem_h,tem_l;//发起起始信号i2c_start();//发送从机地址+写标志i2c_write_byte(0x40<<1|0);//等待从机应答i2c_wait_ack();//发送寄存器地址 0XE3i2c_write_byte(0xe3);//等待从机应答i2c_wait_ack();//重复起始信号i2c_start();//发送从机地址+读标志i2c_write_byte(0x40<<1|1);//等待从机应答i2c_wait_ack();delay(100);//等待从机测量数据//接收数据高八位//发送应答信号tem_h=i2c_read_byte(0);//接收数据低八位//发送非应答信号tem_l=i2c_read_byte(1);//将高八位和低八位合成一个数据 高八位<<8|低8位tem=tem_h<<8|tem_l;return tem;
}unsigned short si7006_read_hum()
{unsigned short hum;unsigned char hum_h,hum_l;//发起起始信号i2c_start();//发送从机地址+写标志i2c_write_byte(0x40<<1|0);//等待从机应答i2c_wait_ack();//发送寄存器地址 0XE3i2c_write_byte(0xe5);//等待从机应答i2c_wait_ack();//重复起始信号i2c_start();//发送从机地址+读标志i2c_write_byte(0x40<<1|1);//等待从机应答i2c_wait_ack();delay(100);//等待从机测量数据//接收数据高八位//发送应答信号hum_h=i2c_read_byte(0);//接收数据低八位//发送非应答信号hum_l=i2c_read_byte(1);//将高八位和低八位合成一个数据 高八位<<8|低8位hum=hum_h<<8|hum_l;return hum;
}
si7006.h
#ifndef __SI7006_H_
#define __SI7006_H_
#include "iic.h"void si7006_init();
short si7006_read_tem();
unsigned short si7006_read_hum();
#endif
CH1.c
#include "CH1.h"
//风扇的初始化
void TIM1_init()
{//GPIOE时钟使能RCC |= (0x1 << 4);//PE9设置为输出GPIOE->MODER &= (~(0X3 << 18));GPIOE->MODER |= (0X1 << 18);//PE9设置为推挽输出GPIOE->OTYPER &= (~(0X1 << 9));//PE9设置为低速输出GPIOE->OSPEEDR &= (~(0X3 << 18));//PE9无上拉下拉电阻GPIOE->OPUPDR &= (~(0X3 << 18));//默认输出低电平GPIOE->ODR &= (~(0X1 << 9));
}
//蜂鸣器初始化
void TIM4_init()
{//GPIOB时钟使能RCC |= (0x1 << 1);//PB6设置为输出GPIOB->MODER &= (~(0X3 << 12));GPIOB->MODER |= (0X1 << 12);//PB6设置为推挽输出GPIOB->OTYPER &= (~(0X1 << 6));//PB6设置为低速输出GPIOB->OSPEEDR &= (~(0X3 << 12));//PB6无上拉下拉电阻GPIOB->OPUPDR &= (~(0X3 << 12));//默认输出低电平GPIOB->ODR &= (~(0X1 << 6));
}
// 风扇转动
void TIM1_ON()
{GPIOE->ODR |= (0X1 << 9);
}
// 风扇关闭
void TIM1_OFF()
{GPIOE->ODR |= (~(0X1 << 9));
}
// 蜂鸣器启动
void TIM4_ON()
{GPIOB->ODR |= (0X1 << 6);
}
// 蜂鸣器关闭
void TIM4_OFF()
{GPIOB->ODR |= (~(0X1 << 6));
}
相关文章:
ARM.day8
1.自己设置温度湿度阈值,当温度过高时,打开风扇,蜂鸣器报警 2.当湿度比较高时,打开LED1灯,蜂鸣器报警 main.c #include "si7006.h" #include "CH1.h" #include "led.h" // 延时函数in…...
SpringCloud Gateway工作流程
Spring Cloud Gateway的工作流程 具体的流程: 用户发送请求到网关 请求断言,用户请求到达网关后,由Gateway Handler Mapping(网关处理器映射)进行Predicates(断言),看一下哪一个符合…...
西井科技与安通控股签署战略合作协议 共创大物流全新生态
2024年3月21日,西井科技与安通控股在“上海硅巷”新象限空间正式签署战略合作框架协议。双方基于此前在集装箱物流的成功实践与资源优势,积极拓展在AI数字化产品、新能源自动驾驶解决方案和多场景应用,以及绿色物流链等领域的深度探索、强强联…...
CCCorelib 点云RANSAC拟合球体(CloudCompare内置算法库)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 RANSAC是一种随机参数估计算法。RANSAC从样本中随机抽选出一个样本子集,使用最小方差估计算法对这个子集计算模型参数,然后计算所有样本与该模型的偏差,再使用一个预先设定好的阈值与偏差比较,当偏差小于阈值时…...
map china not exists. the geojson of the map must be provided.
map china not exists. the geojson of the map must be provided. 场景:引入echarts地图报错map china not exists. the geojson of the map must be provided. 原因: echarts版本过高,ECharts 之前提供下载的矢量地图数据来自第三方&…...
Redis如何删除大key
参考阿里云Redis规范 查找大key: redis-cli --bigkeys 1、String类型: Redis 4.0及以后版本提供了UNLINK命令,该命令与DEL命令类似,但它会在后台异步删除key,不会阻塞当前客户端,也不会阻塞Redis服务器的…...
JRT菜单
上一章搭建了登录界面的雏形和抽取了登录接口。给多组使用登录和菜单功能提供预留,做到不强行入侵别人业务。任何产品只需要按自己表实现登录接口后配置到容器即可共用登录界面和菜单部分。最后自己的用户关联到JRT角色表即可。 登录效果 这次构建菜单体系 首先用…...
《海王2》观后感
前言 我原本计划电影上映之后,去电影院观看的,但时间过得飞快,一眨眼这都快4月份了,查了一下,电影院早就没有排片了,所以只能在B站看了,这里不得不吐槽一下,原来花了4块钱购买观看还…...
[蓝桥杯 2023 省 A] 颜色平衡树:从零开始理解树上莫队 一颗颜色平衡树引发的惨案
十四是一名生物工程的学生,他已经7年没碰过信息学竞赛了,有一天他走在蓝桥上看见了一颗漂亮的颜色平衡树: [蓝桥杯 2023 省 A] 颜色平衡树 - 洛谷 十四想用暴力解决问题,他想枚举每个节点,每个节点代表…...
maya打开bvh脚本
目录 maya打开脚本编辑器 运行打开bvh脚本 maya导出bvh脚本 maya打开脚本编辑器 打开Maya软件,点击右下角 “脚本编辑器” 运行打开bvh脚本 https://github.com/jhoolmans/mayaImporterBVH/blob/master/bvh_importer.py import os import re from typing impo…...
【JavaSE】数据类型和运算符
前言 从这一篇我们开始Java的学习~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 Java第一个程序 字面常量 字面常量的分类 结合代码理解 类型转换 类型提升 byte与byte的运算 正确写法 字符串类型St…...
Docker 哲学 - ip 的组成规则 与 网关介绍
在 IP 地址中,我们通常将 IP 地址分为两部分:网络部分和主机部分。网络部分用于标识网络,主机部分用于标识该网络中的特定主机。 IP 地址的每个部分(也被称为一个八位组或一个字节)可以是从0到255的任何值。 一个 IPv4…...
数学建模竞赛真的是模型解题一般,但是论文出彩而获奖的吗?
最近,数乐君发现有同学会有这样的问题:在数学建模国赛中,会因为参赛团队的模型解题一般,但论文写得非常精彩而获奖吗? 是的,确实会存在这样的情况。 我们都知道数学建模竞赛最终都是以提交成品论文的形式…...
深度学习常见的三种模型
深度学习模型实际上是一个包含多个隐藏层的神经网络,目前主要有卷积神经网络(CNN)、深度置信网络(DBN)、循环神经网络(RNN)。 1) 卷积神经网络 在机器学习领域,卷积神经网络属于前…...
接口自动化测试分层设计与实践总结
🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 接口测试三要素: 参数构造 发起请求&#x…...
集合(下)Map集合的使用
文章目录 前言一、Map接口二、Map接口的实现类 1.HashMap类2.TreeMap类总结 前言 Map集合没有继承Collection接口,不能像List集合和Set集合那样直接使用Collection接口的方法。Map集合其自身通过以key到value的映射关系实现的集合,也有相应的许多方法。类…...
AAPT: error: resource android:attr/dialogCornerRadius not found.
ERROR:D:\android.gradle\caches\transforms-3\b3b98118f65da38d0ad9da84cfc70a72\transformed\appcompat-1.0.0\res\values-v28\values-v28.xml:5:5-8:13: AAPT: error: resource android:attr/dialogCornerRadius not found. 请帮我看看这个错误是什么意思。我改如何做。 这个…...
数字功放VS模拟功放,选择适合你的音频解决方案
数字功放和模拟功放是音频系统中常用的两种功放技术,适用于不同的音频应用,都具有各自的优势和特点。本文将为您详细介绍数字功放和模拟功放的差异,并帮助您找到适合自己的音频解决方案。 1、数字功放是一种利用数字信号处理技术的功放。它将…...
5.88 BCC工具之tcpsynbl.py解读
一,工具简介 tcpsynbl工具以直方图的形式显示SYN到达时的TCP SYN积压大小。这可以让我们了解应用程序距离达到积压限制并丢弃SYN(导致SYN重传产生性能问题)还有多远。 TCP SYN 数据包则通常用于启动 TCP 三次握手过程的第一次握手。 二,代码示例 #!/usr/bin/env python…...
GVRP实现vlan的自动创建和注册
拓扑图 资源已上传 流程 第一、每台交换机的全局及端口下使能GVRP功能 第二、配置交换机的二层连通性,交换机某些端口配置Trunk端口,并允许相应的vlan通过 第三、在交换机4和5配置静态vlan100,然后查看1和3交换机是否有vlan100的定义&…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...
计算机系统结构复习-名词解释2
1.定向:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方,那么就可以避免停顿。 2.多级存储层次:由若干个采用不同实现技术的存储…...
