Gordons Projects

--> Projects Top-Level GIT

Fixing names
[ladder] / cylon.rtb
1 //
2 // Flashing Led Technology...
3 //      A simple LED sequencer for the Raspbery Ladder board that
4 //      puts a "mimic" display on the screen at the same time
5 //
6 CLS 
7 PRINT 
8 PRINT "Cylon/Nightrider LED sequencer for the Raspberry Ladder Board"
9 PRINT "============================================================="
10 PRINT 
11 PRINT "Use Button A to make it go 10 times faster,"
12 PRINT "    Buttons B & C will light the Red & Green men,"
13 PRINT "    and Button D will exit."
14 PRINT 
15 PRINT "Press the SPACE bar to start: "
16 CYCLE 
17 REPEAT UNTIL GET$ = " "
18 //
19 numLEDs = 8 // Big LEDs
20 PROC ladderSetup
21 PROC setup
22 //
23 // Read and decode our data
24 //
25 CYCLE 
26   RESTORE
27   CYCLE 
28     READ l, s, d
29     IF l = -1 THEN BREAK 
30     PROC led(l, s)
31     IF DigitalRead (buttonA) = 0 THEN d = d / 10
32     IF d <> 0 THEN WAIT (d / 100)
33     //
34     IF DigitalRead (buttonB) = 0 THEN 
35       PROC led(gMan, 1)
36     ELSE 
37       PROC led(gMan, 0)
38     ENDIF 
39     //
40     IF DigitalRead (buttonC) = 0 THEN 
41       PROC led(rMan, 1)
42     ELSE 
43       PROC led(rMan, 0)
44     ENDIF 
45     //
46     IF DigitalRead (buttonD) = 0 THEN 
47       PROC tidyUp
48       END 
49     ENDIF 
50     //
51     UPDATE 
52   REPEAT 
53 REPEAT 
54 END 
55 //
56 // PROC setup:
57 //    Clear the screen and put up the LEDs on the
58 //    screen to match those on the ladder board
59 //
60 DEF PROC setup
61 LOCAL i
62 HGR 
63 COLOUR = Green
64 RECT (GWIDTH / 3, 0, GWIDTH / 3, GHEIGHT, TRUE)
65 rdius0 = GHEIGHT / (numLEDs * 2) - 18 // Outer
66 rdius1 = GHEIGHT / (numLEDs * 2) - 22 // Inner
67 manRads0 = rdius0 * 3 / 5
68 manRads1 = rdius1 * 3 / 5
69 vStep = GHEIGHT / numLEDs
70 vOff = vStep / 2
71 hPos0 = GWIDTH / 2 // Horizontal middle of the screen
72 hPos1 = hPos0 + (hPos0 / 4)
73 FOR i = 0 TO numLEDs - 1 CYCLE 
74   PROC led(i, FALSE)
75 REPEAT 
76 PROC led(8, FALSE)
77 PROC led(9, FALSE)
78 ENDPROC 
79 //
80 // tidyUp:
81 //    Turn off all the LEDs and exit the program
82 //
83 DEF PROC tidyUp
84 LOCAL i
85 // First light everything
86 FOR i = 0 TO 9 CYCLE 
87   PROC led(i, 1)
88 REPEAT 
89 UPDATE 
90 WHILE DigitalRead (buttonD) = 0 CYCLE 
91 REPEAT 
92 //
93 FOR i = 0 TO 9 CYCLE 
94   PROC led(i, 0)
95 REPEAT 
96 UPDATE 
97 ENDPROC 
98 //
99 // PROC led:
100 //    Turn an LED on or off on both the screen and
101 //    ladder board.
102 //
103 DEF PROC led(led, state)
104 //
105 // Ladder board (easy)
106 //
107 DigitalWrite (led, state)
108 //
109 // Screen - harder
110 //
111 SWITCH (led)
112   CASE 0, 1, 9
113     COLOUR = Red
114   ENDCASE 
115   CASE 2, 3
116     COLOUR = Yellow
117   ENDCASE 
118   CASE 4, 5, 8
119     COLOUR = Lime
120   ENDCASE 
121   CASE 6, 7
122     COLOUR = Blue
123   ENDCASE 
124 ENDSWITCH 
125 //
126 IF led <= 7 THEN 
127   //
128   // Big LEDs
129   //
130   CIRCLE (hPos0, GHEIGHT - (vStep * led + vOff), rdius0, TRUE)
131   IF  NOT state THEN  // Turn it OFF
132     COLOUR = Black
133     CIRCLE (hPos0, GHEIGHT - (vStep * led + vOff), rdius1, TRUE)
134   ENDIF 
135 ELSE 
136   //
137   // Little LEDs
138   //
139   IF led = 8 THEN  // Green Man
140     CIRCLE (hPos1, GHEIGHT - (vStep * 2 + vOff), manRads0, TRUE)
141     IF  NOT state THEN  // Turn it OFF
142       COLOUR = Black
143       CIRCLE (hPos1, GHEIGHT - (vStep * 2 + vOff), manRads1, TRUE)
144     ENDIF 
145   ELSE  // Red Man
146     CIRCLE (hPos1, GHEIGHT - (vStep * 1 + vOff), manRads0, TRUE)
147     IF  NOT state THEN  // Turn it OFF
148       COLOUR = Black
149       CIRCLE (hPos1, GHEIGHT - (vStep * 1 + vOff), manRads1, TRUE)
150     ENDIF 
151   ENDIF 
152 ENDIF 
153 ENDPROC 
154 //
155 // ladderSetup:
156 //    This is the setup procedure. We initialise the various
157 //    pins into the correct modes and extinbuish all the LEDs
158 //
159 DEF PROC ladderSetup
160 LOCAL i
161 FOR i = 0 TO 9 CYCLE 
162   PinMode (i, 1) // Output
163   DigitalWrite (i, 0) // Off
164 REPEAT 
165 FOR i = 10 TO 13 CYCLE 
166   PinMode (i, 0) // Input
167   PullUpDn (i, 2) // Activate internal pull-up
168 REPEAT 
169 //
170 // Make some globals
171 //
172 //
173 ledRed1 = 0
174 ledRed2 = 1
175 ledYellow1 = 2
176 ledYellow2 = 3
177 ledGreen1 = 4
178 ledGreen2 = 5
179 ledBlue1 = 6
180 ledBlue2 = 7
181 gMan = 8
182 rMan = 9
183 buttonA = 11
184 buttonB = 10
185 buttonC = 12
186 buttonD = 13
187 //
188 ENDPROC 
189 //
190 // LED Sequence data
191 //    Data is read in triplets: L,S,N where L is the LED (1-8), S is the state
192 //    1 = on, 0 = off,  and N is the delay time in 100th of seconds.
193 //    -1,-1,-1 is end of the sequence.
194 //
195 DATA 0, 1, 10
196 DATA 1, 1, 10
197 DATA 0, 0, 0, 2, 1, 10
198 DATA 1, 0, 0, 3, 1, 10
199 DATA 2, 0, 0, 4, 1, 10
200 DATA 3, 0, 0, 5, 1, 10
201 DATA 4, 0, 0, 6, 1, 10
202 DATA 5, 0, 0, 7, 1, 10
203 DATA 6, 0, 10
204 DATA 7, 0, 10
205 //
206 DATA 7, 1, 10
207 DATA 6, 1, 10
208 DATA 7, 0, 0, 5, 1, 10
209 DATA 6, 0, 0, 4, 1, 10
210 DATA 5, 0, 0, 3, 1, 10
211 DATA 4, 0, 0, 2, 1, 10
212 DATA 3, 0, 0, 1, 1, 10
213 DATA 2, 0, 0, 0, 1, 10
214 DATA 1, 0, 10
215 DATA 0, 0, 10
216 //
217 DATA -1, -1, -1