' {$STAMP BS2e}
' {$PBASIC 2.5}
LED1 PIN 4
LED2 PIN 1
LED3 PIN 8
LED4 PIN 14
LED5 PIN 5
LED6 PIN 10
LED7 PIN 12
IR PIN 13
BTN1 PIN 3
BTN2 PIN 7
S0 PIN 2
S1 PIN 0
IN PIN 15
BUZZ PIN 9
ENDLEFT VAR Bit
ENDRIGHT VAR Bit
Slot1 VAR Bit
Slot2 VAR Bit
Slot3 VAR Bit
Slot5 VAR Bit
Slot6 VAR Bit
Slot7 VAR Bit
CNTR VAR Nib
PREV VAR Nib
i VAR Byte
TIME VAR Byte
TIMER VAR Word
FREQOUT BUZZ, 400, 1000
PAUSE 400
FREQOUT BUZZ, 400, 1000
PAUSE 400
FREQOUT BUZZ, 400, 1000
PAUSE 400
FREQOUT BUZZ, 500, 3000
Main:
TIME = 20
Start:
GOSUB Blink_Left
DO
IF BTN2 = 0 THEN
GOTO Main
ENDIF
IF ENDLEFT = 1 THEN
GOSUB Blink_Right
ENDLEFT = 0
ELSEIF ENDRIGHT = 1 THEN
GOSUB Blink_Left
ENDRIGHT = 0
ENDIF
LOOP
Blink_Left:
GOSUB Check_Slot7
IF BTN1 = 0 THEN
CNTR = 0
TIMER = 0
GOSUB Level_Up
ENDIF
GOSUB Check_Slot6
GOSUB Check_Slot5
IF BTN1 = 0 THEN
CNTR = 0
TIMER = 0
GOSUB Level_Up
ENDIF
GOSUB Check_Center
GOSUB Check_Slot3
IF BTN1 = 0 THEN
CNTR = 0
TIMER = 0
GOSUB Level_Up
ENDIF
GOSUB Check_Slot2
GOSUB Check_Slot1
IF BTN1 = 0 THEN
CNTR = 0
TIMER = 0
GOSUB Level_Up
ENDIF
ENDLEFT = 1
RETURN
Blink_Right:
GOSUB Check_Slot1
IF BTN1 = 0 THEN
CNTR = 0
TIMER = 0
GOSUB Level_Up
ENDIF
GOSUB Check_Slot2
GOSUB Check_Slot3
IF BTN1 = 0 THEN
CNTR = 0
TIMER = 0
GOSUB Level_Up
ENDIF
GOSUB Check_Center
GOSUB Check_Slot5
IF BTN1 = 0 THEN
CNTR = 0
TIMER = 0
GOSUB Level_Up
ENDIF
GOSUB Check_Slot6
GOSUB Check_Slot7
IF BTN1 = 0 THEN
CNTR = 0
TIMER = 0
GOSUB Level_Up
ENDIF
ENDRIGHT = 1
RETURN
Check_Slot1:
HIGH LED1
FOR i = 1 TO TIME
IF IR = 0 THEN
Slot1 = 1
GOSUB Loser
ENDIF
NEXT
LOW LED1
RETURN
Check_Slot2:
HIGH LED2
FOR i = 1 TO TIME
IF IR = 0 THEN
Slot2 = 1
GOSUB Loser
ENDIF
NEXT
LOW LED2
RETURN
Check_Slot3:
HIGH LED3
FOR i = 1 TO TIME
IF IR = 0 THEN
Slot3 = 1
GOSUB Loser
ENDIF
NEXT
LOW LED3
RETURN
Check_Center:
HIGH LED4
FOR i = 1 TO TIME
IF IR = 0 THEN
GOSUB Winner
ENDIF
NEXT
LOW LED4
RETURN
Check_Slot5:
HIGH LED5
FOR i = 1 TO TIME
IF IR = 0 THEN
Slot5 = 1
GOSUB Loser
ENDIF
NEXT
LOW LED5
RETURN
Check_Slot6:
HIGH LED6
FOR i = 1 TO TIME
IF IR = 0 THEN
Slot6 = 1
GOSUB Loser
ENDIF
NEXT
LOW LED6
RETURN
Check_Slot7:
HIGH LED7
FOR i = 1 TO TIME
IF IR = 0 THEN
Slot7 = 1
GOSUB Loser
ENDIF
NEXT
LOW LED7
RETURN
Winner:
HIGH LED4
PAUSE 50
LOW LED4
PAUSE 50
HIGH LED4
PAUSE 50
LOW LED4
PAUSE 50
HIGH LED4
PAUSE 50
LOW LED4
HIGH LED1
HIGH LED7
PAUSE 500
HIGH LED2
HIGH LED6
PAUSE 500
HIGH LED3
HIGH LED5
PAUSE 500
HIGH LED4
PAUSE 1000
FOR i = 1 TO 40
HIGH LED4
PAUSE 20
LOW LED4
NEXT
LOW LED1
LOW LED2
LOW LED3
LOW LED5
LOW LED6
LOW LED7
FREQOUT BUZZ, 100, 1500
PAUSE 5
FREQOUT BUZZ, 100, 1300
PAUSE 5
FREQOUT BUZZ, 100, 1500
PAUSE 5
FREQOUT BUZZ, 200, 3000
PAUSE 100
FOR i = 1 TO 20
IF i = 5 THEN
HIGH LED2
ELSEIF i = 10 THEN
LOW LED2
HIGH LED6
ELSEIF i = 15 THEN
LOW LED6
HIGH LED2
ELSEIF i = 20 THEN
LOW LED2
HIGH LED6
ELSEIF i = 25 THEN
LOW LED6
HIGH LED2
ELSEIF i = 30 THEN
LOW LED2
HIGH LED6
ELSEIF i = 35 THEN
LOW LED6
HIGH LED2
ELSEIF i = 40 THEN
LOW LED2
HIGH LED6
ELSEIF i = 45 THEN
LOW LED6
HIGH LED2
ELSEIF i = 50 THEN
LOW LED2
HIGH LED6
ENDIF
HIGH LED1
HIGH LED7
PAUSE 25
LOW LED1
LOW LED7
HIGH LED3
HIGH LED5
PAUSE 25
LOW LED3
LOW LED5
PAUSE 50
NEXT
RETURN
Loser:
IF Slot1 = 1 THEN
LOW LED1
PAUSE 200
HIGH LED1
PAUSE 200
LOW LED1
Slot1 = 0
ELSEIF Slot2 = 1 THEN
LOW LED2
PAUSE 200
HIGH LED2
PAUSE 200
LOW LED2
Slot2 = 0
ELSEIF Slot3 = 1 THEN
LOW LED3
PAUSE 200
HIGH LED3
PAUSE 200
LOW LED3
Slot3 = 0
ELSEIF Slot5 = 1 THEN
LOW LED5
PAUSE 200
HIGH LED5
PAUSE 200
LOW LED5
Slot5 = 0
ELSEIF Slot6 = 1 THEN
LOW LED6
PAUSE 200
HIGH LED6
PAUSE 200
LOW LED6
Slot6 = 0
ELSEIF Slot7 = 1 THEN
LOW LED7
PAUSE 200
HIGH LED7
PAUSE 200
LOW LED7
Slot7 = 0
ENDIF
FREQOUT BUZZ, 100, 1500
PAUSE 100
FREQOUT BUZZ, 200, 1000
PAUSE 100
GOTO Start
Level_Up:
PAUSE 100
FREQOUT BUZZ, 100, 2500
PAUSE 20
FREQOUT BUZZ, 100, 2500
PAUSE 20
FREQOUT BUZZ, 100, 2500
PAUSE 500
LOW LED1
LOW LED2
LOW LED3
LOW LED4
LOW LED5
LOW LED6
LOW LED7
PAUSE 1000
DO
PREV = CNTR
IF BTN1 = 0 THEN
PAUSE 300
CNTR = CNTR + 1
ENDIF
IF CNTR > PREV THEN
TIMER = 0
ENDIF
IF CNTR = 1 THEN
HIGH LED1
TIMER = TIMER + 1
TIME = 50
ELSEIF CNTR = 2 THEN
HIGH LED1
HIGH LED2
TIMER = TIMER + 1
TIME = 40
ELSEIF CNTR = 3 THEN
HIGH LED1
HIGH LED2
HIGH LED3
TIMER = TIMER + 1
TIME = 30
ELSEIF CNTR = 4 THEN
HIGH LED1
HIGH LED2
HIGH LED3
HIGH LED4
TIMER = TIMER + 1
TIME = 20
ELSEIF CNTR = 5 THEN
HIGH LED1
HIGH LED2
HIGH LED3
HIGH LED4
HIGH LED5
TIMER = TIMER + 1
TIME = 10
ELSEIF CNTR = 6 THEN
HIGH LED1
HIGH LED2
HIGH LED3
HIGH LED4
HIGH LED5
HIGH LED6
TIMER = TIMER + 1
TIME = 8
ELSEIF CNTR = 7 THEN
HIGH LED1
HIGH LED2
HIGH LED3
HIGH LED4
HIGH LED5
HIGH LED6
HIGH LED7
TIMER = TIMER + 1
TIME = 6
ENDIF
LOOP UNTIL TIMER > 650
TIMER = 0
CNTR = 0
GOTO Start