-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrafficlights4.py
More file actions
176 lines (162 loc) · 5.57 KB
/
Copy pathtrafficlights4.py
File metadata and controls
176 lines (162 loc) · 5.57 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# draft of a prgram to drive a simple Raspberry Pi interface board
# board will have traffic light leds, push buttons, trimmers and a temperature sensor
# 1/1/13 using billboard module - works
# 1/1/13 starting talking to the board - leds working
# 2/1/13 switches now work - note have to set them up unlike outputs on chip
# 3/1/13 temperature display working
# 9/1/13 trimmer display now working
# 9/1/13 checkd works with board disconnected and connected again
import bb1
from bb1 import *
import i2cdevices2
from i2cdevices2 import *
#led patterns for traffic lights
redlight = (RED, BLACK, BLACK)
redoranlight = (RED, ORANGE, BLACK)
greenlight = (BLACK, BLACK, GREEN)
orangelight = (BLACK, ORANGE, BLACK)
# tell computer what is connected to the digital i/o pins of chip
switch1=0
switch2=1
ledr1=2
ledo1=3
ledg1=4
ledr2=5
ledo2=6
ledg2=7
temperatureChannel=1
trimmer1Channel = 0
trimmer2Channel = 3
def readtemperature():
# just a bodge for now
return (3.0*(anaport.ADCread(1)-45))
def readtrimmer(channel):
return anaport.ADCread(channel)
def setupbbhardware():
#see if bb is attached
global digport,anaport
digport=pcf8574(0x20)
anaport=pcf8591(0x48)
if digport.ChipPresent & anaport.ChipPresent:
bb1.bbpresent = True
else:
bb1.bbpresent = False
if bb1.bbpresent == True : #set up ports to drive leds and read switches
#switch all leds off
digport.writeall(0)
#enable the inputs for the switches
digport.setinput(switch1)
digport.setinput(switch2)
def switchled(block,lights):
if block == 1: #block1
if lights == redlight:
digport.writeport(ledr1,1)
digport.writeport(ledo1,0)
digport.writeport(ledg1,0)
if lights == redoranlight:
digport.writeport(ledr1,1)
digport.writeport(ledo1,1)
digport.writeport(ledg1,0)
if lights == greenlight:
digport.writeport(ledr1,0)
digport.writeport(ledo1,0)
digport.writeport(ledg1,1)
if lights == orangelight:
digport.writeport(ledr1,0)
digport.writeport(ledo1,1)
digport.writeport(ledg1,0)
else: #block2
if lights == redlight:
digport.writeport(ledr2,1)
digport.writeport(ledo2,0)
digport.writeport(ledg2,0)
if lights == redoranlight:
digport.writeport(ledr2,1)
digport.writeport(ledo2,1)
digport.writeport(ledg2,0)
if lights == greenlight:
digport.writeport(ledr2,0)
digport.writeport(ledo2,0)
digport.writeport(ledg2,1)
if lights == orangelight:
digport.writeport(ledr2,0)
digport.writeport(ledo2,1)
digport.writeport(ledg2,0)
def setledblock1(lights):
for ind in range((len(bb1.ledBlock1))):
bb1.ledBlock1[ind].colour=lights[ind]
if bb1.bbpresent:
switchled(1,lights)
def setledblock2(lights):
for ind in range((len(bb1.ledBlock2))):
bb1.ledBlock2[ind].colour=lights[ind]
if bb1.bbpresent:
switchled(2,lights)
def runlightsequence():
#a pedestriam button has been pressed so start setting both sets of traffic lights to red
setledblock1(orangelight)
setledblock2(orangelight)
updatescreen()
pygame.time.wait(2000) #wait for 2000 ms or 3 sec
setledblock1(redlight)
setledblock2(redlight)
updatescreen()
pygame.time.wait(8000) #wait for 8000 ms or 15 sec
setledblock1(redoranlight)
setledblock2(redoranlight)
updatescreen()
pygame.time.wait(2000) #wait for 2000 ms or 3 sec
setledblock1(greenlight)
setledblock2(greenlight)
updatescreen()
pygame.event.clear
def main():
setupbbhardware()
initialisegraphics() #note have to have set up hardware first to read the status
# set led intial colours
setledblock1(greenlight)
setledblock2(greenlight)
updatescreen()#update the screen with new objects
while True: # main loop
# update temperature
if bb1.bbpresent:
bb1.temperature = readtemperature()
TempDisplay(bb1.temperature)
bb1.trimmer1.angle=readtrimmer(trimmer1Channel)
bb1.trimmer2.angle=readtrimmer(trimmer2Channel)
bb1.trimmer1.draw()
bb1.trimmer2.draw()
# check for switch press on the board
if digport.readport(switch1) == 1 :
bb1.button1.pressed = True
if digport.readport(switch2) == 1 :
bb1.button2.pressed = True
# check for keypress
for event in pygame.event.get():
if event.type == QUIT:
#switch all leds off
if bb1.bbpresent:
digport.writeall(0)
#close window
pygame.quit()
#stop program
sys.exit()
elif event.type == MOUSEBUTTONDOWN:
if bb1.button1.buttonPressed(pygame.mouse.get_pos()):
bb1.button1.pressed= True
if bb1.button2.buttonPressed(pygame.mouse.get_pos()):
bb1.button2.pressed= True
if bb1.button1.pressed :
updatescreen()
pygame.time.wait(FPS)
bb1.button1.pressed= False
updatescreen()
runlightsequence()
if bb1.button2.pressed :
updatescreen()
pygame.time.wait(FPS)
bb1.button2.pressed= False
updatescreen()
runlightsequence()
if __name__ == '__main__':
main()