BME280をI2CとSPIで使用するためのライブラリ。
Dependents: BNO055_BME280_ Yabusame2_gyro GRhanawaizman
BME280.h
- Committer:
- Yajirushi
- Date:
- 2016-11-29
- Revision:
- 0:2baa0f77d4d2
File content as of revision 0:2baa0f77d4d2:
#ifndef BME280_H #define BME280_H #include "mbed.h" //I2Cデフォルトスレーブアドレス #define BME280_I2C_DEFADDR 0x76 //SPIデフォルト通信スピード[Hz] #define BME280_SPI_DEFSPD 3000000 #define BME280R_ID 0xD0 #define BME280R_RESET 0xE0 #define BME280R_CTRL_HUM 0xF2 #define BME280R_STATUS 0xF3 #define BME280R_CTRL_MEAS 0xF4 #define BME280R_CONFIG 0xF5 #define BME280R_PRESS_MSB 0xF7 #define BME280R_PRESS_LSB 0xF8 #define BME280R_PRESS_XLSB 0xF9 #define BME280R_TEMP_MSB 0xFA #define BME280R_TEMP_LSB 0xFB #define BME280R_TEMP_XLSB 0xFC #define BME280R_HUM_MSB 0xFD #define BME280R_HUM_LSB 0xFE #define BME280R_CALIB00 0x88 #define BME280R_CALIB01 0x89 #define BME280R_CALIB02 0x8A #define BME280R_CALIB03 0x8B #define BME280R_CALIB04 0x8C #define BME280R_CALIB05 0x8D #define BME280R_CALIB06 0x8E #define BME280R_CALIB07 0x8F #define BME280R_CALIB08 0x90 #define BME280R_CALIB09 0x91 #define BME280R_CALIB10 0x92 #define BME280R_CALIB11 0x93 #define BME280R_CALIB12 0x94 #define BME280R_CALIB13 0x95 #define BME280R_CALIB14 0x96 #define BME280R_CALIB15 0x97 #define BME280R_CALIB16 0x98 #define BME280R_CALIB17 0x99 #define BME280R_CALIB18 0x9A #define BME280R_CALIB19 0x9B #define BME280R_CALIB20 0x9C #define BME280R_CALIB21 0x9D #define BME280R_CALIB22 0x9E #define BME280R_CALIB23 0x9F #define BME280R_CALIB24 0xA0 #define BME280R_CALIB25 0xA1 #define BME280R_CALIB26 0xE1 #define BME280R_CALIB27 0xE2 #define BME280R_CALIB28 0xE3 #define BME280R_CALIB29 0xE4 #define BME280R_CALIB30 0xE5 #define BME280R_CALIB31 0xE6 #define BME280R_CALIB32 0xE7 #define BME280R_CALIB33 0xE8 #define BME280R_CALIB34 0xE9 #define BME280R_CALIB35 0xEA #define BME280R_CALIB36 0xEB #define BME280R_CALIB37 0xEC #define BME280R_CALIB38 0xED #define BME280R_CALIB39 0xEE #define BME280R_CALIB40 0xEF #define BME280R_CALIB41 0xF0 class BME280_CTRL{ public: BME280_CTRL(); virtual ~BME280_CTRL(); protected: char interface_mode; public: char getInterfaceMode(); virtual void init(); virtual char rr(char regAddr); virtual char rrc(char startRegAddr, char *receiveBytes, char length); virtual char wr(char regAddr, char wBytes); }; class BME280_SPI_CTRL : public BME280_CTRL{ public: BME280_SPI_CTRL(SPI *si, DigitalOut *spi_cs, unsigned int speedHz); virtual ~BME280_SPI_CTRL(); private: SPI *iface; DigitalOut *cs; unsigned int speed; public: virtual void init(); virtual char rr(char regAddr); virtual char rrc(char startRegAddr, char *receiveBytes, char length); virtual char wr(char regAddr, char wBytes); }; class BME280_I2C_CTRL : public BME280_CTRL{ public: BME280_I2C_CTRL(I2C *iic, char addr, unsigned int freq); virtual ~BME280_I2C_CTRL(); private: I2C *iface; char i2c_readAddr; char i2c_writeAddr; unsigned int i2c_freq; public: virtual void init(); virtual char rr(char regAddr); virtual char rrc(char startRegAddr, char *receiveBytes, char length); virtual char wr(char regAddr, char wBytes); }; class BOARDC_BME280{ public: BOARDC_BME280(PinName mosi, PinName miso, PinName sck, PinName scs, unsigned int spdHz=BME280_SPI_DEFSPD); BOARDC_BME280(SPI *spi, PinName scs, unsigned int spdHz=BME280_SPI_DEFSPD); BOARDC_BME280(SPI *spi, DigitalOut *spi_cs, unsigned int spdHz=BME280_SPI_DEFSPD); BOARDC_BME280(PinName sda, PinName scl, char addr=BME280_I2C_DEFADDR, unsigned int freq=100000); BOARDC_BME280(I2C *iic, char addr=BME280_I2C_DEFADDR, unsigned int freq=100000); private: BME280_CTRL *ctrl; signed int t_fine; unsigned short T1; signed short T2; signed short T3; unsigned short P1; signed short P2; signed short P3; signed short P4; signed short P5; signed short P6; signed short P7; signed short P8; signed short P9; unsigned char H1; signed short H2; unsigned char H3; signed short H4; signed short H5; signed char H6; public: void initialize(bool initIface=true); char getInterfaceMode(); char getChipID(); void reset(); char getCTRL_humidity(); void setCTRL_humidity(char regVal); char getCTRL_measuring(); void setCTRL_measuring(char regVal); unsigned int getOverSample_P(); unsigned int getOverSample_T(); unsigned int getOverSample_H(); void setOverSample_P(unsigned int oversampling); void setOverSample_T(unsigned int oversampling); void setOverSample_H(unsigned int oversampling); char getConfig(); void setConfig(char regVal); char getStatus(); bool isReady(); char getMode(); void updateCalib(); void updateCalibT(); void updateCalibP(); void updateCalibH(); float getTemp(unsigned int mode=0); float getTemp_Celsius(); float getTemp_Fahrenheit(); float getTemp_Kelvin(); float getPress(unsigned int mode=0); float getPress_Pascal(); float getPress_hPa(); float getPress_psi(); float getHum(); double getPress64(unsigned int mode=0); double getPress64_Pascal(); double getPress64_hPa(); double getPress64_psi(); }; #endif