worked to reduce program size

Dependencies:   mbed

LPS25H/LPS25H.cpp

Committer:
giovanniwsn
Date:
2018-10-14
Revision:
0:620064decfb0

File content as of revision 0:620064decfb0:

/*
 * mbed library program
 *  LPS25H MEMS pressure sensor: 260-1260 hPa absolute digital output barometer
 *   made by STMicroelectronics
 *   http://www.st-japan.co.jp/web/catalog/sense_power/FM89/SC1316/PF255230
 * Copyright (c) 2015,'17 Kenji Arai / JH1PJL
 *      Created: Feburary  21st, 2015
 *      Revised: August    21st, 2017
 */

#include "LPS25H.h"

LPS25H::LPS25H (PinName p_sda, PinName p_scl) :
 _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p)
{
    LPS25H_addr = LPS25H_V_CHIP_ADDR;
    //LPS25H_mode = FIFO_HW_FILTER;
    init();
}
// Initialize
void LPS25H::init(void) {
    _i2c.frequency(100000);
    //if (LPS25H_mode == FIFO_HW_FILTER){
        dt[0] = LPS25H_RES_CONF;
        dt[1] = 0x05;
        _i2c.write(LPS25H_addr, dt, 2, false);
        dt[0] = LPS25H_FIFO_CTRL;
        dt[1] = 0xdf;
        _i2c.write(LPS25H_addr, dt, 2, false);
        dt[0] = LPS25H_CTRL_REG2;
        dt[1] = 0x40;
        _i2c.write(LPS25H_addr, dt, 2, false);
        dt[0] = LPS25H_CTRL_REG1;
        dt[1] = 0x90;
        _i2c.write(LPS25H_addr, dt, 2, false);
    /*} else {
        dt[0] = LPS25H_CTRL_REG2;
        dt[1] = 0x0;
        _i2c.write(LPS25H_addr, dt, 2, false);
        dt[0] = LPS25H_CTRL_REG1;
        dt[1] = CR_STD_SET;
        _i2c.write(LPS25H_addr, dt, 2, false);
    }*/
}

// Start conv. and get all data
void LPS25H::get(void) {
    dt[0] = LPS25H_PRESS_POUT_XL | 0x80;
    _i2c.write(LPS25H_addr, dt, 1, true);
    _i2c.read(LPS25H_addr, dt, 3, false);
    press = dt[2] << 16 | dt[1] << 8 | dt[0];
    alt = (1-pow((press/4096)/1013.25,0.190284))*145366.45;
}

float LPS25H::pressure() {
    return (float)press / 4096;
}

float LPS25H::altitude(void) {
    return  alt/3.280839895;
}