Skip to content

Commit e7581aa

Browse files
done
1 parent 3590c7f commit e7581aa

15 files changed

Lines changed: 141 additions & 0 deletions

File tree

.examples/audio_notification.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from machine import Pin, PWM
2+
from time import sleep, time
3+
4+
5+
class Audio_Notification(PWM):
6+
def __init__(self, pin, debug=False):
7+
super().__init__(Pin(pin))
8+
self.__debug = debug
9+
self.duty_u16(0) # Start with buzzer off
10+
self._last_toggle_time = time()
11+
12+
def warning_on(self):
13+
if self.__debug:
14+
print("Warning on")
15+
now = time()
16+
if now - self._last_toggle_time >= 0.5:
17+
self.beep(freq=500, duration=100)
18+
self._last_toggle_time = now
19+
20+
def warning_off(self):
21+
if self.__debug:
22+
print("Warning off")
23+
self.duty_u16(0) # Turn off sound
24+
25+
def beep(self, freq=1000, duration=500):
26+
self.freq(freq)
27+
self.duty_u16(32768) # 50% duty cycle
28+
sleep(duration / 1000)
29+
self.duty_u16(0) # Turn off after beep

.examples/controller.py

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
from led_light import Led_Light
2+
from pedestrian_button import Pedestrian_Button
3+
from audio_notification import Audio_Notification
4+
from time import sleep, time
5+
6+
7+
class Controller:
8+
def __init__(
9+
self, ped_red, ped_green, car_red, car_amber, car_green, button, buzzer, debug
10+
):
11+
self.__Ped_Red = ped_red
12+
self.__Ped_Green = ped_green
13+
self.__Car_Red = car_red
14+
self.__Car_Amber = car_amber
15+
self.__Car_Green = car_green
16+
self.__Buzzer = buzzer
17+
self.__Button = button
18+
self.__debug = debug
19+
self.state = "IDLE"
20+
self.last_state_change = time()
21+
22+
def walk_on(self):
23+
if self.__debug:
24+
print("Walking")
25+
self.__Ped_Red.off()
26+
self.__Ped_Green.on()
27+
self.__Car_Green.off()
28+
self.__Car_Amber.off()
29+
self.__Car_Red.on()
30+
self.__Buzzer.warning_on()
31+
32+
def walk_warning(self):
33+
if self.__debug:
34+
print("No Walking Warning")
35+
self.__Ped_Red.flash()
36+
self.__Ped_Green.off()
37+
self.__Car_Green.off()
38+
self.__Car_Amber.off()
39+
self.__Car_Red.on()
40+
self.__Buzzer.warning_off()
41+
42+
def walk_off(self):
43+
if self.__debug:
44+
print("No Walking")
45+
self.__Ped_Red.on()
46+
self.__Ped_Green.off()
47+
self.__Car_Green.on()
48+
self.__Car_Amber.off()
49+
self.__Car_Red.off()
50+
self.__Ped_Green.off()
51+
self.__Buzzer.warning_off()
52+
53+
def change(self):
54+
if self.__debug:
55+
print("Changing")
56+
self.__Ped_Red.on()
57+
self.__Ped_Green.off()
58+
self.__Car_Green.off()
59+
self.__Car_Amber.on()
60+
self.__Car_Red.off()
61+
self.__Ped_Green.off()
62+
self.__Buzzer.warning_off()
63+
64+
def update(self):
65+
# State machine logic
66+
if self.state == "IDLE":
67+
if self.__Button.button_state:
68+
if self.__debug:
69+
print("Pedestrian waiting detected, switching to CAR_AMBER")
70+
self.state = "CAR_AMBER"
71+
self.last_state_change = time()
72+
self.change()
73+
else:
74+
self.walk_off()
75+
elif self.state == "CAR_AMBER":
76+
# Wait 10 seconds before allowing walk
77+
self.change()
78+
if time() - self.last_state_change > 5:
79+
if self.__debug:
80+
print("Switching to WALK_ON")
81+
self.state = "WALK_ON"
82+
self.last_state_change = time()
83+
self.walk_on()
84+
elif self.state == "WALK_ON":
85+
# Walk signal for 5 seconds
86+
self.walk_on()
87+
if time() - self.last_state_change > 5:
88+
if self.__debug:
89+
print("Switching to No Walk Warning")
90+
self.state = "WALK_WARNING"
91+
self.last_state_change = time()
92+
self.walk_warning()
93+
elif self.state == "WALK_WARNING":
94+
# Walk signal for 5 seconds
95+
self.walk_warning()
96+
if time() - self.last_state_change > 5:
97+
if self.__debug:
98+
print("Returning to IDLE")
99+
self.state = "IDLE"
100+
self.last_state_change = time()
101+
self.walk_off()
102+
self.__Button.button_state = False
103+
else: # error
104+
self.__Ped_Red.on()
105+
self.__Ped_Green.off()
106+
self.__Car_Green.off()
107+
self.__Car_Amber.toggle()
108+
self.__Car_Red.off()
109+
self.__Ped_Green.off()
110+
sleep(1)

project/lib/audio_notification.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ def warning_off(self):
2323
self.duty_u16(0) # Turn off sound
2424

2525
def beep(self, freq=1000, duration=500):
26+
if self.__debug:
27+
print("Beep")
2628
self.freq(freq)
2729
self.duty_u16(32768) # 50% duty cycle
2830
sleep(duration / 1000)

project/py_scripts/v04.py

Whitespace-only changes.

project/py_scripts/v05.py

Whitespace-only changes.

project/py_scripts/v06.py

Whitespace-only changes.

project/py_scripts/v07.py

Whitespace-only changes.
12.6 KB
Binary file not shown.
18.2 KB
Binary file not shown.

0 commit comments

Comments
 (0)