気圧センサ LPS25H を I2C 接続で使うためのライブラリ. Library for atmospheric pressure sensor LPS25H using I2C interface.
LPS25H_I2C.cpp
- Committer:
- MikamiUitOpen
- Date:
- 2016-12-18
- Revision:
- 0:888288e9f8d5
File content as of revision 0:888288e9f8d5:
//--------------------------------------------------------- // Class for atmospheric pressure sensor LPS25H // // Interface: I2C only // // 2016/12/18, Copyright (c) 2016 MIKAMI, Naoki //--------------------------------------------------------- #include "LPS25H_I2C.hpp" namespace Mikami { // Constructor Lps25hI2c::Lps25hI2c(PinName sda, PinName scl, uint8_t addr) : ADDR_(addr), i2cPtr_(new I2C(sda, scl)) { i2cPtr_->write(ADDR_, (char[]){0x0F}, 1); // 0x0F: WHO_AM_I register address char whoAmI; i2cPtr_->read(ADDR_, &whoAmI, 1); printf("LPS25H\'s WHO_AM_I = 0x%X\r\n", whoAmI); if (whoAmI != 0xBD) error("Failed to connect to LPS25H: register WHO_AM_I was not 0xBD.\r\n"); // 0x20: CTRL_REG1 register address // 0x90: No Power-Save, 1Hz i2cPtr_->write(ADDR_, (char[]){0x20, 0x90}, 2); } float Lps25hI2c::Read() { union { uint32_t u32; char press[4]; } rawData = { .u32 = 0 }; i2cPtr_->write(ADDR_, (char[]){0x28}, 1); i2cPtr_->read(ADDR_, &rawData.press[0], 1); // lowest part i2cPtr_->write(ADDR_, (char[]){0x29}, 1); i2cPtr_->read(ADDR_, &rawData.press[1], 1); // middle part i2cPtr_->write(ADDR_, (char[]){0x2A}, 1); i2cPtr_->read(ADDR_, &rawData.press[2], 1); // highest part return rawData.u32/4096.0f; } }