BMP280 arduino调试

终于成功了。

#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_status = 0xF3;
byte  addr_ctrl = 0xF4;
byte  addr_timestandby = 0xF5;
byte  addr_id = 0xd0;
s32_t t_fine;
void setup() {
  // 初始化串口通信
  Serial.begin(115200);

  // 配置从设备选择引脚
  pinMode(chipSelectPin, OUTPUT);

  // 初始化 SPI
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV8);  // 设置时钟分频,可根据需要调整
  //===============获得BMP280参数==================//
  dig_t1_lsb = readRegister(addr_dig_t1_lsb,1);
  dig_t1_msb = readRegister(addr_dig_t1_msb,1);
  dig_t2_lsb = readRegister(addr_dig_t2_lsb,1);
  dig_t2_msb = readRegister(addr_dig_t2_msb,1);
  dig_t3_lsb = readRegister(addr_dig_t3_lsb,1);
  dig_t3_msb = readRegister(addr_dig_t3_msb,1);
  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器件ID==================//
  byte device_id = readRegister(addr_id,1);
  Serial.print("device_id = ");
  Serial.println(device_id, HEX);   
//===============设置TIME_STANDBY采样时间==================//
  byte timestandby = readRegister(addr_timestandby,0x01);
  Serial.print("timestandby = ");
  Serial.println(timestandby, HEX); 
  timestandby=timestandby |  (0x001 << 5) ;
  writeRegister(addr_timestandby,timestandby);
//===============设置BMP280为连续模式==================//
  byte ctrl_meas = readRegister(addr_ctrl,1);
  Serial.print("ctrl_meas = ");
  Serial.println(ctrl_meas, BIN);   
  writeRegister(addr_ctrl,0x03);
  //===============获得当前状态==================//
  ctrl_meas = readRegister(addr_ctrl,1);
  Serial.print("ctrl_meas = ");
  Serial.println(ctrl_meas, BIN);  
 //===============打印BMP280校准参数==================//
  Serial.print("dig_t1 = ");
  Serial.println(dig_t1, HEX);
  Serial.print("dig_t2 = ");
  Serial.println(dig_t2, HEX);
  Serial.print("dig_t3 = ");
  Serial.println(dig_t3, HEX);   
  Serial.print("bmp_status = ");
  Serial.println(bmp_status, BIN);  
}

void loop() {
//  writeRegister(addr_ctrl,0x01);
//===============获得全部数据==================//
  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, HEX);
  Serial.println(addr_temp_lsb, HEX);
  Serial.println(addr_temp_msb, HEX);
//================计算温度值==================//  
  temp = (u32_t)temp_msb << 12 | (u32_t)temp_lsb << 4 | (u32_t)temp_xlsb >> 4;
  temp_comp = bmp280_compensate(temp);
  float temp_comp_float = temp_comp/100.00;
