0% found this document useful (0 votes)
18 views5 pages

Prog Picase

This program controls a magic switchboard that sequences the turning on and off of four lights based on the positions of four switches. It learns the sequence by having each switch turn on its corresponding light. It then remembers the sequence even if the switches are turned off. It can also lock the sequence until reset if one switch is on during power up.

Uploaded by

julie
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views5 pages

Prog Picase

This program controls a magic switchboard that sequences the turning on and off of four lights based on the positions of four switches. It learns the sequence by having each switch turn on its corresponding light. It then remembers the sequence even if the switches are turned off. It can also lock the sequence until reset if one switch is on during power up.

Uploaded by

julie
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

Le programme de Bill Brown, adapté au picaxe 14M2

#picaxe 14m2
#no_data
' Magic Switchboard - original source by "Technical" from PicAxe Forum
' Modified for PicAxe 18x by Wayne Thomason of Addison, TX USA
' 7/15/2009
' Modified for Picaxe 14m2 By Bill Brown
' 12/8/2012'
' mods: 1. Now is easily configurable via switch? and bulb?
variables
' 2. "timeout" functions even without learning all 4
switches
' 3. starting point and sequence direction dependent on
last switch turned off
' 4. Now has Audience_lockdown feature. If power is
turned on while switch-4
' is set, each light will respond only to
corresponding switch position
' until circuit is reset.
' Modifs MM pullup sur C.0 à C.3 et timeout par ft time en s
(30/09/2017)
' Assumptions
' 1. Times out after 10 seconds of all switches in the off position
' regardless of whether all switches are learned yet
' 2. All switches must be off at start
' (If switch 4 on when started, it starts up in audience-mode.)
' 3. All 4 switches must be switched on before that sequence is learned
' 4. Set bulb/LED outputs using bulb1, bulb2, bulb3 & bulb4
' 5. Set switch inputs using switch1, switch2, switch3 and switch4
' 6. first pattern is left to right, bulbs 1, 2, 3, 4
' 7. subsequent patterns are determined by last SWITCH turned off:
' Switch 1 = 1234 order (bulb 1 first, then right in sequence)
' Switch 2 = 2143 order (bulb 2 first, then left in sequence, wrapping after
first)
' Switch 3 = 3412 order (bulb 3 first, then right in sequence, wrapping after
last)
' Switch 4 = 4321 order (bulb 4 first, then left in sequence)

