i cant comment on the code much , but its a bit easier to read
Code:
Temperature:
i2cread SDA, SCL, SAdef, LocAmbTemp, [AmbTemp] 'read amb temperature Ta & save in AmbTemp
gosub SwapAmbBytes: 'I2C reads the highest byte first; Go swap the bytes
i2cread SDA, SCL, SAdef, LocObjTemp, [ObjTemp] 'read object temperature (Tobj) & save in ObjTemp
gosub SwapObjBytes:
if AmbTemp >= ObjTemp then Temperature 'Object is not heating, continue to loop
if (ObjTemp - AmbTemp) >= ThresTemp then ObjHeating 'differance between Amb & Obj temperature has exceeded threshold temp
Reset: 'Reset time count and turn motion sensor off if (ObjTemp - AmbTemp) is less that threshold temp.
cnt = 1
low 6 'turns motion sensor off
goto Temperature
ObjHeating:
high 6 'obj is heating; turn motion detector on (by setting RB6 high) to check for motion in room .
for cnt = 1 to MaxTime 'measure time by counting # of loops of approx one sec each.
If portb.1 = 1 then Temperature 'motion occured in room, do a reset
i2cread SDA, SCL, SAdef, LocAmbTemp, [AmbTemp] 'read amb temperature Ta & save in AmbTemp
gosub SwapAmbBytes:
i2cread SDA, SCL, SAdef, LocObjTemp, [ObjTemp] 'read object temperature (Tobj) & save in ObjTemp
gosub SwapObjBytes:
if AmbTemp >= ObjTemp then Temperature 'Object is not heating, start new loop
if (ObjTemp - AmbTemp) < ThresTemp then Temperature 'differance between Amb & Obj temperature is less than threshold temp
next cnt
Alarm: 'object temperature has exceeded threshold temp for more than the MaxTime, so sound alarm
high portb.0
pause 2000
low portb.0
pause 15000
if portb.5 = 0 then Temperature
goto Alarm
end
' ---------- Sub Routines ----------
SwapAmbBytes: 'swap the MSB and LSB of the amb and obj temperatures
swap AmbTemp.byte1, AmbTemp.byte0
return
SwapObjBytes:
swap ObjTemp.Byte1, ObjTemp.byte0
return
Bookmarks