久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7480|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

BMP280規(guī)格書及Arduino測試程序及原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
含BMP280詳細(xì)的英文規(guī)格書  bmp280.pdf
原理圖
成品組件圖片
Arduino 測試源程序
文件有:Adafruit_BMP280.h   Adafruit_Sensor.h    library.properties  Adafruit_BMP280.cpp  .gitignore README.md  bmp280test.ino

電路原理圖如下:


Arduino源程序如下:
  1. /***************************************************************************
  2.   This is a library for the BMP280 pressure sensor

  3.   Designed specifically to work with the Adafruit BMP280 Breakout

  4.   These sensors use I2C to communicate, 2 pins are required to interface.

  5.   Adafruit invests time and resources providing this open source code,
  6.   please support Adafruit andopen-source hardware by purchasing products
  7.   from Adafruit!

  8.   Written by Kevin Townsend for Adafruit Industries.  
  9.   BSD license, all text above must be included in any redistribution
  10. ***************************************************************************/
  11. #include "Arduino.h"
  12. #include <Wire.h>
  13. #include <SPI.h>
  14. #include "Adafruit_BMP280.h"

  15. static bmp280_calib_data bmp280_calib;

  16. /***************************************************************************
  17. PRIVATE FUNCTIONS
  18. ***************************************************************************/


  19. Adafruit_BMP280::Adafruit_BMP280()
  20.   : _cs(-1), _mosi(-1), _miso(-1), _sck(-1)
  21. { }

  22. Adafruit_BMP280::Adafruit_BMP280(int8_t cspin)
  23.   : _cs(cspin), _mosi(-1), _miso(-1), _sck(-1)
  24. { }

  25. Adafruit_BMP280::Adafruit_BMP280(int8_t cspin, int8_t mosipin, int8_t misopin, int8_t sckpin)
  26.   : _cs(cspin), _mosi(mosipin), _miso(misopin), _sck(sckpin)
  27. { }


  28. bool Adafruit_BMP280::begin(uint8_t a) {
  29.   _i2caddr = a;

  30.   if (_cs == -1) {
  31.     // i2c
  32.     Wire.begin();
  33.   } else {
  34.     digitalWrite(_cs, HIGH);
  35.     pinMode(_cs, OUTPUT);

  36.     if (_sck == -1) {
  37.       // hardware SPI
  38.       SPI.begin();
  39.     } else {
  40.       // software SPI
  41.       pinMode(_sck, OUTPUT);
  42.       pinMode(_mosi, OUTPUT);
  43.       pinMode(_miso, INPUT);
  44.     }
  45.   }

  46.   if (read8(BMP280_REGISTER_CHIPID) != 0x58)
  47.     return false;

  48.   readCoefficients();
  49.   write8(BMP280_REGISTER_CONTROL, 0x3F);
  50.   return true;
  51. }

  52. uint8_t Adafruit_BMP280::spixfer(uint8_t x) {
  53.   if (_sck == -1)
  54.     return SPI.transfer(x);
  55.   
  56.   // software spi
  57.   //Serial.println("Software SPI");
  58.   uint8_t reply = 0;
  59.   for (int i=7; i>=0; i--) {
  60.     reply <<= 1;
  61.     digitalWrite(_sck, LOW);
  62.     digitalWrite(_mosi, x & (1<<i));
  63.     digitalWrite(_sck, HIGH);
  64.     if (digitalRead(_miso))
  65.       reply |= 1;
  66.   }
  67.   return reply;
  68. }

  69. /**************************************************************************/
  70. /*!
  71.     @brief  Writes an 8 bit value over I2C/SPI
  72. */
  73. /**************************************************************************/
  74. void Adafruit_BMP280::write8(byte reg, byte value)
  75. {
  76.   if (_cs == -1) {
  77.     Wire.beginTransmission((uint8_t)_i2caddr);
  78.     Wire.write((uint8_t)reg);
  79.     Wire.write((uint8_t)value);
  80.     Wire.endTransmission();
  81.   } else {
  82.     if (_sck == -1)
  83.       SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0));
  84.     digitalWrite(_cs, LOW);
  85.     spixfer(reg & ~0x80); // write, bit 7 low
  86.     spixfer(value);
  87.     digitalWrite(_cs, HIGH);
  88.     if (_sck == -1)
  89.       SPI.endTransaction();              // release the SPI bus
  90.   }
  91. }

  92. /**************************************************************************/
  93. /*!
  94.     @brief  Reads an 8 bit value over I2C
  95. */
  96. /**************************************************************************/
  97. uint8_t Adafruit_BMP280::read8(byte reg)
  98. {
  99.   uint8_t value;
  100.   
  101.   if (_cs == -1) {
  102.     Wire.beginTransmission((uint8_t)_i2caddr);
  103.     Wire.write((uint8_t)reg);
  104.     Wire.endTransmission();
  105.     Wire.requestFrom((uint8_t)_i2caddr, (byte)1);
  106.     value = Wire.read();
  107.     Wire.endTransmission();
  108.   } else {
  109.     if (_sck == -1)
  110.       SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0));
  111.     digitalWrite(_cs, LOW);
  112.     spixfer(reg | 0x80); // read, bit 7 high
  113.     value = spixfer(0);
  114.     digitalWrite(_cs, HIGH);
  115.     if (_sck == -1)
  116.       SPI.endTransaction();              // release the SPI bus
  117.   }
  118.   return value;
  119. }

  120. /**************************************************************************/
  121. /*!
  122.     @brief  Reads a 16 bit value over I2C
  123. */
  124. /**************************************************************************/
  125. uint16_t Adafruit_BMP280::read16(byte reg)
  126. {
  127.   uint16_t value;

  128.   if (_cs == -1) {
  129.     Wire.beginTransmission((uint8_t)_i2caddr);
  130.     Wire.write((uint8_t)reg);
  131.     Wire.endTransmission();
  132.     Wire.requestFrom((uint8_t)_i2caddr, (byte)2);
  133.     value = (Wire.read() << 8) | Wire.read();
  134.     Wire.endTransmission();
  135.   } else {
  136.     if (_sck == -1)
  137.       SPI.beginTransaction(SPISettings(500000, MSBFIRST, SPI_MODE0));
  138.     digitalWrite(_cs, LOW);
  139.     spixfer(reg | 0x80); // read, bit 7 high
  140.     value = (spixfer(0) << 8) | spixfer(0);
  141.     digitalWrite(_cs, HIGH);
  142.     if (_sck == -1)
  143.       SPI.endTransaction();              // release the SPI bus
  144.   }

  145.   return value;
  146. }

  147. uint16_t Adafruit_BMP280::read16_LE(byte reg) {
  148.   uint16_t temp = read16(reg);
  149.   return (temp >> 8) | (temp << 8);
  150.   
  151. }

  152. /**************************************************************************/
  153. /*!
  154.     @brief  Reads a signed 16 bit value over I2C
  155. */
  156. /**************************************************************************/
  157. int16_t Adafruit_BMP280::readS16(byte reg)
  158. {
  159.   return (int16_t)read16(reg);

  160. }

  161. int16_t Adafruit_BMP280::readS16_LE(byte reg)
  162. {
  163.   return (int16_t)read16_LE(reg);

  164. }

  165. /**************************************************************************/
  166. /*!
  167.     @brief  Reads the factory-set coefficients
  168. */
  169. /**************************************************************************/
  170. void Adafruit_BMP280::readCoefficients(void)
  171. {
  172.     bmp280_calib.dig_T1 = read16_LE(BMP280_REGISTER_DIG_T1);
  173.     bmp280_calib.dig_T2 = readS16_LE(BMP280_REGISTER_DIG_T2);
  174.     bmp280_calib.dig_T3 = readS16_LE(BMP280_REGISTER_DIG_T3);

  175.     bmp280_calib.dig_P1 = read16_LE(BMP280_REGISTER_DIG_P1);
  176.     bmp280_calib.dig_P2 = readS16_LE(BMP280_REGISTER_DIG_P2);
  177.     bmp280_calib.dig_P3 = readS16_LE(BMP280_REGISTER_DIG_P3);
  178.     bmp280_calib.dig_P4 = readS16_LE(BMP280_REGISTER_DIG_P4);
  179.     bmp280_calib.dig_P5 = readS16_LE(BMP280_REGISTER_DIG_P5);
  180.     bmp280_calib.dig_P6 = readS16_LE(BMP280_REGISTER_DIG_P6);
  181.     bmp280_calib.dig_P7 = readS16_LE(BMP280_REGISTER_DIG_P7);
  182.     bmp280_calib.dig_P8 = readS16_LE(BMP280_REGISTER_DIG_P8);
  183.     bmp280_calib.dig_P9 = readS16_LE(BMP280_REGISTER_DIG_P9);
  184. }

  185. /**************************************************************************/
  186. /*!

  187. */
  188. /**************************************************************************/
  189. float Adafruit_BMP280::readTemperature(void)
  190. {
  191.   int32_t var1, var2;
  192.   
  193.   int32_t adc_T = read16(BMP280_REGISTER_TEMPDATA);
  194.   adc_T <<= 8;
  195.   adc_T |= read8(BMP280_REGISTER_TEMPDATA+2);
  196.   adc_T >>= 4;

  197.   var1  = ((((adc_T>>3) - ((int32_t)bmp280_calib.dig_T1 <<1))) *
  198.            ((int32_t)bmp280_calib.dig_T2)) >> 11;

  199.   var2  = (((((adc_T>>4) - ((int32_t)bmp280_calib.dig_T1)) *
  200.              ((adc_T>>4) - ((int32_t)bmp280_calib.dig_T1))) >> 12) *
  201.            ((int32_t)bmp280_calib.dig_T3)) >> 14;

  202.   t_fine = var1 + var2;

  203.   float T  = (t_fine * 5 + 128) >> 8;
  204.   return T/100;
  205. }

  206. /**************************************************************************/
  207. /*!

  208. */
  209. /**************************************************************************/
  210. float Adafruit_BMP280::readPressure(void) {
  211.   int64_t var1, var2, p;
  212.   
  213.   int32_t adc_P = read16(BMP280_REGISTER_PRESSUREDATA);
  214.   adc_P <<= 8;
  215.   adc_P |= read8(BMP280_REGISTER_PRESSUREDATA+2);
  216.   adc_P >>= 4;

  217.   var1 = ((int64_t)t_fine) - 128000;
  218.   var2 = var1 * var1 * (int64_t)bmp280_calib.dig_P6;
  219.   var2 = var2 + ((var1*(int64_t)bmp280_calib.dig_P5)<<17);
  220.   var2 = var2 + (((int64_t)bmp280_calib.dig_P4)<<35);
  221.   var1 = ((var1 * var1 * (int64_t)bmp280_calib.dig_P3)>>8) +
  222.     ((var1 * (int64_t)bmp280_calib.dig_P2)<<12);
  223.   var1 = (((((int64_t)1)<<47)+var1))*((int64_t)bmp280_calib.dig_P1)>>33;
  224.   
  225.   if (var1 == 0) {
  226.     return 0;  // avoid exception caused by division by zero
  227.   }
  228.   p = 1048576 - adc_P;
  229.   p = (((p<<31) - var2)*3125) / var1;
  230.   var1 = (((int64_t)bmp280_calib.dig_P9) * (p>>13) * (p>>13)) >> 25;
  231.   var2 = (((int64_t)bmp280_calib.dig_P8) * p) >> 19;

  232.   p = ((p + var1 + var2) >> 8) + (((int64_t)bmp280_calib.dig_P7)<<4);
  233.   return (float)p/256;
  234. }
