# see http://akizukidenshi.com/download/ds/akizuki/ae-l3gd20.pdf
# see http://www.st.com/web/catalog/sense_power/FM89/SC1288/PF252443
BMP085_START=0xD0
BMP085_I2CADDR=0x77
BMP085_CONTROL=0xF4
BMP085_TEMPDATA=0xF6
BMP085_PRESSUREDATA=0xF6
BMP085_READTEMPCMD=0x2E
BMP085_READPRESSURECMD=0x34
BMP085_CAL=0xAA
def read(reg_address)
@wire.beginTransmission(BMP085_I2CADDR)
@wire.write(reg_address)
@wire.endTransmission
@wire.requestFrom(BMP085_I2CADDR, 1)
return @wire.read
end
def read16(reg_address)
v = read(reg_address)
v << 8
v |= read(reg_address+1)
return v
end
def write(reg_address, char_value)
@wire.beginTransmission(BMP085_I2CADDR)
@wire.write(reg_address)
@wire.write(char_value)
@wire.endTransmission
end
def cal
@ac5 = read16(BMP085_CAL+8)
@ac6 = read16(BMP085_CAL+10)
@mc = read16(BMP085_CAL+18)
@md = read16(BMP085_CAL+20)
p "ac5: #{@ac5}, ac6: #{@ac6}, mc: #{@mc}, md: #{@md}"
end
def temp
write(BMP085_CONTROL, BMP085_READTEMPCMD)
delay(5)
t = read16(BMP085_TEMPDATA)
x1 = (t - @ac6).to_f * @ac5 / (2**15)
x2 = (@mc * 2**11).to_f / (x1+@md)
b5 = x1 + x2
t = (b5+8).to_f/2**4
t /= 10
return t;
end
def press
write(BMP085_CONTROL, BMP085_READPRESSURECMD)
delay 5
raw = read16(BMP085_PRESSUREDATA)
raw |= read16(BMP085_PRESSUREDATA+2)
raw >> 8
end
#initialization
@wire = Wire.new(0x0, Wire::DutyCycle_2)
if read(BMP085_START) != 0x55
p "exit"
exit
else
p "Start"
end
cal
loop do
p temp
delay 10
press
sleep 5
end