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

Committer:
j_rocket_boy
Date:
Tue Jul 10 09:04:33 2018 +0000
Revision:
5:a404e011841b
Parent:
4:4c4e3ec9a2c4
Child:
6:bce432de0652
???????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j_rocket_boy 4:4c4e3ec9a2c4 1 // -*- coding: utf-8 -*-
j_rocket_boy 4:4c4e3ec9a2c4 2 /**
j_rocket_boy 4:4c4e3ec9a2c4 3 @file BME280.h
j_rocket_boy 4:4c4e3ec9a2c4 4 @brief MBE280のライブラリ
j_rocket_boy 4:4c4e3ec9a2c4 5
j_rocket_boy 4:4c4e3ec9a2c4 6 @author D.Nakayama
j_rocket_boy 4:4c4e3ec9a2c4 7 @version 1.0
j_rocket_boy 4:4c4e3ec9a2c4 8 @date 2018-07-10 D.Nakayama Written for C++/mbed.
j_rocket_boy 4:4c4e3ec9a2c4 9
j_rocket_boy 4:4c4e3ec9a2c4 10
j_rocket_boy 4:4c4e3ec9a2c4 11 @see
j_rocket_boy 4:4c4e3ec9a2c4 12 Copyright (C) 2017 D.Nakayama.
j_rocket_boy 4:4c4e3ec9a2c4 13 Released under the MIT license.
j_rocket_boy 4:4c4e3ec9a2c4 14 http://opensource.org/licenses/mit-license.php
j_rocket_boy 4:4c4e3ec9a2c4 15
j_rocket_boy 4:4c4e3ec9a2c4 16 */
j_rocket_boy 4:4c4e3ec9a2c4 17
j_rocket_boy 0:95f2b96cdc7f 18 #ifndef BME280_LIB_H
j_rocket_boy 0:95f2b96cdc7f 19 #define BME280_LIB
j_rocket_boy 0:95f2b96cdc7f 20
j_rocket_boy 0:95f2b96cdc7f 21 #include "mbed.h"
j_rocket_boy 0:95f2b96cdc7f 22 #include "i2c_general_io.h"
j_rocket_boy 0:95f2b96cdc7f 23
j_rocket_boy 2:42725d11023b 24 #include "BME280_reg.h" //レジスタ関連の定義
j_rocket_boy 2:42725d11023b 25
j_rocket_boy 5:a404e011841b 26 /**
j_rocket_boy 5:a404e011841b 27 @class BME280クラス
j_rocket_boy 5:a404e011841b 28 @brief i2cでBME280にアクセスするためのクラス
j_rocket_boy 5:a404e011841b 29 */
j_rocket_boy 0:95f2b96cdc7f 30 class BME280{
j_rocket_boy 0:95f2b96cdc7f 31
j_rocket_boy 0:95f2b96cdc7f 32 public:
j_rocket_boy 0:95f2b96cdc7f 33 /**
j_rocket_boy 3:df1107ddf502 34 @brief BME280クラスの作成
j_rocket_boy 3:df1107ddf502 35 @param[in] sda SDAピン名 (PinName.hに定義)
j_rocket_boy 3:df1107ddf502 36 @param[in] sck SCKピン名 (PinName.hに定義)
j_rocket_boy 3:df1107ddf502 37 @param[in] mode 測定動作モード(BME_reg.hに定義)
j_rocket_boy 3:df1107ddf502 38 @param[in] press_sample 気圧のオーバーサンプリング(BME_reg.hに定義)
j_rocket_boy 3:df1107ddf502 39 @param[in] temp_sample 温度のオーバーサンプリング(BME_reg.hに定義)
j_rocket_boy 3:df1107ddf502 40 @param[in] hum_sample 湿度のオーバーサンプリング(BME_reg.hに定義)
j_rocket_boy 3:df1107ddf502 41 @param[in] filter IIRフィルタの時定数設定(BME_reg.hに定義)
j_rocket_boy 3:df1107ddf502 42 @param[in] stanby 測定後休止時間の設定(ノーマルモードのみ有効,BME_reg.hに定義)
j_rocket_boy 0:95f2b96cdc7f 43 */
j_rocket_boy 3:df1107ddf502 44 BME280(PinName sda, PinName scl,
j_rocket_boy 3:df1107ddf502 45 char mode = BME280_FORCE_MODE,
j_rocket_boy 3:df1107ddf502 46 char press_sample = BME280_PRESS_OVER_SAMPL1,
j_rocket_boy 3:df1107ddf502 47 char temp_sample = BME280_TEMP_OVER_SAMPL1,
j_rocket_boy 3:df1107ddf502 48 char hum_sample = BME280_HUM_OVER_SAMPL1,
j_rocket_boy 3:df1107ddf502 49 char filter = BME280_IIR_OFF,
j_rocket_boy 3:df1107ddf502 50 char stanby = 0);
j_rocket_boy 3:df1107ddf502 51
j_rocket_boy 0:95f2b96cdc7f 52 /**
j_rocket_boy 3:df1107ddf502 53 @brief BME280クラスの作成.
j_rocket_boy 3:df1107ddf502 54 @param &i2c_obj i2c名
j_rocket_boy 3:df1107ddf502 55 @param[in] mode 測定動作モード(BME_reg.hに定義)
j_rocket_boy 3:df1107ddf502 56 @param[in] press_sample 気圧のオーバーサンプリング(BME_reg.hに定義)
j_rocket_boy 3:df1107ddf502 57 @param[in] temp_sample 温度のオーバーサンプリング(BME_reg.hに定義)
j_rocket_boy 3:df1107ddf502 58 @param[in] hum_sample 湿度のオーバーサンプリング(BME_reg.hに定義)
j_rocket_boy 3:df1107ddf502 59 @param[in] filter IIRフィルタの時定数設定(BME_reg.hに定義)
j_rocket_boy 3:df1107ddf502 60 @param[in] stanby 測定後休止間の設定(ノーマルモードのみ有効,BME_reg.hに定義)
j_rocket_boy 0:95f2b96cdc7f 61 */
j_rocket_boy 3:df1107ddf502 62 BME280(GEN_I2C &i2c_obj,
j_rocket_boy 3:df1107ddf502 63 char mode = BME280_FORCE_MODE,
j_rocket_boy 3:df1107ddf502 64 char press_sample = BME280_PRESS_OVER_SAMPL1,
j_rocket_boy 3:df1107ddf502 65 char temp_sample = BME280_TEMP_OVER_SAMPL1,
j_rocket_boy 3:df1107ddf502 66 char hum_sample = BME280_HUM_OVER_SAMPL1,
j_rocket_boy 3:df1107ddf502 67 char filter = BME280_IIR_OFF,
j_rocket_boy 3:df1107ddf502 68 char stanby = 0);
j_rocket_boy 0:95f2b96cdc7f 69
j_rocket_boy 0:95f2b96cdc7f 70 /**
j_rocket_boy 3:df1107ddf502 71 @brief BME280クラスのデストラクタ
j_rocket_boy 3:df1107ddf502 72 @param パラメータなし.
j_rocket_boy 0:95f2b96cdc7f 73 */
j_rocket_boy 0:95f2b96cdc7f 74 virtual ~BME280();
j_rocket_boy 0:95f2b96cdc7f 75
j_rocket_boy 0:95f2b96cdc7f 76
j_rocket_boy 3:df1107ddf502 77 /**
j_rocket_boy 3:df1107ddf502 78 @brief 気圧(単位:Pa)
j_rocket_boy 3:df1107ddf502 79 */
j_rocket_boy 3:df1107ddf502 80 double press;
j_rocket_boy 3:df1107ddf502 81 /**
j_rocket_boy 3:df1107ddf502 82 @brief 温度(単位:℃)
j_rocket_boy 3:df1107ddf502 83 */
j_rocket_boy 0:95f2b96cdc7f 84 float temp;
j_rocket_boy 3:df1107ddf502 85 /**
j_rocket_boy 3:df1107ddf502 86 @brief 湿度(単位:%)
j_rocket_boy 3:df1107ddf502 87 */
j_rocket_boy 0:95f2b96cdc7f 88 float hum;
j_rocket_boy 3:df1107ddf502 89
j_rocket_boy 0:95f2b96cdc7f 90
j_rocket_boy 3:df1107ddf502 91 /**
j_rocket_boy 3:df1107ddf502 92 @brief センサからデータを読み取って気圧、温度、湿度データ更新
j_rocket_boy 3:df1107ddf502 93 @param パラメータなし.
j_rocket_boy 3:df1107ddf502 94 */
j_rocket_boy 0:95f2b96cdc7f 95 void read_sensor(void);
j_rocket_boy 0:95f2b96cdc7f 96
j_rocket_boy 0:95f2b96cdc7f 97 private:
j_rocket_boy 0:95f2b96cdc7f 98
j_rocket_boy 3:df1107ddf502 99 //i2c用
j_rocket_boy 0:95f2b96cdc7f 100 GEN_I2C *i2c_p;
j_rocket_boy 0:95f2b96cdc7f 101 GEN_I2C &sensor;
j_rocket_boy 0:95f2b96cdc7f 102
j_rocket_boy 3:df1107ddf502 103 //初期化関数
j_rocket_boy 3:df1107ddf502 104 void init(void);
j_rocket_boy 3:df1107ddf502 105
j_rocket_boy 3:df1107ddf502 106 //設定保持用
j_rocket_boy 3:df1107ddf502 107 char _mode;
j_rocket_boy 3:df1107ddf502 108 char _press_sample;
j_rocket_boy 3:df1107ddf502 109 char _temp_sample;
j_rocket_boy 3:df1107ddf502 110 char _hum_sample;
j_rocket_boy 3:df1107ddf502 111 char _filter;
j_rocket_boy 3:df1107ddf502 112 char _stanby;
j_rocket_boy 3:df1107ddf502 113
j_rocket_boy 3:df1107ddf502 114 //強制測定モードをセットする関数。
j_rocket_boy 3:df1107ddf502 115 inline void set_force_mode(void);
j_rocket_boy 3:df1107ddf502 116
j_rocket_boy 3:df1107ddf502 117 //データ補正用関数とそこで使う変数(データシートより)
j_rocket_boy 1:0dbf59c6e564 118 long signed int t_fine;
j_rocket_boy 1:0dbf59c6e564 119 long signed int BME280_compensate_T_int32(long signed int adc_T);
j_rocket_boy 1:0dbf59c6e564 120 long unsigned int BME280_compensate_P_int64(long signed int adc_P);
j_rocket_boy 1:0dbf59c6e564 121 long unsigned int BME280_compensate_H_int32(long signed int adc_H);
j_rocket_boy 3:df1107ddf502 122
j_rocket_boy 3:df1107ddf502 123 //温度補正係数
j_rocket_boy 0:95f2b96cdc7f 124 unsigned short dig_T1;
j_rocket_boy 3:df1107ddf502 125 signed short dig_T2;
j_rocket_boy 3:df1107ddf502 126 signed short dig_T3;
j_rocket_boy 0:95f2b96cdc7f 127
j_rocket_boy 3:df1107ddf502 128 //気圧補正係数
j_rocket_boy 0:95f2b96cdc7f 129 unsigned short dig_P1;
j_rocket_boy 3:df1107ddf502 130 signed short dig_P2;
j_rocket_boy 3:df1107ddf502 131 signed short dig_P3;
j_rocket_boy 3:df1107ddf502 132 signed short dig_P4;
j_rocket_boy 3:df1107ddf502 133 signed short dig_P5;
j_rocket_boy 3:df1107ddf502 134 signed short dig_P6;
j_rocket_boy 3:df1107ddf502 135 signed short dig_P7;
j_rocket_boy 3:df1107ddf502 136 signed short dig_P8;
j_rocket_boy 3:df1107ddf502 137 signed short dig_P9;
j_rocket_boy 0:95f2b96cdc7f 138
j_rocket_boy 3:df1107ddf502 139 //湿度補正係数
j_rocket_boy 0:95f2b96cdc7f 140 unsigned char dig_H1;
j_rocket_boy 3:df1107ddf502 141 signed short dig_H2;
j_rocket_boy 0:95f2b96cdc7f 142 unsigned char dig_H3;
j_rocket_boy 3:df1107ddf502 143 signed short dig_H4;
j_rocket_boy 3:df1107ddf502 144 signed short dig_H5;
j_rocket_boy 3:df1107ddf502 145 signed char dig_H6;
j_rocket_boy 0:95f2b96cdc7f 146
j_rocket_boy 0:95f2b96cdc7f 147 };
j_rocket_boy 0:95f2b96cdc7f 148
j_rocket_boy 0:95f2b96cdc7f 149 #endif