symbol switch1 = pinc.3 ' input pin for switch 1 (pinc.0, pinc.1, pinc.2 and
pinc.3)
symbol switch2 = pinc.2 ' input pin for switch 2
symbol switch3 = pinc.1 ' input pin for switch 3
symbol switch4 = pinc.0 ' input pin for switch 4
symbol bulb1 = b.3 ' output for bulb 1 (b.0, b.1, b.2 and b.3)
symbol bulb2 = b.2 ' output for bulb 2
symbol bulb3 = b.1 ' output for bulb 3
symbol bulb4 = b.0 ' output for bulb 4
symbol timeout = 9 ' comptage des s par time
symbol flags = b0 ' flags to remember whether a switch has been learnt yet
symbol flag0 = bit0
symbol flag1 = bit1
symbol flag2 = bit2
symbol flag3 = bit3
symbol light0 = b1 ' variable to remember which switch is which light
symbol light1 = b2
symbol light2 = b3
symbol light3 = b4
symbol bulb = b7
symbol starting_lite = b6 ' variable to set starting light position (and direction)
symbol position = b5 ' position counter
dirsB=%111111
pullup %111100000000 ; R pullup sur C.0 à C.3 . Modif câblage:au repos switch
OFF -> niveau haut
if switch4=1 then audience_lockdown
starting_lite = 1
' Start of program
do_reset:
' ' reset position counter
if starting_lite = 1 then ' if starting with bulb 1, position reset to 0.
position = 0
end if
if starting_lite = 2 then ' if starting with bulb 2, position reset to 1.
position = 1
end if
if starting_lite = 3 then ' if starting with bulb 3, position reset to 2.
position = 2
end if
if starting_lite = 4 then ' if starting wtih bulb 4, position reset to 3.
position = 3
end if
flags = 0 ' reset flags
' Learning loop
waiting_to_learn_loop:
' if not learnt switch learn it
if switch1 = 1 and flag0 = 0 then learn0
if switch2 = 1 and flag1 = 0 then learn1
if switch3 = 1 and flag2 = 0 then learn2
if switch4 = 1 and flag3 = 0 then learn3
' we have learnt that switch so light output accordingly
if flag0 = 1 then
if switch1 = 1 then
high light0
else
low light0
end if
end if
if flag1 = 1 then
if switch2 = 1 then
high light1
else
low light1
end if
end if
if flag2 = 1 then
if switch3 = 1 then
high light2
else
low light2
end if
end if
if flag3 = 1 then
if switch4 = 1 then
high light3
else
low light3
end if
end if
if switch2=0 and switch1=0 and switch3=0 and switch4=0 then ' count down to
timeout even while in learning loop
if time > timeout then do_reset
else
time=0
end if
goto waiting_to_learn_loop
'************ Learn a light position and set flag so we know that switch is done
learn0:
gosub bulbset
'************ position gives you the output for this switch
flag0 = 1 ' set flag
light0 = bulb ' remember position for this switch
goto learn_end
learn1:
gosub bulbset
'***********position gives you the output for this switch
flag1 = 1 ' set flag
light1 = bulb ' remember position for this switch
goto learn_end
learn2:
gosub bulbset
'************ position gives you the output for this switch
flag2 = 1 ' set flag
light2 = bulb ' remember position for this switch
goto learn_end
learn3:
gosub bulbset
'*********** position gives you the output for this switch
flag3 = 1 ' set flag
light3 = bulb ' remember position for this switch
learn_end:
if starting_lite = 1 then 'if starting with 1st lamp, sequence = 1-2-3-4
inc position
if position > 3 then have_learnt_all
goto waiting_to_learn_loop
end if
if starting_lite = 2 then 'if starting with 2nd lamp, sequence =
2-1-4-3
if position > 0 then 'don't dec if position=0, will cause
error
dec position
else
position = 3 'position was 0 before dec, set to "3"
end if
if position = 1 then have_learnt_all 'if position=1 then we have come full
circle
goto waiting_to_learn_loop 'not finished, loop and learn more
switches
end if
if starting_lite = 3 then 'if starting with 3rd lamp, sequence =
3-4-1-2
inc position
if position > 3 then 'if position greater greater than 4th
lamp, reset to "0"
position = 0
end if
if position = 2 then have_learnt_all 'if position=2 then we have come full
circle
goto waiting_to_learn_loop 'not finished, loop and learn more
switches
end if
if starting_lite = 4 then 'if starting with 4th lamp, sequence =
4-3-2-1
if position > 0 then 'don't dec if position=0, will cause
error
dec position
else
goto have_learnt_all 'position is "0", we have learned last
position.
end if
goto waiting_to_learn_loop
end if
; Toute manipulation sur les inters reset la variable time
; Si time >= timeout, la nouvelle séquence est validée.
have_learnt_all:
if switch1 = 1 then
high light0
time=0
else
low light0
end if
if switch2 = 1 then
high light1
time=0
else
low light1
end if
if switch3 = 1 then
high light2
time=0
else
low light2
end if
if switch4 = 1 then
high light3
time=0
else
low light3
end if
'******** Set which bulb will start next round. (only if switches all learned)
if b0 = 15 and switch1=1 and switch2=0 and switch3=0 and switch4=0 then ' if
switch 1 on alone, set lamp 1 first
starting_lite=1
end if
if b0 = 15 and switch1=0 and switch2=1 and switch3=0 and switch4=0 then ' if
switch 2 on alone, set lamp 2 first
starting_lite=2
end if
if b0 = 15 and switch1=0 and switch2=0 and switch3=1 and switch4=0 then ' if
switch 3 on alone, set lamp 3 first
starting_lite=3
end if
if b0 = 15 and switch1=0 and switch2=0 and switch3=0 and switch4=1 then ' if
switch 4 on alone, set lamp 4 first
starting_lite=4
end if
if time>timeout then do_reset
goto have_learnt_all
bulbset:
if position=0 then
bulb = bulb1
end if
if position=1 then
bulb = bulb2
end if
if position=2 then
bulb = bulb3
end if
if position=3 then
bulb = bulb4
end if
return
audience_lockdown:
if switch1 = 1 then
high bulb1
else
low bulb1
end if
if switch2 = 1 then
high bulb2
else
low bulb2
end if
if switch3 = 1 then
high bulb3
else
low bulb3
end if
if switch4 = 1 then
high bulb4
else
low bulb4
end if
goto audience_lockdown
;FIN DE PROGRAMME

You might also like