BMP280学习

1.Forced mode模式,单次采集后进入休眠,适用于低采样率。

2.normal mode模式,持续采集,我们使用这种

采集事件基本都是ms级,所以我们1s更新一次。

温度和压力的计算

#include <SPI.h>
//定义数据类型
#define s32_t long signed int
#define u32_t long unsigned int
#define u16_t unsigned short
#define s16_t signed short
// 定义从设备选择引脚
const int chipSelectPin = 10;
//=============定义BMP280寄存器===========///
unsigned int  temp_xlsb;  
unsigned int  temp_lsb;
unsigned int  temp_msb;
unsigned int  press_xlsb;
unsigned int  press_lsb;
unsigned int  press_msb;
u16_t dig_t1_lsb;
u16_t dig_t1_msb;
s16_t dig_t2_lsb;
s16_t dig_t2_msb;
s16_t dig_t3_lsb;
s16_t dig_t3_msb;
u32_t dig_t1;
s32_t dig_t2;
s32_t dig_t3;
s32_t temp;
s32_t temp_comp;
u16_t bmp_status;
byte  addr_temp_xlsb = 0xFC;  
byte  addr_temp_lsb = 0xFB;
byte  addr_temp_msb = 0xFA;
byte  addr_press_xlsb = 0xF9;
byte  addr_press_lsb = 0xF8;
byte  addr_press_msb = 0xF7;
byte  addr_dig_t1_lsb = 0x88;
byte  addr_dig_t1_msb = 0x89;
byte  addr_dig_t2_lsb = 0x8A;
byte  addr_dig_t2_msb = 0x8B;
byte  addr_dig_t3_lsb = 0x8C;
byte  addr_dig_t3_msb = 0x8D;
byte  addr_ctrl = 0xF4;
byte  addr_status = 0xF3;s32_t t_fine;
void setup() {// 初始化串口通信Serial.begin(9600);// 配置从设备选择引脚pinMode(chipSelectPin, OUTPUT);// 初始化 SPISPI.begin();SPI.setClockDivider(SPI_CLOCK_DIV8);  // 设置时钟分频,可根据需要调整//===============获得BMP280参数==================//dig_t1_lsb = readRegister(addr_dig_t1_lsb,2);dig_t1_msb = readRegister(addr_dig_t1_msb,2);dig_t2_lsb = readRegister(addr_dig_t2_lsb,2);dig_t2_msb = readRegister(addr_dig_t2_msb,2);dig_t3_lsb = readRegister(addr_dig_t3_lsb,2);dig_t3_msb = readRegister(addr_dig_t3_msb,2);bmp_status = readRegister(addr_status,1);dig_t1 = ((u32_t)dig_t1_msb << 8) | dig_t1_lsb;dig_t2 = ((s32_t)dig_t2_msb << 8) | dig_t2_lsb;dig_t3 = ((s32_t)dig_t3_msb << 8) | dig_t3_lsb;//===============设置BMP280为连续模式==================//byte ctrl_status = readRegister(addr_ctrl,1);Serial.print("ctrl_status = ");Serial.print(ctrl_status, HEX);  Serial.print("\n");  writeRegister(addr_ctrl,1);ctrl_status = readRegister(addr_ctrl,1);Serial.print("ctrl_status = ");Serial.print(ctrl_status, HEX);  Serial.print("\n");  //===============打印BMP280校准参数==================//Serial.print("dig_t1 = ");Serial.print(dig_t1, HEX);Serial.print("\n");Serial.print("dig_t2 = ");Serial.print(dig_t2, HEX);Serial.print("\n");Serial.print("dig_t3 = ");Serial.print(dig_t3, HEX);  Serial.print("\n");  Serial.print("bmp_status = ");Serial.print(bmp_status, HEX);  Serial.print("\n");  
}void loop() {
//===============获得全部数据==================//temp_xlsb = readRegister(addr_temp_xlsb,1);temp_lsb = readRegister(addr_temp_lsb,1);temp_msb = readRegister(addr_temp_msb,1);press_xlsb = readRegister(addr_press_xlsb,1);press_lsb = readRegister(addr_press_lsb,1);press_msb = readRegister(addr_press_msb,1);Serial.println(addr_temp_xlsb, DEC);Serial.println(addr_temp_lsb, DEC);Serial.println(addr_temp_msb, DEC);
//================计算温度值==================//  temp = (u32_t)temp_msb << 12 || (u32_t)temp_lsb << 4 || (u32_t)temp_xlsb >> 4;temp_comp = bmp280_compensate(temp);
//================串口打印温度值==================//  Serial.print("Composate Temprature is: ");Serial.println(temp_comp, DEC);Serial.print("\n");// 延时等待delay(2000);
}
unsigned int readRegister(byte thisRegister, int bytesToRead) {byte inByte = 0;           // incoming byte from the SPIunsigned int result = 0;   // result to returnbyte dataToSend = thisRegister;digitalWrite(chipSelectPin, LOW);// send the device the register you want to read:SPI.transfer(dataToSend);// send a value of 0 to read the first byte returned:result = SPI.transfer(0x00);// decrement the number of bytes left to read:bytesToRead--;// if you still have another byte to read:if (bytesToRead > 0) {// shift the first byte left, then get the second byte:result = result << 8;inByte = SPI.transfer(0x00);// combine the byte you just got with the previous one:result = result | inByte;// decrement the number of bytes left to read:bytesToRead--;}// take the chip select high to de-select:digitalWrite(chipSelectPin, HIGH);// return the result:return (result);
}
void writeRegister(byte thisRegister, byte thisValue) {byte dataToSend = thisRegister;// take the chip select low to select the device:digitalWrite(chipSelectPin, LOW);SPI.transfer(dataToSend); //Send register locationSPI.transfer(thisValue);  //Send value to record into register// take the chip select high to de-select:digitalWrite(chipSelectPin, HIGH);
}s32_t bmp280_compensate(s32_t adc_t)
{s32_t var1,var2,t;var1 = ((((adc_t>>3) - ((s32_t)dig_t1<<1))) * ((s32_t)dig_t2)) >>11;var2 = (((((adc_t>>4) - ((s32_t)dig_t1)) * ((adc_t>>4) - ((s32_t)dig_t1)))>>12) * ((s32_t)dig_t3)) >>14;t_fine = var1 + var2;t = (t_fine *5 +128) >>8;return t;
}

