Gordons Projects

--> Projects Top-Level GIT

Added README
[ladder] / tuxx.sh
1 #!/bin/bash
2
3 # tuxx:
4 #       Tux Crossing. A variant on the UK "Pelican" crossing for
5 #       pedestrians going over roads.
6 #
7 #       There is a set of Red, Yellow (sometimes called amber) and
8 #       Green traffic lights to control the traffic, and a "Red Man"
9 #       and "Green Man" indicators for pedestrians, and a button for
10 #       them to push.
11 #       Push the button and the lights cycle to Red, then the Green Man
12 #       comes on (often with a beeping sound), then afte a short while
13 #       the Green man starts to flash, meaning to not start crossing,
14 #       and the Yellow traffic light flashes too - meaning that if the
15 #       crossing is clear, traffic can pass... Then after a few more seconds
16 #       the flashing stops and it revers to Go for traffic and Stop for
17 #       pedestrians.
18 #
19 #       Gordon Henderson, June 2012
20
21 # Our lamps:
22 #       (These are wiringPi pin numbers)
23
24      red1=0
25      red2=1
26   yellow1=2
27   yellow2=3
28    green1=4
29    green2=5
30
31  greenMan=8
32    redMan=9
33
34 # The input buttons
35
36 button1=11
37 button2=12
38 button3=13
39 button4=14
40
41
42 # ladderSetup:
43 #       Generic initialisation code for the Raspberrt Ladder board.
44 #       Program the LEDs and buttons.
45 #######################################################################
46
47 ladderSetup ()
48 {
49   echo Setup
50   for i in 0 1 2 3 4 5 6 7 8 9 ; do
51     gpio write $i 0
52     gpio mode $i out
53   done
54
55   for i in 11 12 13 14; do
56     gpio mode $i in
57     gpio mode $i up
58   done
59 }
60
61 # tuxxSetup:
62 #       Initialise the LEDs for the crossing
63 #######################################################################
64
65 tuxxSetup ()
66 {
67   gpio write $green1 1
68   gpio write $green2 1
69   gpio write $redMan 1
70 }
71
72
73 # waitButton:
74 #       Wait for the button to be pressed. Because we have the GPIO
75 #       pin pulled high, we wait for it to go low to indicate a push.
76 #######################################################################
77
78 waitButton ()
79 {
80   echo -n "Waiting for button ... "
81   while [ `gpio read $button1` = 1 ]; do
82     sleep 0.1
83   done
84   echo "Got it"
85 }
86
87 # stopTraffic:
88 #       Cycle the traffic lights from Green to Red
89 #######################################################################
90
91 stopTraffic ()
92 {
93   echo -n "Stopping traffic ... "
94   gpio write $green1  0
95   gpio write $green2  0
96   gpio write $yellow1 1
97   gpio write $yellow2 1
98   sleep 2
99   gpio write $yellow1 0
100   gpio write $yellow2 0
101   gpio write $red1    1
102   gpio write $red2    1
103   sleep 2
104   echo "Stopped"
105 }
106
107 # walk:
108 #       Signal the red/green man to walk and when time is up,
109 #       start the traffic light sequence to let the traffic move again
110 #######################################################################
111
112 walk ()
113 {
114   echo "Walk now ... "
115   gpio write $redMan   0
116   gpio write $greenMan 1
117   for i in `seq 10 -1 0`; do
118     echo -n $i " "
119     sleep 1
120   done
121   gpio write $red1    0
122   gpio write $red2    0
123   gpio write $yellow1 1
124   gpio write $yellow2 1
125   echo "Walked"
126 }
127
128 # graceTime:
129 #       This is the time when the green man is flashing, and the yellow
130 #       traffic light is also flashing - to signal to pedestrians to not
131 #       start to cross and to drivers that they can move on if the 
132 #       crossing is clear.
133 #######################################################################
134
135 graceTime ()
136 {
137   echo "Grace time ... "
138   for i in `seq 0 7` ; do
139     sleep 0.5
140     gpio write $greenMan 0
141     gpio write $yellow1  0
142     gpio write $yellow2  0
143     sleep 0.5
144     gpio write $greenMan 1
145     gpio write $yellow1  1
146     gpio write $yellow2  1
147   done
148   echo "time up!"
149 }
150
151 # startTraffic:
152 #       Back to the Red Man and Green traffic light
153 #######################################################################
154
155 startTraffic ()
156 {
157   echo "Starting traffic ... "
158   gpio write $greenMan 0
159   gpio write $redMan   1
160   sleep 0.5
161   gpio write $yellow1 0
162   gpio write $yellow2 0
163   gpio write $green1  1
164   gpio write $green2  1
165   echo "Going"
166 }
167
168
169 #######################################################################
170 # The main program
171 #       Call our setup routines once, then sit in a loop, waiting for
172 #       the button to be pressed then executing the sequence.
173 #######################################################################
174
175 ladderSetup
176   tuxxSetup
177
178 while true; do
179   waitButton
180   stopTraffic
181   walk
182   graceTime
183   startTraffic
184 done