Gordons Projects

--> Projects Top-Level GIT

Initial move to GIT for the gpioExamples
[gpioExamples] / tuxx / 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      red=0
25   yellow=1
26    green=2
27   redMan=3
28 greenMan=4
29
30 # The input button
31
32 button=8
33
34
35 # setup:
36 #       Program the GPIO correctly and initialise the lamps
37 #######################################################################
38
39 setup ()
40 {
41   echo Setup
42   for i in $red $yellow $green $redMan $greenMan ; do gpio mode  $i out ; done
43   for i in $red $yellow $green $redMan $greenMan ; do gpio write $i   0 ; done
44   gpio write $green  1
45   gpio write $redMan 1
46   gpio mode  $button in
47 }
48
49 # waitButton:
50 #       Wait for the button to be pressed. Because we have the GPIO
51 #       pin pulled high, we wait for it to go low to indicate a push.
52 #######################################################################
53
54 waitButton ()
55 {
56   echo -n "Waiting for button ... "
57   while [ `gpio read $button` = 1 ]; do
58     sleep 0.1
59   done
60   echo "Got it"
61 }
62
63 # stopTraffic:
64 #       Cycle the traffic lights from Green to Red
65 #######################################################################
66
67 stopTraffic ()
68 {
69   echo -n "Stopping traffic ... "
70   gpio write $green  0
71   gpio write $yellow 1
72   sleep 2
73   gpio write $yellow 0
74   gpio write $red    1
75   sleep 2
76   echo "Stopped"
77 }
78
79 # walk:
80 #       Signal the red/green man to walk and when time is up,
81 #       start the traffic light sequence to let the traffic move again
82 #######################################################################
83
84 walk ()
85 {
86   echo "Walk now ... "
87   gpio write $redMan   0
88   gpio write $greenMan 1
89   sleep 10
90   gpio write $red    0
91   gpio write $yellow 1
92   echo "Walked"
93 }
94
95 # graceTime:
96 #       This is the time when the green man is flashing, and the yellow
97 #       traffic light is also flashing - to signal to pedestrians to not
98 #       start to cross and to drivers that they can move on if the 
99 #       crossing is clear.
100 #######################################################################
101
102 graceTime ()
103 {
104   echo "Grace time ... "
105   for i in `seq 0 7` ; do
106     sleep 0.5
107     gpio write $greenMan 0
108     gpio write $yellow   0
109     sleep 0.5
110     gpio write $greenMan 1
111     gpio write $yellow   1
112   done
113   echo "time up!"
114 }
115
116 # startTraffic:
117 #       Back to the Red Man and Green traffic light
118 #######################################################################
119
120 startTraffic ()
121 {
122   echo "Starting traffic ... "
123   gpio write $greenMan 0
124   gpio write $redMan   1
125   sleep 0.5
126   gpio write $yellow 0
127   gpio write $green  1
128   echo "Going"
129 }
130
131
132 #######################################################################
133 # The main program
134 #       Call our setup routing once, then sit in a loop, waiting for
135 #       the button to be pressed then executing the sequence.
136 #######################################################################
137
138 setup
139 while true; do
140   waitButton
141   stopTraffic
142   walk
143   graceTime
144   startTraffic
145 done