/
trafficlights.sh
executable file
·89 lines (72 loc) · 1.38 KB
/
trafficlights.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/bin/bash
# Common path for all GPIO access
BASE_GPIO_PATH=/sys/class/gpio
# Assign names to GPIO pin numbers for each light
RED=9
YELLOW=10
GREEN=11
# Assign names to states
ON="1"
OFF="0"
# Utility function to export a pin if not already exported
exportPin()
{
if [ ! -e $BASE_GPIO_PATH/gpio$1 ]; then
echo "$1" > $BASE_GPIO_PATH/export
fi
}
# Utility function to set a pin as an output
setOutput()
{
echo "out" > $BASE_GPIO_PATH/gpio$1/direction
}
# Utility function to change state of a light
setLightState()
{
echo $2 > $BASE_GPIO_PATH/gpio$1/value
}
# Utility function to turn all lights off
allLightsOff()
{
setLightState $RED $OFF
setLightState $YELLOW $OFF
setLightState $GREEN $OFF
}
# Ctrl-C handler for clean shutdown
shutdown()
{
allLightsOff
exit 0
}
trap shutdown SIGINT
# Export pins so that we can use them
exportPin $RED
exportPin $YELLOW
exportPin $GREEN
# Set pins as outputs
setOutput $RED
setOutput $YELLOW
setOutput $GREEN
# Turn lights off to begin
allLightsOff
# Loop forever until user presses Ctrl-C
while [ 1 ]
do
# Red
setLightState $RED $ON
sleep 3
# Red and Yellow
setLightState $YELLOW $ON
sleep 1
# Green
setLightState $RED $OFF
setLightState $YELLOW $OFF
setLightState $GREEN $ON
sleep 5
# Yellow
setLightState $GREEN $OFF
setLightState $YELLOW $ON
sleep 2
# Yellow off
setLightState $YELLOW $OFF
done