运行结果,实际不对。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/747107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

27.函数指针数组

函数指针数组 概念 函数指针的数组本质是一个数组&#xff0c;它允许你存储多个函数指针&#xff0c;并且可以通过索引来调用这些函数。 定义 int (*pfunc[3])(int,int){getMax,getMin,getAdd};应用 #include <stdio.h>int getMax(int a,int b) {return a>b?a:b…

vs2022安装番茄助手后无法使用

1.安装番茄助手 兼容性-win7-管理员启动 2.破解 下载附件“VA_X64.dll”、“PiaoYun64.dll”破解文件&#xff0c;使用Everything找到C盘对应的“VA_X64.dll”路径&#xff0c;将两个破解文件拷贝到此路径。 3.命令行键入类似命令&#xff1a;D:\OfficeSoftware\VisualStudi…

计算机视觉+人工智能碰撞出新的火花

计算机视觉&#xff08;CV&#xff09;技术的优势是其能够处理大量的图像和视频数据&#xff0c;并快速准确地提取出有用的信息。 1. 自动化&#xff1a;CV技术可以自动化地执行各种图像处理任务&#xff0c;例如目标检测、图像分类和图像分割。这样可以提高工作效率并降低人工…

SfM——八点法计算F矩阵(基础矩阵)与三角测量

1 八点法计算F矩阵&#xff08;基础矩阵&#xff09; 基础矩阵用于描述两个视图之间的几何关系 基础矩阵&#xff1a;基础矩阵 F F F 是描述两个视图之间相机投影关系的矩阵。对于两个对应的图像坐标点 ( x , y , 1 ) (x, y, 1) (x,y,1) 和 ( u , v , 1 ) (u, v, 1) (u,v,1…

前端:设置覆盖图片的层叠顺序

html <div class"image-container"><img src"image1.jpg" class"image1" alt"Image 1"><img src"image2.jpg" class"image2" alt"Image 2"> </div> css代码 .image-contai…

Elasticsearch(8) random_score的使用

elasticsearch version&#xff1a; 7.10.1 random_score的使用 在Elasticsearch中&#xff0c;random_score查询可以用来随机排序搜索结果&#xff0c;这对于实现诸如轮播、随机推荐等功能非常有用。 random_score的语法 GET /<索引名>/_search {"query":…

Upload-labs靶场

文件漏洞上传进行复现 环境搭建--->搭建好环境如下&#xff1a; 打开第一关&#xff0c;尝试文件上传漏洞 根据界面提示&#xff0c;选择一个文件&#xff08;.php文件&#xff09;进行上传&#xff0c;发现无法上传 根据提示是指使用js对不合法文件进行了检查&#xff0c;…

