worked to reduce program size
Dependencies: mbed
LPS25H.cpp
00001 /* 00002 * mbed library program 00003 * LPS25H MEMS pressure sensor: 260-1260 hPa absolute digital output barometer 00004 * made by STMicroelectronics 00005 * http://www.st-japan.co.jp/web/catalog/sense_power/FM89/SC1316/PF255230 00006 * Copyright (c) 2015,'17 Kenji Arai / JH1PJL 00007 * Created: Feburary 21st, 2015 00008 * Revised: August 21st, 2017 00009 */ 00010 00011 #include "LPS25H.h" 00012 00013 LPS25H::LPS25H (PinName p_sda, PinName p_scl) : 00014 _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p) 00015 { 00016 LPS25H_addr = LPS25H_V_CHIP_ADDR; 00017 //LPS25H_mode = FIFO_HW_FILTER; 00018 init(); 00019 } 00020 // Initialize 00021 void LPS25H::init(void) { 00022 _i2c.frequency(100000); 00023 //if (LPS25H_mode == FIFO_HW_FILTER){ 00024 dt[0] = LPS25H_RES_CONF; 00025 dt[1] = 0x05; 00026 _i2c.write(LPS25H_addr, dt, 2, false); 00027 dt[0] = LPS25H_FIFO_CTRL; 00028 dt[1] = 0xdf; 00029 _i2c.write(LPS25H_addr, dt, 2, false); 00030 dt[0] = LPS25H_CTRL_REG2; 00031 dt[1] = 0x40; 00032 _i2c.write(LPS25H_addr, dt, 2, false); 00033 dt[0] = LPS25H_CTRL_REG1; 00034 dt[1] = 0x90; 00035 _i2c.write(LPS25H_addr, dt, 2, false); 00036 /*} else { 00037 dt[0] = LPS25H_CTRL_REG2; 00038 dt[1] = 0x0; 00039 _i2c.write(LPS25H_addr, dt, 2, false); 00040 dt[0] = LPS25H_CTRL_REG1; 00041 dt[1] = CR_STD_SET; 00042 _i2c.write(LPS25H_addr, dt, 2, false); 00043 }*/ 00044 } 00045 00046 // Start conv. and get all data 00047 void LPS25H::get(void) { 00048 dt[0] = LPS25H_PRESS_POUT_XL | 0x80; 00049 _i2c.write(LPS25H_addr, dt, 1, true); 00050 _i2c.read(LPS25H_addr, dt, 3, false); 00051 press = dt[2] << 16 | dt[1] << 8 | dt[0]; 00052 alt = (1-pow((press/4096)/1013.25,0.190284))*145366.45; 00053 } 00054 00055 float LPS25H::pressure() { 00056 return (float)press / 4096; 00057 } 00058 00059 float LPS25H::altitude(void) { 00060 return alt/3.280839895; 00061 }
Generated on Thu Jul 14 2022 01:13:08 by 1.7.2