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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2147|回復: 0
打印 上一主題 下一主題
收起左側

Arduino bmp280溫度濕度傳感器,串口發送

[復制鏈接]
跳轉到指定樓層
樓主
ID:443546 發表于 2019-11-25 10:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include "mbed.h"
  2. Serial pc(PA_9, PA_10);//定義串口
  3. I2C i2c(PB_7, PB_6);//定義i2c通信
  4. unsigned short int dig_P1, dig_T1;//定義引腳,變量
  5. short int dig_P2, dig_P3, dig_P4, dig_P5, dig_P6, dig_P7, dig_P8, dig_P9, dig_T2, dig_T3;
  6. double wendu, qiya, t_fine;//溫度,氣壓,補償
  7. const int addw = 0xEC;//寫入地址  Pin6:SDO(傳感器地址控制位,接GND的時候I2C中器件地址為0xEC,接高電平為0xEc+1
  8. const int addr = 0xED;//讀取地址
  9. //測量控制寄存器(ctrl_meas)(0xF4):
  10. //Bit7~Bit5:osrs_t[2:0] 控制溫度采樣模式,主要是采樣數據的位數(位數越大,精度越高),具體配置如下(本次三位都配置為1,最大采樣位數20Bit):
  11. //Bit4~Bit2:osrs_p[2:0] 控制大氣壓強采樣模式,主要是采樣數據的位數(位數越大,精度越高),具體配置如下(本次三位都配置為1,最大采樣位數20Bit):
  12. //Bit1~Bit0:mode[1:0] 傳感器工作模式控制,00為Sleep Mode,01/10為Forced Mode,11為 Normal Mode(本次配置為11)。
  13. //配置寄存器(config)(0xF5):
  14. //Bit7~Bit5:t_sb[2:0] 設置Normal Mode下的轉換間隔時間,具體配置如下(本次配置為000,0.5ms轉換一次)
  15. //Bit4~Bit2:filter[2:0] 設置傳感器接收外界信號時的,前端濾波電路的濾波系數的,可以有效減少外界環境的干擾: 本次000,不使用
  16. //Bit0:spi3w_en 與SPI模式有關,本次沒用到,沒設置。

  17. //身份編號寄存器(id)(0xD0):
  18. //寄存器內固定值為0x58,讀取0xD0數據的時候,傳感器返回0x58,代表身份辨認完畢。
  19. //復位寄存器(reset)(0xE0):
  20. //寫入0xB6時,所有寄存器(除身份編號寄存器)數據全部清零。



  21. /*
  22. 函數功能:讀取制定地址的數據
  23. 參數:寄存器地址
  24. 返回值:讀出的數據
  25. */
  26. uint8_t i2cread(char shuju)
  27. {
  28.     char cmd[2];
  29.     cmd[0] = shuju;
  30.     i2c.write(addw, cmd, 1);
  31.     i2c.read(addr, cmd, 1);
  32.     return cmd[0];
  33. }

  34. /*
  35. 函數功能:計算溫度
  36. 參數:無
  37. 返回值:溫度
  38. */

  39. float bmp280_wendu()
  40. {
  41.     long adc_P;
  42.     uint32_t var1, var2;
  43.     float T, p;
  44.     var1 = (((double)wendu) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2);
  45.     var2 = ((((double)wendu) / 131072.0 - ((double)dig_T1) / 8192.0) * (((double)wendu) / 131072.0 - ((double)dig_T1) / 8192.0)) * ((double)dig_T2);
  46.     t_fine = (uint32_t)(var1 + var2);
  47.     T = (var1 + var2) / 5120.0;
  48.    //bmp280自帶的補償算法
  49.     return T;
  50. }

  51. /*
  52. 函數功能:計算氣壓
  53. 參數:無
  54. 返回值:無
  55. */
  56. float bmp280_qiya()
  57. {
  58.     uint32_t var1, var2;
  59.     float T, p;
  60.     var1 = ((double)t_fine / 2.0) - 64000.0;
  61.     var2 = var1 * var1 * ((double)dig_P6) / 32768.0;
  62.     var2 = var2 + var1 * ((double)dig_P5) * 2.0;
  63.     var2 = (var2 / 4.0) + (((double)dig_P4) * 65536.0);
  64.     var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;
  65.     var1 = (1.0 + var1 / 32768.0) * ((double)dig_P1);
  66.     p = 1048576.0 - (double)qiya;
  67.     p = (p - (var2 / 4096.0)) * 6250.0 / var1;
  68.     var1 = ((double)dig_P9) * p * p / 2147483648.0;
  69.     var2 = p * ((double)dig_P8) / 32768.0;
  70.     p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;
  71.     return p;//bmp280自帶補償算法
  72. }

  73. /*
  74. 函數功能:讀取溫度,氣壓數據,存入定義的變量中
  75. 參數:無
  76. 返回值:無
  77. */
  78. void bmp280_shujucaiji(void)
  79. {
  80.     uint8_t lsb, msb, xlsb;
  81.     msb = i2cread(0xfa);//高8位
  82.     lsb = i2cread(0xfb);//低8位
  83.     xlsb = i2cread(0xfc);
  84.     wendu = (msb << 12) | (lsb << 4) | (xlsb >> 4);//高位放最左邊,低位中間,xlsb后四位不要,注意datesheet中給的低位高位地址,是反的

  85.     msb = i2cread(0xf7);
  86.     lsb = i2cread(0xf8);
  87.     xlsb = i2cread(0xf9);
  88.     qiya = (msb << 12) | (lsb << 4) | (xlsb >> 4);
  89. }

  90. /*
  91. 函數功能:讀取實時補償
  92. 參數:無
  93. 返回值:無
  94. */
  95. void bmp280_buchang(void)
  96. {
  97.     uint8_t lsb, msb;
  98.     lsb = i2cread(0x88);
  99.     msb = i2cread(0x89);
  100.     dig_T1 = (msb << 8) | lsb;
  101.     lsb = i2cread(0x8A);
  102.     msb = i2cread(0x8B);
  103.     dig_T2 = (msb << 8) | lsb;
  104.     lsb = i2cread(0x8c);
  105.     msb = i2cread(0x8d);
  106.     dig_T3 = (msb << 8) | lsb;

  107.     lsb = i2cread(0x8e);
  108.     msb = i2cread(0x8f);
  109.     dig_P1 = msb << 8 | lsb;
  110.     lsb = i2cread(0x90);
  111.     msb = i2cread(0x91);
  112.     dig_P2 = msb << 8 | lsb;
  113.     lsb = i2cread(0x92);
  114.     msb = i2cread(0x93);
  115.     dig_P3 = msb << 8 | lsb;
  116.     lsb = i2cread(0x94);
  117.     msb = i2cread(0x95);
  118.     dig_P4 = msb << 8 | lsb;
  119.     lsb = i2cread(0x96);
  120.     msb = i2cread(0x97);
  121.     dig_P5 = msb << 8 | lsb;
  122.     lsb = i2cread(0x98);
  123.     msb = i2cread(0x99);
  124.     dig_P6 = msb << 8 | lsb;
  125.     lsb = i2cread(0x9a);
  126.     msb = i2cread(0x9b);
  127.     dig_P7 = msb << 8 | lsb;
  128.     lsb = i2cread(0x9c);
  129.     msb = i2cread(0x9d);
  130.     dig_P8 = msb << 8 | lsb;
  131.     lsb = i2cread(0x9e);
  132.     msb = i2cread(0x9f);
  133.     dig_P9 = msb << 8 | lsb;
  134. }

  135. /*
  136. 函數功能:配置bmp280寄存器參數
  137. 參數:無
  138. 返回值:無
  139. */
  140. void bmp280_init(void)
  141. {
  142.     char cmd[2], str[2];
  143.     cmd[0] = 0xf4;
  144.     cmd[1] = 0xff;
  145.     str[0] = 0xf5;
  146.     str[1] = 0x00;
  147.     i2c.write(addw, cmd, 2);
  148.     i2c.write(addw, str, 2);
  149. }
  150. int main()
  151. {
  152.     bmp280_init();
  153.     pc.baud(9600);//波特率配置
  154.     wait(1);
  155.     pc.printf("%d\n", i2cread(0xD0));

  156.     while (1)
  157.     {
  158.         bmp280_buchang();
  159.         bmp280_shujucaiji();
  160.         pc.printf("%.6f\n", bmp280_wendu());
  161.         pc.printf("%.6f\n", bmp280_qiya());
  162.         wait(1);
  163.     }
  164. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲a级| 四虎影视免费在线 | 在线观看中文字幕 | 久久久久久亚洲精品不卡 | 日本三级电影免费 | 成人免费在线观看视频 | 永久av| 久久小视频 | 成人福利视频网站 | 国产精品一区久久久久 | 久在线精品视频 | 在线一区二区三区 | 国产成人叼嘿视频在线观看 | 色男人的天堂 | 久久久99精品免费观看 | 免费1区2区3区| 国产一区二区久久久 | 国产精品免费一区二区三区四区 | 免费精品视频在线观看 | 国产精品免费看 | 久久99这里只有精品 | 欧美日韩一区在线观看 | 欧美五月婷婷 | 久久精品毛片 | 欧美日韩国产在线观看 | 欧美精品在线一区二区三区 | 免费一级黄色电影 | 亚洲午夜视频 | 美女黄色在线观看 | 国产精品亚洲一区二区三区在线观看 | 国产偷录叫床高潮录音 | 黄a免费看 | 特黄小视频 | 亚洲性视频网站 | 久久久久国产精品午夜一区 | 日本激情一区二区 | 国产夜恋视频在线观看 | 国产成人99久久亚洲综合精品 | 久久国产精品网 | 国产精品久久久久一区二区三区 | 97精品一区二区 |