//================串口打印温度值==================//  
  Serial.print("Composate Temprature is: ");
  Serial.println(temp_comp, DEC);
  Serial.print(temp_comp_float);
  Serial.println("℃");

  // 延时等待
  delay(2000);
}
unsigned int readRegister(byte thisRegister, int bytesToRead) {
  byte inByte = 0;           // incoming byte from the SPI
  unsigned int result = 0;   // result to return
  byte 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) {
 
  // take the chip select low to select the device:
  digitalWrite(chipSelectPin, LOW);

  SPI.transfer(thisRegister); //Send register location
  SPI.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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言:如何基于地球外辐射(Ra)和相对日照(n/N)计算太阳辐射Rs?

正在编写相关软著&#xff0c;借此机会了解R语言的基本语法和一些处理流程&#xff0c;所以解释稍微繁琐。 Note&#xff1a; 使用的R语言版本是 R version 4.3.2 (2023-10-31 ucrt) 使用的RStudio编辑器版本是&#xff1a; 01 基于随机森林的插值填补缺失值 这是目前处理…

电子供应链的未来:电子元器件采购商城的洞察

电子供应链的未来将受到数字化技术、智能化制造和全球化贸易等趋势的深刻影响。在这一背景下&#xff0c;电子元器件采购商城将发挥越来越重要的作用&#xff0c;并提供以下洞察&#xff1a; 数字化转型&#xff1a; 电子元器件采购商城将更加注重数字化转型&#xff0c;通过引…

【计算机系统结构】重叠方式

&#x1f4dd;本文介绍 本文主要内容位计算机系统结构的重叠方式 &#x1f44b;作者简介&#xff1a;一个正在积极探索的本科生 &#x1f4f1;联系方式&#xff1a;943641266(QQ) &#x1f6aa;Github地址&#xff1a;https://github.com/sankexilianhua &#x1f511;Gitee地址…

不可变集合

2. 3. 如果键值对超过10个的话 优化之后 要生成不可变的集合直接使用copyof就可以

Python XML处理实战指南:从基础到高级技巧

Python XML处理实战指南&#xff1a;从基础到高级技巧 介绍XML基础XML的定义和特点XML结构组成命名空间&#xff08;Namespaces&#xff09;小结 Python中处理XML的库ElementTreeminidomlxml 使用ElementTree解析XML读取XML文件遍历XML元素查找特定元素修改XML文件 使用lxml处理…

除了「au revoir」,「再见」还能怎么说?柯桥成人学外语来银泰附近

1. Je dois y alle#15857575376r I have to go there Y there&#xff0c;意思是“我要走了”。 例如&#xff0c;”Moi, je dois y aller.” 对不起&#xff0c;我该走了。 如果你和同伴都要离开&#xff0c;那就可以说"On y va"&#xff0c;它相当于英语里…

C#集合和数据结构,随笔记录

C#集合和数据结构 System.Collections命名空间包含接口和类&#xff0c;这些接口和类定义各种对象&#xff08;如列表/链表、位数组、哈希表、队列和堆栈&#xff09;的集合 System.Collections.Generic命名空间&#xff1a; 所有集合都直接或间接基于ICollection接口 列表类集…

Redis数据结构对象(一)

对象 概述 Redis并没有直接使用简单动态字符串(SDS)、双端链表、字典、压缩列表、整数集合等这些数据结构来实现键值对数据库&#xff0c;而是基于这些数据结构创建了一个对象系统&#xff0c;这个系统包含字符串对象、列表对象、 哈希对象、集合对象和有序集合对象这五种类型…

Cesium 获取 3dtileset的包围盒各顶点坐标

Cesium 获取 3dtileset的包围盒各顶点坐标 /*** 获取 3dtileset的包围盒各顶点坐标, z 方向取高度最低的位置* param {*} tileset* param {*} options* returns* ref https://blog.csdn.net/STANDBYF/article/details/135012273* ref https://community.cesium.com/t/accurate-…

基于SpringBoot+Vue的IT博客管理系统

目录 一、绪论1.1 开发背景1.2 系统开发平台1.2.1 Java语言的简介1.2.2 MySQL的简介1.2.3 IntelliJ IDEA的简介 二、需求分析2.1 系统简介2.1.1 系统类型2.1.2 系统用法2.1.3 系统特点 2.2 需求分析2.2.1 系统设计任务2.2.2 系统设计目标2.2.3 系统设计步骤 三、系统设计3.1 用…

视频素材库大全高清素材必备网站,总有一个值得收藏!

喜欢制作短视频的朋友们&#xff0c;你们是否时常苦于寻找合适的视频素材库大全高清素材必备网站&#xff1f;今天&#xff0c;我为大家整理了五个超棒的短视频素材下载网站&#xff0c;希望能够为你们的视频创作提供更多灵感和选择&#xff01; 1.蛙学网&#xff1a; 蛙学网不…

qt可以信号触发信号(信号与槽)信号串联

使用场景&#xff1a;一大堆lineEdit要更新数据上面10几个QLineEdit,z&#xff0c;只要任意改一个数据我都要把所有数据封装成一个包 connect(ui.radar_name_, &QLineEdit::textChanged, ui.antenna_height, &QLineEdit::textChanged); connect(ui.antenna_height, &a…

裸机编程的几种模式、架构与缺陷。

大多数嵌入式的初学者都是从单片机裸机编程开始的&#xff0c;对于初学者来说&#xff0c;裸机编程更加直观、简单&#xff0c;代码所见及所得&#xff0c;调试也非常方便&#xff0c;区别于使用操作系统需要先了解大量的操作系统基础知识&#xff0c;调度的基本常识&#xff0…

【JavaEE Spring 项目】消息队列的设计

消息队列的设计 一、消息队列的背景知识二、需求分析核心概念⼀个⽣产者, ⼀个消费者N 个⽣产者, N 个消费者Broker Server 中的相关概念核⼼ API交换机类型 (Exchange Type)持久化⽹络通信消息应答 三、 模块划分四、 项⽬创建五、创建核心类创建 Exchange创建 MSGQUeue创建 B…

C语言数据结构基础笔记——树、二叉树简介

1.树 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 &#xff08;图片来源于网络&#xff09;…

计算机考研|王道四本书够吗?

如果你是跨考生&#xff0c;王道的四本书只能覆盖你需要的80% 如果你是计算机专业的考生&#xff0c;王道四本书可以覆盖你需要的90% 我已经说的很明显了&#xff0c;王道的内容覆盖不了408考研的全部大纲&#xff0c;有的知识点虽然在王道书上提到了&#xff0c;但是因为不是…

拿捏指针(二)

个人主页&#xff1a;秋邱博客 所属栏目&#xff1a;C语言 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 目录 前言 数组与指针 数组名的理解 指针数组与数组指针 指针数组 数组指针 数组传参 一维数组传参的本质 二维数组传参的本质 二维数组…

【数据结构与算法】:选择排序与快速排序

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;数据结构与算法 我的博客即将同步至腾讯云开发者社区&#xff0c;邀请大家一同入驻&#xff1a;腾讯云 欢迎来到排序的第二个部分&#xff1a;选择排序与快速排序&#xff01; 目录 1.选择排序1.…

【网站项目】325企业OA管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

SpringBoot启动后出现Please sign in页面

1. 问题 项目启动后&#xff0c;出现莫名其妙的页面&#xff0c;如下 2. 原因 当您启动 Spring Web 应用程序后出现 “Please sign in” 页面时&#xff0c;这通常是由于引用依赖Spring Security默认的身份验证方式导致的。 <dependency><groupId>org.springfr…