#include <Wire.h>
// Format ---- ---- ---- ----
// SSPPPPPPPPPPPPPPTTTTTTTTTTTXXXXX
uint32_t data = 0b00101010101010100111000111000000;
char buffer[80];
void setup()
{
Serial.begin(115200);
Serial.print( "data = 0x");
Serial.println( data, HEX);
Serial.println( "method 1:");
byte x3 = data >> 24;
byte x2 = data >> 16;
byte x1 = data >> 8;
byte x0 = data;
//--------extracting pressure signal------------
unsigned int pressure = (unsigned int) (x3 & 0x3F) << 4 | (unsigned int) x2;
Serial.print(" PRESSURE: "); Serial.println(pressure, DEC); //
Serial.print(" PRESSURE: "); Serial.println(pressure, BIN); //
//-------------extracting temperature signal----------------
unsigned temperature = (unsigned int) x1 << 5 | (unsigned int) (x0 >> 6);
Serial.print(" TEMP: "); Serial.println(temperature, DEC);//
Serial.print(" TEMP: "); Serial.println(temperature, BIN);//
Serial.println( "method 2:");
// According to the datasheet, the pressure is from bit D16 up to D29 (14 bits)
// Starting at bit D16, means shifting it 16 times to the right.
unsigned int p = (data >> 16) & 0x3FFF;
// According to the datasheet, the temperature is from bit D5 up to D15 (11 bits)
unsigned int t = (data >> 5) & 0x07FF;
sprintf(buffer," p = %u (0x%04X), t = %u (0x%04X)", p, p, t, t);
Serial.println(buffer);
// Please don't use method 3
Serial.println( "method 3:");
unsigned int press = (((unsigned int) (x3 & 0x3F)) << 8) | ((unsigned int) x2);
unsigned int temp = (((unsigned int) x1) << 3) | ((unsigned int) (x0 >> 5));
Serial.print( " ");
Serial.print( press);
Serial.print( ", ");
Serial.println( temp);
}
void loop() {}