週末にちょっと実験できるように説明書を見ながら間に合わせな感じでハンダ付け.
ちゃんと動くかな?
精度はかなり良いみたいです.
--追記--
自宅でプログラミング.
気圧センサがちゃんと動きました.
3バイト読みだしてシフトしながら処理すると気圧が読み取れます.
1022.XX hPa の値が読み出せています.
#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);
}