Digital Barometric Pressure Sensor

Revision:
3:1217d0c3c926
Parent:
1:9f46fae3aa6e
--- a/QMP6988.h	Fri Feb 25 15:24:48 2022 +0000
+++ b/QMP6988.h	Fri Feb 25 15:43:15 2022 +0000
@@ -22,7 +22,130 @@
 /**
     Example:
 @code
+#include "mbed.h"
+#include "QMP6988.h"
 
+QMP6988 myQMP6988 ( I2C_SDA, I2C_SCL, QMP6988::QMP6988_ADDRESS_SDO_LOW, 400000 ); // I2C_SDA | I2C_SCL
+Serial pc     ( USBTX, USBRX );                                                 // tx, rx
+
+DigitalOut  myled   ( LED1 );
+Ticker      newAction;
+
+
+//@brief Constants.
+
+
+//@brief Variables.
+volatile uint32_t myState;                                                      // State that indicates when to perform a new sample
+
+
+//@brief   FUNCTION PROTOTYPES
+void    changeDATA     ( void );
+
+
+//@brief FUNCTION FOR APPLICATION MAIN ENTRY.
+int main()
+{
+    QMP6988::QMP6988_status_t       aux;
+    QMP6988::QMP6988_user_data_t    myQMP6988_Data;
+
+    pc.baud ( 115200 );
+
+    myled   =   1;
+    wait(3);
+    myled   =   0;
+
+    // Reset the device
+    aux  =   myQMP6988.QMP6988_SoftReset ();
+    wait_ms(200);
+
+    // Get chip ID 
+    aux  =   myQMP6988.QMP6988_GetChipID (&myQMP6988_Data.chip_id );
+    pc.printf ( "Chip ID: %x\r\n", myQMP6988_Data.chip_id );
+
+    // Wait until the OTP values are available  
+    do {
+        aux  =   myQMP6988.QMP6988_GetDeviceStat ( &myQMP6988_Data.device_stat );
+    } while( ( myQMP6988_Data.device_stat & QMP6988::DEVICE_STAT_OTP_UPDATE_MASK ) == QMP6988::DEVICE_STAT_OTP_UPDATE_BUSY );
+
+    // Raw compensation coefficients
+    aux  =   myQMP6988.QMP6988_GetRawCompensationCoefficients ( &myQMP6988_Data.raw_k );
+
+    // Calculate compensation coefficients 
+    myQMP6988_Data.k  =   myQMP6988.QMP6988_CalculateCompensationCoefficients ( myQMP6988_Data.raw_k );
+
+    // Temperature average: FILTER: N = 4 
+    myQMP6988_Data.filter = QMP6988::IIR_FILTER_N_4;
+    aux  =   myQMP6988.QMP6988_SetIIR_Filter ( myQMP6988_Data.filter );
+
+    // Temperature average: TEMP_AVERAGE:  8 
+    myQMP6988_Data.temp_average = QMP6988::CTRL_MEAS_TEMP_AVERAGE_8;
+    aux  =   myQMP6988.QMP6988_SetTemperatureAverage ( myQMP6988_Data.temp_average );
+
+    // Pressure average: PRESS_AVERAGE:  8 
+    myQMP6988_Data.press_average = QMP6988::CTRL_MEAS_PRESS_AVERAGE_8;
+    aux  =   myQMP6988.QMP6988_SetPressureAverage ( myQMP6988_Data.press_average );
+
+    // Power mode: Sleep mode
+    myQMP6988_Data.power_mode = QMP6988::CTRL_MEAS_POWER_MODE_SLEEP_MODE;
+    aux  =   myQMP6988.QMP6988_SetPowerMode ( myQMP6988_Data.power_mode );
+
+    myState  =   0UL;                                                           // Reset the variable
+    newAction.attach( &changeDATA, 1U );                                        // the address of the function to be attached ( changeDATA ) and the interval ( 1s )
+
+    // Let the callbacks take care of everything
+    while(1) {
+        sleep();
+
+        if ( myState == 1UL ) {
+            myled = 1U;
+
+            // Power mode: Forced mode 
+            myQMP6988_Data.power_mode = QMP6988::CTRL_MEAS_POWER_MODE_FORCED_MODE;
+            aux  =   myQMP6988.QMP6988_SetPowerMode ( myQMP6988_Data.power_mode );
+
+            // Wait until a new set of data is available    
+            do {
+                aux  =   myQMP6988.QMP6988_GetDeviceStat ( &myQMP6988_Data.device_stat );
+            } while( ( myQMP6988_Data.device_stat & QMP6988::DEVICE_STAT_MEASURE_MASK ) == QMP6988::DEVICE_STAT_MEASURE_BUSY );
+
+            // Get the raw data 
+            aux  =   myQMP6988.QMP6988_GetRawMeasurements ( &myQMP6988_Data.raw_txd );
+
+            // Process both temperature and pressure data   
+            myQMP6988_Data.txd   =  myQMP6988.QMP6988_CalculateCompensatedMeasuredData( myQMP6988_Data.raw_txd, myQMP6988_Data.k );
+
+            // Send data through the UART
+            pc.printf ( "Temp: %0.2f C | Press: %0.3f Pa\r\n", myQMP6988_Data.txd.temperature, myQMP6988_Data.txd.pressure );
+
+
+            // Reset the variables
+            myState  =   0UL;
+            myled    =   0U;
+        }
+    }
+}
+
+
+// @brief       changeDATA ( void  )
+//
+// @details     It changes myState variable
+//
+// @param[in]    N/A
+//
+// @param[out]   N/A.
+//
+// @return       N/A.
+//
+// @author      Manuel Caballero
+// @date        25/March/2021
+// @version     25/March/2021   The ORIGIN
+// @pre         N/A
+// @warning     N/A.
+void changeDATA ( void )
+{
+    myState  =   1UL;
+}
 @endcode
 */