復(fù)制代碼

所有資料51hei提供下載:
GY-BMP280-3.3.zip (2.11 MB, 下載次數(shù): 52)



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91视频三区 | 激情婷婷 | 亚洲精品一区二区三区蜜桃久 | 国产日韩一区二区三区 | 日韩一区二区三区精品 | www.av7788.com| 久草资源| 国产重口老太伦 | 一级黄a视频 | 亚洲国产一区在线 | 亚洲精品在线视频 | 日韩免费视频一区二区 | 亚洲一区 | 久久精品视频9 | 天天综合天天 | 精品一区二区在线观看 | 日韩中文字幕在线观看 | 91精品国产91久久综合桃花 | 韩日一区二区 | 欧美亚洲另类丝袜综合网动图 | 国产三区精品 | 免费毛片网站在线观看 | 亚洲永久 | 9久9久9久女女女九九九一九 | 91最新视频 | 国产美女精品视频免费观看 | 午夜影院普通用户体验区 | 中文字幕一区二区三区在线乱码 | 成人精品视频在线 | 久久久国产精品一区 | 久婷婷| 91高清在线观看 | 亚洲色在线视频 | 中文字幕二区 | 欧美另类视频 | 久热精品在线播放 | 911影院| 在线一区 | 青娱乐一区二区 | 欧美a在线观看 | 伊人久久大香线 |