ReadGroveI2cHighAccuracySensor( varA, VarB, varC )
Select Case varC
Case < 10 : SerTxd( varA, #varB, ".00", #varC )
Case < 100 : SerTxd( varA, #varB, ".0", #varC )
Else : SerTxd( varA, #varB, ".", #varC )
End Select
symbol varA = w0
symbol varB = w1
symbol varC = w2
; Temporary word variables used by Grove modules.
symbol grove_w1 = s_w1
symbol grove_w2 = s_w3
symbol grove_w3 = s_w4
symbol grove_w4 = s_w6
symbol grove_w5 = _h_w0
symbol grove_w6 = _h_w1
symbol grove_w7 = _h_w2
;Initialise barometer module
symbol grove_barometer_int = grove_w1
symbol grove_barometer_rem = grove_w2
symbol grove_barometer_sign = grove_w3
symbol grove_barometer_cmd = grove_w4
hi2csetup i2cmaster, 0xEC, i2cslow, i2cbyte
hi2cout (0x06)
main:
do
grove_barometer_cmd = 0x32
gosub grove_barometer_read
varA = grove_barometer_sign
varB = grove_barometer_int
varC = grove_barometer_rem
pause 500
debug
loop
stop
grove_barometer_read:
hi2csetup i2cmaster, 0xEC, i2cslow, i2cbyte
hi2cout (0x48)
pause 25
hi2cin grove_barometer_cmd, (grove_w5, grove_w6, grove_w7)
grove_w6 = grove_w6 * 256 + grove_w7
if grove_w5 < 0x80 then
grove_w5 = grove_w5 & 0x07
grove_barometer_sign = "+"
else
grove_w5 = grove_w5 ^ 0x07 & 0x07
grove_w6 = -grove_w6
grove_w5 = grove_w6 max 1 ^ 1 + grove_w5
grove_barometer_sign = "-"
end if
grove_w7 = grove_w6 // 200
grove_w7 = grove_w5 * 536 + grove_w7 // 200
grove_w6 = grove_w6 / 8
grove_w6 = grove_w5 * $2000 + grove_w6 / 25 * 2
grove_barometer_int = grove_w7 / 100 + grove_w6
grove_barometer_rem = grove_w7 // 100
if grove_w5 = 8 then
grove_barometer_int = 5242
end if
return
hi2cout (0x52)