Digital Pressure Sensor

Revision:
3:60816c745222
Parent:
2:3a52d110213a
--- a/BMP180.h	Tue Sep 11 10:34:58 2018 +0000
+++ b/BMP180.h	Tue Sep 11 11:35:00 2018 +0000
@@ -23,7 +23,118 @@
     Example:
 
 @code
+#include "mbed.h"
+#include "BMP180.h"
 
+BMP180 myBMP180 ( I2C_SDA, I2C_SCL, BMP180::BMP180_ADDRESS, 400000 );
+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 an ADC sample
+
+
+//
+// @brief   FUNCTION PROTOTYPES
+//
+void    changeDATA     ( void );
+
+
+// @brief FUNCTION FOR APPLICATION MAIN ENTRY.
+//
+int main()
+{
+    uint32_t                            aux;
+    BMP180::BMP180_chip_id_data_t       myBMP180_ChipID;
+    BMP180::BMP180_temperature_data_t   myBMP180_TemperatureData;
+    BMP180::BMP180_pressure_data_t      myBMP180_PressureData;
+    BMP180::BMP180_calibration_data_t   myBMP180_Calibration_Data;
+    BMP180::BMP180_uncompensated_data_t myBMP180_Uncompensated_Data;
+
+    pc.baud ( 115200 );
+
+
+    myled   =   1;
+    wait(3);
+    myled   =   0;
+
+    // Get the chip-id
+    aux  =   myBMP180.BMP180_GetID ( &myBMP180_ChipID );
+    pc.printf( "Chip-ID: %d\r\n", myBMP180_ChipID.id );
+
+    // Get calibration data
+    aux  =   myBMP180.BMP180_Get_Cal_Param ( &myBMP180_Calibration_Data );
+    pc.printf( "AC1: %d, AC2: %d, AC3: %d, AC4: %d, AC5: %d, AC6: %d, B1: %d, B2: %d, MB: %d, MC: %d, MD: %d\r\n", myBMP180_Calibration_Data.ac1, myBMP180_Calibration_Data.ac2,
+               myBMP180_Calibration_Data.ac3, myBMP180_Calibration_Data.ac4, myBMP180_Calibration_Data.ac5, myBMP180_Calibration_Data.ac6, myBMP180_Calibration_Data.b1, myBMP180_Calibration_Data.b2,
+               myBMP180_Calibration_Data.mb, myBMP180_Calibration_Data.mc, myBMP180_Calibration_Data.md );
+
+
+
+    myState  =   0UL;                                                           // Reset the variable
+    newAction.attach( &changeDATA, 2 );                                         // the address of the function to be attached ( changeDATA ) and the interval ( 2s )
+
+    // Let the callbacks take care of everything
+    while(1) {
+        sleep();
+
+        if ( myState == 1UL ) {
+            myled = 1U;
+
+            // Get uncompensated temperature
+            aux  =   myBMP180.BMP180_Get_UT ( &myBMP180_Uncompensated_Data );
+
+            // Get uncompensated pressure, Resolution: Standard
+            aux  =   myBMP180.BMP180_Get_UP ( BMP180::PRESSURE_STANDARD_MODE, &myBMP180_Uncompensated_Data );
+
+            // Calculate the true temperature
+            myBMP180_TemperatureData  =   myBMP180.BMP180_Get_Temperature ( myBMP180_Calibration_Data, myBMP180_Uncompensated_Data );
+
+            // Calculate the true pressure
+            myBMP180_PressureData  =   myBMP180.BMP180_Get_CalPressure ( myBMP180_Calibration_Data, myBMP180_TemperatureData, BMP180::PRESSURE_STANDARD_MODE, myBMP180_Uncompensated_Data );
+
+            // Transmit result through the UART
+            pc.printf ( "Temperature: %0.1f C | Pressure: %ld Pa\r\n", ( 0.1f * myBMP180_TemperatureData.temp ), myBMP180_PressureData.press );
+
+
+            // 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        11/September/2018
+ // @version     11/September/2018   The ORIGIN
+ // @pre         N/A
+ // @warning     N/A.
+ //
+void changeDATA ( void )
+{
+    myState  =   1UL;
+}
 @endcode
 */