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