BME280にアクセスするためのライブラリ

Revision:
1:0dbf59c6e564
Parent:
0:95f2b96cdc7f
Child:
2:42725d11023b
--- a/BME280.cpp	Tue Jul 10 07:38:08 2018 +0000
+++ b/BME280.cpp	Tue Jul 10 07:53:16 2018 +0000
@@ -27,9 +27,9 @@
 
 void BME280::read_sensor(void){
         char sensor_raw_data[8];
-        BME280_S32_t T,P,H;         //ADC読み込み後温度,気圧,湿度の生データ
-        BME280_S32_t T_cor;         //温度の補正データ
-        BME280_U32_t P_cor,H_cor;   //気圧,湿度の補正データ
+        long signed int T,P,H;         //ADC読み込み後温度,気圧,湿度の生データ
+        long signed int T_cor;         //温度の補正データ
+        long unsigned int P_cor,H_cor;   //気圧,湿度の補正データ
 
         //読み込み
         set_force_mode();                   //測定開始
@@ -69,11 +69,11 @@
 //データシートより,補正関数
 // 温度を℃で返します。分解能は0.01℃です。「5123」の出力値は、51.23℃に相当します。
 // t_fineは、グローバル値として細かい温度値を持ちます。
-BME280_S32_t BME280::BME280_compensate_T_int32(BME280_S32_t adc_T){
-    BME280_S32_t var1, var2, T;
-    var1 = ((((adc_T>>3) - ((BME280_S32_t)dig_T1<<1))) * ((BME280_S32_t)dig_T2)) >> 11;
-    var2 = (((((adc_T>>4) - ((BME280_S32_t)dig_T1)) * ((adc_T>>4) - ((BME280_S32_t)dig_T1))) >> 12) *
-    ((BME280_S32_t)dig_T3)) >> 14;
+long signed int BME280::BME280_compensate_T_int32(long signed int adc_T){
+    long signed int var1, var2, T;
+    var1 = ((((adc_T>>3) - ((long signed int)dig_T1<<1))) * ((long signed int)dig_T2)) >> 11;
+    var2 = (((((adc_T>>4) - ((long signed int)dig_T1)) * ((adc_T>>4) - ((long signed int)dig_T1))) >> 12) *
+    ((long signed int)dig_T3)) >> 14;
     t_fine = var1 + var2;
     T = (t_fine * 5 + 128) >> 8;
     return T;
@@ -81,38 +81,38 @@
 
 // 圧力(Pa)を、Q24.8形式の符号なし32ビット整数として返します。(24個の整数ビットと8個の小数ビット)
 // 「24674867」の出力値は、24674867/256 = 96386.2Pa = 963.862hPaに相当します。
-BME280_U32_t BME280::BME280_compensate_P_int64(BME280_S32_t adc_P){
-    BME280_S64_t var1, var2, p;
-    var1 = ((BME280_S64_t)t_fine) - 128000;
-    var2 = var1 * var1 * (BME280_S64_t)dig_P6;
-    var2 = var2 + ((var1*(BME280_S64_t)dig_P5)<<17);
-    var2 = var2 + (((BME280_S64_t)dig_P4)<<35);
-    var1 = ((var1 * var1 * (BME280_S64_t)dig_P3)>>8) + ((var1 * (BME280_S64_t)dig_P2)<<12);
-    var1 = (((((BME280_S64_t)1)<<47)+var1))*((BME280_S64_t)dig_P1)>>33;
+long unsigned int BME280::BME280_compensate_P_int64(long signed int adc_P){
+    long long signed int var1, var2, p;
+    var1 = ((long long signed int)t_fine) - 128000;
+    var2 = var1 * var1 * (long long signed int)dig_P6;
+    var2 = var2 + ((var1*(long long signed int)dig_P5)<<17);
+    var2 = var2 + (((long long signed int)dig_P4)<<35);
+    var1 = ((var1 * var1 * (long long signed int)dig_P3)>>8) + ((var1 * (long long signed int)dig_P2)<<12);
+    var1 = (((((long long signed int)1)<<47)+var1))*((long long signed int)dig_P1)>>33;
     if (var1 == 0){
         return 0; // ゼロ除算による例外を避ける。
     }
     p = 1048576-adc_P;
     p = (((p<<31)-var2)*3125)/var1;
-    var1 = (((BME280_S64_t)dig_P9) * (p>>13) * (p>>13)) >> 25;
-    var2 = (((BME280_S64_t)dig_P8) * p) >> 19;
-    p = ((p + var1 + var2) >> 8) + (((BME280_S64_t)dig_P7)<<4);
-    return (BME280_U32_t)p;
+    var1 = (((long long signed int)dig_P9) * (p>>13) * (p>>13)) >> 25;
+    var2 = (((long long signed int)dig_P8) * p) >> 19;
+    p = ((p + var1 + var2) >> 8) + (((long long signed int)dig_P7)<<4);
+    return (long unsigned int)p;
 }
 
 // 湿度(%RH)を、Q22.10形式の符号なし32ビット整数として返します。(22個の整数と10個の小数ビット)
 // 「47445」の出力値は、47445/1024 = 46.333%RHに相当します。
-BME280_U32_t BME280::BME280_compensate_H_int32(BME280_S32_t adc_H){
-    BME280_S32_t v_x1_u32r;
-    v_x1_u32r = (t_fine - ((BME280_S32_t)76800));
-    v_x1_u32r = (((((adc_H << 14) - (((BME280_S32_t)dig_H4) << 20) - (((BME280_S32_t)dig_H5) * v_x1_u32r)) +
-    ((BME280_S32_t)16384)) >> 15) * (((((((v_x1_u32r * ((BME280_S32_t)dig_H6)) >> 10) * (((v_x1_u32r *
-    ((BME280_S32_t)dig_H3)) >> 11) + ((BME280_S32_t)32768))) >> 10) + ((BME280_S32_t)2097152)) *
-    ((BME280_S32_t)dig_H2) + 8192) >> 14));
-    v_x1_u32r = (v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * ((BME280_S32_t)dig_H1)) >> 4));
+long unsigned int BME280::BME280_compensate_H_int32(long signed int adc_H){
+    long signed int v_x1_u32r;
+    v_x1_u32r = (t_fine - ((long signed int)76800));
+    v_x1_u32r = (((((adc_H << 14) - (((long signed int)dig_H4) << 20) - (((long signed int)dig_H5) * v_x1_u32r)) +
+    ((long signed int)16384)) >> 15) * (((((((v_x1_u32r * ((long signed int)dig_H6)) >> 10) * (((v_x1_u32r *
+    ((long signed int)dig_H3)) >> 11) + ((long signed int)32768))) >> 10) + ((long signed int)2097152)) *
+    ((long signed int)dig_H2) + 8192) >> 14));
+    v_x1_u32r = (v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * ((long signed int)dig_H1)) >> 4));
     v_x1_u32r = (v_x1_u32r < 0 ? 0 : v_x1_u32r);
     v_x1_u32r = (v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r);
-    return (BME280_U32_t)(v_x1_u32r>>12);
+    return (long unsigned int)(v_x1_u32r>>12);
 }
 //補正関数終わり