;External, Manual and Auto Camera Control
#com4 ;or as appropriate
#picaxe 18M2
#no_data
init:
let dirsC = %11001111 ;set port C outputs
let b1 = 0 ;initial start camera
read 0, b3 ;
if b3 = 0 then ;if max cameras not set then
let b3 = 7 ;set initial max cameras..
write 0, b3 ;and save.
endif
external:
if pinB.7 = 0 then ;switch 2 not set to internal
let pinC.7 = 0 ;pass-thru so dec point off
let b1 = pinsB and %00000111 ;we only want pinsB0,B1,B2
let pinsC = b1 ;pass pinsB thru to pinsC
goto external
endif
manual:
if pinB.5 = 1 then ;switch 1 at B.5 is biased off
let pinC.7 = 0 ;manual so dec point off
if b1 < 7 then ;manual scans through non-
inc b1 ;existent cameras to allow
else ;maximum auto-scan count
let b1 = 0 ;to be set & saved in eeprom
endif
let pinsC = b1
pause 500
goto external
endif
auto:
if pinB.6 = 1 then ;switch 1 at B.6 is on Auto
let pinC.7 = 1 ;Auto so dec point is on
let pinsC = b1 or %10000000 ;make sure dec point stays on
readadc B.4, w2 ;get setting from pot.(0-255)
let w2 = w2 + 50 * 2 ;convert to 100-610 for 100ms loop
; = 10 to 61 seconds (approx)
for w3 = 1 to w2
pause 100 ;delay before incrementing.
if pinB.6 = 0 then external ;not Auto
if pinB.7 = 0 then external ;not Internal
readadc B.4, w4 ;get setting from pot again
let w4 = w4 + 50 * 2 ;if it's changed then restart
if w2 <> w4 then auto ;timing loop (saves waiting!)
next w3
read 0, b3 ;get max setting from eeprom
if b1 < b3 then ;and only scan up to max.
inc b1
else
let b1 = 0
endif
goto auto
else
let pinC.7 = 0 ;not auto so dec point off
endif
setmax:
if pinB.3 = 1 then ;b1 = current count on pinsC
if b1 = 0 then ;0 means only one camera!
b1 = 1 ;so default to 2 camera (0 and 1)
endif
write 0, b1 ;so save in eeprom as maximum
for b0 = 0 to 20
toggle C.7
pause 100 ;confirm with dec. point.
next
endif
goto external