worked to reduce program size

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
giovanniwsn
Date:
Sun Oct 14 03:29:55 2018 +0000
Commit message:
LPS_25H_capada, to reduce code size

Changed in this revision

LPS25H/LPS25H.cpp Show annotated file Show diff for this revision Revisions of this file
LPS25H/LPS25H.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 620064decfb0 LPS25H/LPS25H.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LPS25H/LPS25H.cpp	Sun Oct 14 03:29:55 2018 +0000
@@ -0,0 +1,61 @@
+/*
+ * 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;
+}
diff -r 000000000000 -r 620064decfb0 LPS25H/LPS25H.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LPS25H/LPS25H.h	Sun Oct 14 03:29:55 2018 +0000
@@ -0,0 +1,58 @@
+/*
+ * 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
+ */
+
+#ifndef LPS25H_H
+#define LPS25H_H
+
+#include "mbed.h"
+
+//  LPS25H Address
+//  7bit address = 0b101110x(0x5c or 0x5d depends on SA0/SDO)
+#define LPS25H_G_CHIP_ADDR  (0x5c << 1)    // SA0(=SDO pin) = Ground
+#define LPS25H_V_CHIP_ADDR  (0x5d << 1)    // SA0(=SDO pin) = Vdd
+
+// MODE Selection
+#define FIFO_HW_FILTER          1
+#define FIFO_BYPASS             0
+
+//  Register's definition
+#define LPS25H_RES_CONF        0x10
+#define LPS25H_CTRL_REG1       0x20
+#define LPS25H_CTRL_REG2       0x21
+#define LPS25H_PRESS_POUT_XL   0x28
+#define LPS25H_FIFO_CTRL       0x2e
+
+// Control Reg.
+#define CR_STD_SET      ( (1UL << 7) + (1UL << 4) + (1UL << 2) )
+
+class LPS25H
+{
+public:
+    LPS25H(PinName p_sda, PinName p_scl);
+    void get(void);                 // Start convertion & data save
+    float pressure(void);           // Read pressure data
+    float altitude(void);                       // Read altitude data; return altitude in
+
+protected:
+    I2C *_i2c_p;
+    I2C &_i2c;
+    void init(void);
+
+private:
+    char dt[6];            // working buffer
+    uint8_t LPS25H_addr;   // Sensor address
+    //uint8_t LPS25H_id;     // ID
+    uint8_t LPS25H_ready;  // Device is on I2C line = 1, not = 0
+    uint8_t LPS25H_mode;   // Operation mode
+    uint32_t press;        // pressure raw data
+    int32_t alt;
+};
+
+#endif      // LPS25H_H
diff -r 000000000000 -r 620064decfb0 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Oct 14 03:29:55 2018 +0000
@@ -0,0 +1,26 @@
+#include "mbed.h"
+#include "LPS25H.h"
+
+Serial  pc(USBTX, USBRX);// Serial Debug.
+
+DigitalOut myled(LED1);
+LPS25H baro(p28, p27);
+
+int main() {
+    float alt, Bpress;
+    
+    
+    while(1) {
+        
+        baro.get();
+        Bpress = baro.pressure();
+        alt = baro.altitude();
+        
+        pc.printf("pre: %.3f   alt: %.3f\n", Bpress, alt);
+        
+        myled = 1;
+        wait(0.5);
+        myled = 0;
+        wait(0.5);
+    }
+}
diff -r 000000000000 -r 620064decfb0 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Oct 14 03:29:55 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/e95d10626187
\ No newline at end of file