Modbus -tcp协议使用第二版

1.1 协议描述 1.1.1 总体通信结构 MODBUS TCP/IP 的通信系统可以包括不同类型的设备&#xff1a; &#xff08;1&#xff09;连接至 TCP/IP 网络的 MODBUS TCP/IP 客户机和服务器设备&#xff1b; &#xff08;2&#xff09;互连设备&#xff0c;例如&#xff1a;在 TCP/IP…

Linux——GlusterFS分布式文件系统群集

一、GlusterFS简介 GlusterFS是一个开源的分布式文件系统&#xff0c;同时也是Scale-Out存储解决方案Gluster的核心&#xff0c;在存储数据方面具有强大的横向扩展能力&#xff0c;通过开展不同的节点可以支持数PB级别的存储容量。 GlusterFS的特点 扩展性和高性能、…

重学SpringBoot3-Problemdetails

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-Problemdetails Problem Details的概念ProblemDetails配置类在Spring Boot 3中使用Problem Details未配置Problem Details配置Problem Details自定义异常…

STM32利用AES加密数据、解密数据

STM32利用AES加密数据、解密数据 MD5在线工具Chapter1 STM32利用AES加密数据、解密数据一、头文件二、源文件三、使用 Chapter2 stm32 的 md5计算函数Chapter3 STM32 应用程序加密的一种设计方案前言一、计算AppKey二、自动配置流程三、出厂固件合并 个人总结 MD5在线工具 htt…

基于Java+SpringBoot+vue的图书购物商城系统详细设计和实现

基于JavaSpringBootvue的图书购物商城系统详细设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

操作多级(一、二、三级)指针才是我们的该有的姿态~

Hello&#xff0c;很有缘在这篇文章上我们相遇了&#xff0c;那么我就用题目巩固我们多级指针的知识&#xff0c;当然这里的题目是比较有点难度的&#xff0c;我们需要有点基础呀&#xff0c;如果你能轻松理解题目那说明你对指针的了解已经很有基础了呢&#xff0c;那废话不多说…

Observability:可观测性的新兴趋势:GAI、AIOps、工具整合和 OpenTelemetry

作者&#xff1a;来自 Elastic Gagan Singh 查看我们 2024 年对 500 多名可观察性决策者进行的调查结果&#xff0c;了解行业的发展方向。 随着技术的快速发展&#xff0c;可观察性也在快速发展。 可观察性对于推动积极的业务成果变得至关重要&#xff0c;我们希望了解用户如…

点餐平台网站|基于springboot框架+ Mysql+Java+Tomcat的点餐平台网站设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能实现 系统功能设计 数据库E-R图设计 lunwen参…

七月论文审稿GPT第3.2版和第3.5版:通过paper-review数据集分别微调Mistral、gemma

前言 我司第二项目组一直在迭代论文审稿GPT(对应的第二项目组成员除我之外&#xff0c;包括&#xff1a;阿荀、阿李、鸿飞、文弱等人)&#xff0c;比如 七月论文审稿GPT第1版&#xff1a;通过3万多篇paper和10多万的review数据微调RWKV七月论文审稿GPT第2版&#xff1a;用一万…

结构体之成绩统计2

题目描述 有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩) 输入格式 学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。 输出格式 各门…

使用CIP采集欧姆龙EtherNet/IP从入门到精通

本文将会从以下几个方面介绍 1.CIP是什么 2.EtherNet/IP通信是什么 3.CIP通信报文解析 4.使用CIP常用的方法和功能介绍&#xff08;UCMM&#xff09; 5.自己封装了一个类&#xff0c;只要知道标签名称&#xff0c;和数据类型即可读写数据 6.demo展示 1.CIP是什么 CIP通信…

【C#】【SAP2000】读取SAP2000中frame单元列表到Grasshopper中

private void RunScript(bool build, ref object p1, ref object p2, ref object Profile, ref object stressRatio, ref object temperatureLoad, ref object displacement, ref object frameList){if (build true){// 声明变量int ret;int Numit 0;int[] ObjType new int[…

【Datawhale组队学习:Sora原理与技术实战】使用KAN-TTS合成女生沪语音频

Sambert-Hifigan模型介绍 拼接法和参数法是两种Text-To-Speech(TTS)技术路线。近年来参数TTS系统获得了广泛的应用&#xff0c;故此处仅涉及参数法。 参数TTS系统可分为两大模块&#xff1a;前端和后端。 前端包含文本正则、分词、多音字预测、文本转音素和韵律预测等模块&am…