Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: MPL3115A2.cpp
- Revision:
- 9:75a5960adf5c
- Parent:
- 8:89ed6aeb5dbb
- Child:
- 10:82ac06669316
--- a/MPL3115A2.cpp Sun Sep 22 07:04:14 2013 +0000
+++ b/MPL3115A2.cpp Sun Sep 22 11:17:28 2013 +0000
@@ -12,6 +12,15 @@
#define REG_PT_DATA_CFG 0x13
#define REG_P_TGT_MSB 0x16
#define REG_P_WND_MSB 0x19
+#define REG_OFF_P 0x2b
+#define REG_OFF_T 0x2c
+#define REG_OFF_H 0x2d
+#define REG_PRES_MIN_MSB 0x1c
+#define REG_ALTI_MIN_MSB 0x1c
+#define REG_TEMP_MIN_MSB 0x1f
+#define REG_PRES_MAX_MSB 0x21
+#define REG_ALTI_MAX_MSB 0x21
+#define REG_TEMP_MAX_MSB 0x24
#define UINT14_MAX 16383
@@ -40,6 +49,8 @@
InterruptIn MPL3115A2_Int2( PTA12); // INT2
MPL3115A2::MPL3115A2(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr) {
+ unsigned char data[6];
+
MPL3115A2_mode = BAROMETRIC_MODE;
MPL3115A2_oversampling = OVERSAMPLE_RATIO_1;
//
@@ -49,6 +60,10 @@
MPL3115A2_Int2.fall( NULL);
Reset();
+
+ data[0]=REG_PRES_MIN_MSB;
+ data[1]=0;data[2]=0;data[3]=0;data[4]=0;data[5]=0;
+ writeRegs( &data[0], 6);
}
void MPL3115A2::Reset( void)
@@ -298,20 +313,50 @@
{
if ( isDataAvailable() & PTDR_STATUS) {
if ( MPL3115A2_mode == ALTIMETER_MODE) {
- f[0] = getAltimeter();
+ f[0] = getAltimeter( REG_ALTIMETER_MSB);
} else {
- f[0] = getPressure();
+ f[0] = getPressure( REG_PRESSURE_MSB);
}
- f[1] = getTemperature();
+ f[1] = getTemperature( REG_TEMP_MSB);
//
return 1;
} else
return 0;
}
+void MPL3115A2::getAllMaximumData( float *f)
+{
+ if ( MPL3115A2_mode == ALTIMETER_MODE) {
+ f[0] = getAltimeter( REG_ALTI_MAX_MSB);
+ } else {
+ f[0] = getPressure( REG_PRES_MAX_MSB);
+ }
+
+ f[1] = getTemperature( REG_TEMP_MAX_MSB);
+}
+
+void MPL3115A2::getAllMinimumData( float *f)
+{
+ if ( MPL3115A2_mode == ALTIMETER_MODE) {
+ f[0] = getAltimeter( REG_ALTI_MIN_MSB);
+ } else {
+ f[0] = getPressure( REG_PRES_MIN_MSB);
+ }
+
+ f[1] = getTemperature( REG_TEMP_MIN_MSB);
+}
+
float MPL3115A2::getAltimeter( void)
{
+ float a;
+
+ a = getAltimeter( REG_ALTIMETER_MSB);
+ return a;
+}
+
+float MPL3115A2::getAltimeter( unsigned char reg)
+{
unsigned char dt[3];
unsigned short altm;
float faltm;
@@ -321,7 +366,7 @@
* dt[1] = Bits 4-11 of 20-bit real-time Altitude sample. (b7-b0)
* dt[2] = Bits 0-3 of 20-bit real-time Altitude sample (b7-b4)
*/
- readRegs( REG_ALTIMETER_MSB, &dt[0], 3);
+ readRegs( reg, &dt[0], 3);
altm = (dt[0]<<8) | dt[1];
//
if ( dt[0] > 0x7F) {
@@ -337,6 +382,14 @@
float MPL3115A2::getPressure( void)
{
+ float a;
+
+ a = getPressure( REG_PRESSURE_MSB);
+ return a;
+}
+
+float MPL3115A2::getPressure( unsigned char reg)
+{
unsigned char dt[3];
unsigned int prs;
float fprs;
@@ -346,7 +399,7 @@
* dt[1] = Bits 4-11 of 20-bit real-time Pressure sample. (b7-b0)
* dt[2] = Bits 0-3 of 20-bit real-time Pressure sample (b7-b4)
*/
- readRegs( REG_PRESSURE_MSB, &dt[0], 3);
+ readRegs( reg, &dt[0], 3);
prs = (dt[0]<<10) | (dt[1]<<2) | (dt[2]>>6);
//
fprs = (float)prs * 1.0f;
@@ -359,8 +412,15 @@
return fprs;
}
+float MPL3115A2::getTemperature( void)
+{
+ float a;
+
+ a = getTemperature( REG_TEMP_MSB);
+ return a;
+}
-float MPL3115A2::getTemperature( void)
+float MPL3115A2::getTemperature( unsigned char reg)
{
unsigned char dt[2];
unsigned short temp;
@@ -370,7 +430,7 @@
* dt[0] = Bits 4-11 of 16-bit real-time temperature sample. (b7-b0)
* dt[1] = Bits 0-3 of 16-bit real-time temperature sample. (b7-b4)
*/
- readRegs( REG_TEMP_MSB, &dt[0], 2);
+ readRegs( reg, &dt[0], 2);
temp = dt[0];
//
if ( dt[0] > 0x7F) {
@@ -385,6 +445,7 @@
}
+
unsigned int MPL3115A2::getAllDataRaw( unsigned char *dt)
{
// Check for Press/Alti and Temp value ready
@@ -456,7 +517,7 @@
void MPL3115A2::SetPressureOffset( char offset)
{
- unsigned char data [2] = {0x2b, offset};
+ unsigned char data [2] = {REG_OFF_P, offset};
Standby();
writeRegs(data,2);
@@ -466,7 +527,7 @@
void MPL3115A2::SetTemperatureOffset( char offset)
{
- unsigned char data [2] = {0x2c, offset};
+ unsigned char data [2] = {REG_OFF_T, offset};
Standby();
writeRegs(data,2);
@@ -476,7 +537,7 @@
void MPL3115A2::SetAltitudeOffset( char offset)
{
- unsigned char data [2] = {0x2d, offset};
+ unsigned char data [2] = {REG_OFF_H, offset};
Standby();
writeRegs(data,2);