memclear
Dim b(8) ' ADC DATA
Dim c(24)' CAL DATA P/T
Dim h(7) ' CAL DATA HUM
i2c.setup(D2,D1)
adr = hextoint("76")
reg = hextoint("88")' TEMP/PRESS calibration data
i2c.begin(adr)
i2c.write(reg)
i2c.end()
delay 10
i2c.requestfrom(adr,24)
for i = 0 to 23
c(i) = i2c.read()
'Print i&" "&c(i)
next i
dig_T1=c(0)+c(1)<<8
dig_T2=c(2)+c(3)<<8
dig_T3=c(4)+c(5)<<8
dig_P1 = c(6) + 256 * c(7)
dig_P2 = c(8) + 256 * c(9)
dig_P3 = c(10) + 256 * c(11)
dig_P4 = c(12) + 256 * c(13)
dig_P5 = c(14) + 256 * c(15)
dig_P6 = c(16) + 256 * c(17)
dig_P7 = c(18) + 256 * c(19)
dig_P8 = c(20) + 256 * c(21)
dig_P9 = c(22) + 256 * c(23)
'Signed!
if dig_T2 > 32767 then dig_T2 = dig_T2 - 65536
if dig_T3 > 32767 then dig_T3 = dig_T3 - 65536
if dig_P2 > 32767 then dig_P2 = dig_P2 - 65536
if dig_P3 > 32767 then dig_P3 = dig_P3 - 65536
if dig_P4 > 32767 then dig_P4 = dig_P4 - 65536
if dig_P5 > 32767 then dig_P5 = dig_P5 - 65536
if dig_P6 > 32767 then dig_P6 = dig_P6 - 65536
if dig_P7 > 32767 then dig_P7 = dig_P7 - 65536
if dig_P8 > 32767 then dig_P8 = dig_P8 - 65536
if dig_P9 > 32767 then dig_P9 = dig_P9 - 65536
'HUMIDITY
reg = hextoint("A1") 'HUM calibration data
i2c.begin(adr)
i2c.write(reg)
i2c.end()
delay 10
i2c.requestfrom(adr,1)
dig_H1 = i2c.read()
reg = hextoint("E1") 'HUM calibration data
i2c.begin(adr)
i2c.write(reg)
i2c.end()
delay 10
i2c.requestfrom(adr,7)
for i = 0 to 6
h(i) = i2c.read()
'Print i&" "&h(i)
next i
dig_H2 = h(0) + (h(1) * 256) 'int16
dig_H3 = h(2) 'uint8
dig_H4 = h(3) * 16 + (h(4) and 15) 'uint16
dig_H5 = h(5) * 16 + (h(4) and 240) / 16 'uint16
dig_H6 = h(6) ' int8
if dig_H2 > 32767 then dig_H2 = dig_H2 - 65536
if dig_H6 > 127 then dig_H6 = dig_H6 - 256
reg = hextoint("F2") 'HUM MODE
i2c.begin(adr)
i2c.write(reg)
i2c.write(5) 'Reg F2 = 00000101
i2c.end()
reg = hextoint("F4")' PRESS/TEMP Mode
i2c.begin(adr)
i2c.write(reg)
i2c.write(32+7)'Reg F4 = 00100111
i2c.end()
Timer 2000,[tm]
Textbox T
html " °C
"
Textbox press
html " hPa
"
textbox hum
html " %"
Wait
[tm] 'MEASUREMENT
reg = hextoint("F7") 'ALL 8 BYTES
i2c.begin(adr)
i2c.write(reg)
i2c.end()
delay 10
i2c.requestfrom(adr,8)
for i = 0 to 7 'PRESS+TEMP+HUM
b(i) = i2c.read()
next i
'T BERECHNEN
adc_T = b(3)<<16 + b(4)<<8 + b(5)
adc_T = adc_T>>4
var1 = (adc_T / 16384 - dig_T1 / 1024) * dig_T2 'OK!
x = adc_T / 131072 - dig_T1>>13
var2 = (x * x) * dig_T3
t_fine = var1 + var2
T = (var1 + var2) / 5120
'P BERECHNEN
adc_p = b(0)*65536+b(1)*256+b(2)
adc_p = adc_p / 16
var1 = (t_fine/2) - 64000
var2 = var1 * var1 * dig_P6 / 32768
var2 = var2 + var1 * dig_P5 * 2
var2 = (var2/4)+(dig_P4 * 65536)
var1 = (dig_P3 * var1 * var1 / 524288 + dig_P2 * var1) / 524288
var1 = (1 + var1 / 32768)*dig_P1
p = 1048576 - adc_p
p = ((p - var2 / 4096) * 6250) / var1
var1 = dig_P9 * p * p / 2147483648
var2 = p * dig_P8 / 32768
p = p + (var1 + var2 + dig_P7) / 16
press = p/100
'H BERECHNEN
adc_h= b(6) * 256 + b(7)
var_H = t_fine - 76800
var_H = (adc_h - (dig_H4 * 64 + dig_H5 / 16384 * var_H)) * (dig_H2 / 65536 * (1 + dig_H6 / 67108864 * var_H * (1 + dig_H3 / 67108864 * var_H)))
var_H = var_H * (1 - dig_H1 * var_H / 524288)
if var_H > 100 then var_H = 100
if var_H < 0 then var_H = 0
hum = var_H
Wait