欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
Arduino bmp280溫度濕度傳感器,串口發送
[打印本頁]
作者:
baokai
時間:
2019-11-25 10:25
標題:
Arduino bmp280溫度濕度傳感器,串口發送
#include "mbed.h"
Serial pc(PA_9, PA_10);//定義串口
I2C i2c(PB_7, PB_6);//定義i2c通信
unsigned short int dig_P1, dig_T1;//定義引腳,變量
short int dig_P2, dig_P3, dig_P4, dig_P5, dig_P6, dig_P7, dig_P8, dig_P9, dig_T2, dig_T3;
double wendu, qiya, t_fine;//溫度,氣壓,補償
const int addw = 0xEC;//寫入地址 Pin6:SDO(傳感器地址控制位,接GND的時候I2C中器件地址為0xEC,接高電平為0xEc+1
const int addr = 0xED;//讀取地址
//測量控制寄存器(ctrl_meas)(0xF4):
//Bit7~Bit5:osrs_t[2:0] 控制溫度采樣模式,主要是采樣數據的位數(位數越大,精度越高),具體配置如下(本次三位都配置為1,最大采樣位數20Bit):
//Bit4~Bit2:osrs_p[2:0] 控制大氣壓強采樣模式,主要是采樣數據的位數(位數越大,精度越高),具體配置如下(本次三位都配置為1,最大采樣位數20Bit):
//Bit1~Bit0:mode[1:0] 傳感器工作模式控制,00為Sleep Mode,01/10為Forced Mode,11為 Normal Mode(本次配置為11)。
//配置寄存器(config)(0xF5):
//Bit7~Bit5:t_sb[2:0] 設置Normal Mode下的轉換間隔時間,具體配置如下(本次配置為000,0.5ms轉換一次)
//Bit4~Bit2:filter[2:0] 設置傳感器接收外界信號時的,前端濾波電路的濾波系數的,可以有效減少外界環境的干擾: 本次000,不使用
//Bit0:spi3w_en 與SPI模式有關,本次沒用到,沒設置。
//身份編號寄存器(id)(0xD0):
//寄存器內固定值為0x58,讀取0xD0數據的時候,傳感器返回0x58,代表身份辨認完畢。
//復位寄存器(reset)(0xE0):
//寫入0xB6時,所有寄存器(除身份編號寄存器)數據全部清零。
/*
函數功能:讀取制定地址的數據
參數:寄存器地址
返回值:讀出的數據
*/
uint8_t i2cread(char shuju)
{
char cmd[2];
cmd[0] = shuju;
i2c.write(addw, cmd, 1);
i2c.read(addr, cmd, 1);
return cmd[0];
}
/*
函數功能:計算溫度
參數:無
返回值:溫度
*/
float bmp280_wendu()
{
long adc_P;
uint32_t var1, var2;
float T, p;
var1 = (((double)wendu) / 16384.0 - ((double)dig_T1) / 1024.0) * ((double)dig_T2);
var2 = ((((double)wendu) / 131072.0 - ((double)dig_T1) / 8192.0) * (((double)wendu) / 131072.0 - ((double)dig_T1) / 8192.0)) * ((double)dig_T2);
t_fine = (uint32_t)(var1 + var2);
T = (var1 + var2) / 5120.0;
//bmp280自帶的補償算法
return T;
}
/*
函數功能:計算氣壓
參數:無
返回值:無
*/
float bmp280_qiya()
{
uint32_t var1, var2;
float T, p;
var1 = ((double)t_fine / 2.0) - 64000.0;
var2 = var1 * var1 * ((double)dig_P6) / 32768.0;
var2 = var2 + var1 * ((double)dig_P5) * 2.0;
var2 = (var2 / 4.0) + (((double)dig_P4) * 65536.0);
var1 = (((double)dig_P3) * var1 * var1 / 524288.0 + ((double)dig_P2) * var1) / 524288.0;
var1 = (1.0 + var1 / 32768.0) * ((double)dig_P1);
p = 1048576.0 - (double)qiya;
p = (p - (var2 / 4096.0)) * 6250.0 / var1;
var1 = ((double)dig_P9) * p * p / 2147483648.0;
var2 = p * ((double)dig_P8) / 32768.0;
p = p + (var1 + var2 + ((double)dig_P7)) / 16.0;
return p;//bmp280自帶補償算法
}
/*
函數功能:讀取溫度,氣壓數據,存入定義的變量中
參數:無
返回值:無
*/
void bmp280_shujucaiji(void)
{
uint8_t lsb, msb, xlsb;
msb = i2cread(0xfa);//高8位
lsb = i2cread(0xfb);//低8位
xlsb = i2cread(0xfc);
wendu = (msb << 12) | (lsb << 4) | (xlsb >> 4);//高位放最左邊,低位中間,xlsb后四位不要,注意datesheet中給的低位高位地址,是反的
msb = i2cread(0xf7);
lsb = i2cread(0xf8);
xlsb = i2cread(0xf9);
qiya = (msb << 12) | (lsb << 4) | (xlsb >> 4);
}
/*
函數功能:讀取實時補償
參數:無
返回值:無
*/
void bmp280_buchang(void)
{
uint8_t lsb, msb;
lsb = i2cread(0x88);
msb = i2cread(0x89);
dig_T1 = (msb << 8) | lsb;
lsb = i2cread(0x8A);
msb = i2cread(0x8B);
dig_T2 = (msb << 8) | lsb;
lsb = i2cread(0x8c);
msb = i2cread(0x8d);
dig_T3 = (msb << 8) | lsb;
lsb = i2cread(0x8e);
msb = i2cread(0x8f);
dig_P1 = msb << 8 | lsb;
lsb = i2cread(0x90);
msb = i2cread(0x91);
dig_P2 = msb << 8 | lsb;
lsb = i2cread(0x92);
msb = i2cread(0x93);
dig_P3 = msb << 8 | lsb;
lsb = i2cread(0x94);
msb = i2cread(0x95);
dig_P4 = msb << 8 | lsb;
lsb = i2cread(0x96);
msb = i2cread(0x97);
dig_P5 = msb << 8 | lsb;
lsb = i2cread(0x98);
msb = i2cread(0x99);
dig_P6 = msb << 8 | lsb;
lsb = i2cread(0x9a);
msb = i2cread(0x9b);
dig_P7 = msb << 8 | lsb;
lsb = i2cread(0x9c);
msb = i2cread(0x9d);
dig_P8 = msb << 8 | lsb;
lsb = i2cread(0x9e);
msb = i2cread(0x9f);
dig_P9 = msb << 8 | lsb;
}
/*
函數功能:配置bmp280寄存器參數
參數:無
返回值:無
*/
void bmp280_init(void)
{
char cmd[2], str[2];
cmd[0] = 0xf4;
cmd[1] = 0xff;
str[0] = 0xf5;
str[1] = 0x00;
i2c.write(addw, cmd, 2);
i2c.write(addw, str, 2);
}
int main()
{
bmp280_init();
pc.baud(9600);//波特率配置
wait(1);
pc.printf("%d\n", i2cread(0xD0));
while (1)
{
bmp280_buchang();
bmp280_shujucaiji();
pc.printf("%.6f\n", bmp280_wendu());
pc.printf("%.6f\n", bmp280_qiya());
wait(1);
}
}
復制代碼
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1