気圧センサLPS331AP

説明書を見ながら間に合わせな感じでハンダ付け. 精度はかなり良いみたいです.

CIMG7944.JPG

Arduinoでプログラミング.  気圧センサがちゃんと動きました. 3バイト読みだしてシフトしながら処理すると気圧が読み取れます.
1022.XX hPa の値が読み出せています.

LPS331AP.jpg

データシートはこちら↓ アドレス0x20に書き込むデータで更新頻度が変えられます.
http://strawberry-linux.com/pub/DM00036196.pdf

スケッチはこちら↓

#include < Wire.h>

int sensorAddress = 0xB8 >> 1;   // LPS331APのアドレス,SA0=GNDで0xB8,SA0=VDDで0xBA
unsigned long read2a, read29, read28;
float reading= 0; 


// I2Cで指定したセンサの指定アドレスから1バイト読み出す
int i2cReadByte(int deviceAddress, int registerAddress){
  Wire.beginTransmission(deviceAddress);  
  Wire.write(registerAddress);
  Wire.endTransmission();
  Wire.requestFrom(deviceAddress, 1);
  return(Wire.read()); 
}

// I2Cで指定したセンサの指定アドレスに1バイト書き込む 
void i2cWriteByte(int deviceAddress, int registerAddress, int data){
  Wire.beginTransmission(deviceAddress);  
  Wire.write(registerAddress);
  Wire.write(data);
  Wire.endTransmission();
}  
  
void setup()
{
  Serial.begin(9600);  
  Wire.begin();  
 
  Serial.println( i2cReadByte(sensorAddress, 0x0f), HEX);  // 気圧センサのテスト,0f番地からBBが読めれば正常
  i2cWriteByte(sensorAddress, 0x20, 0xa0);  // 0xa0で7Hz,0x90にすると1Hzで気圧を更新
  delay(1000); 
}

void loop(){
 
  read2a = i2cReadByte(sensorAddress, 0x2a);      // 気圧の上位バイト
  read29 = i2cReadByte(sensorAddress, 0x29);      // 気圧の中位バイト 
  read28 = i2cReadByte(sensorAddress, 0x28);      // 気圧の下位バイト 
  
  reading =(read2a<<16) + (read29<<8) + read28;
  reading /=4096;                                 // hPa単位に直す
  
  Serial.print(read2a,HEX); Serial.print(" ");
  Serial.print(read29,HEX); Serial.print(" ");
  Serial.print(read28,HEX); Serial.print(" "); 
  Serial.println(reading );                      // 気圧をシリアル出力
  delay(100); 

}