import time
from machine import Pin
#import _thread
time.sleep(0.1) # Wait for USB to become ready
# define button pressed to false
button_pressed = False
advance = False
# define which pins are used for each Led on board and set pins to output mode
led_red_1 = Pin(14,Pin.OUT)
led_yellow_1 = Pin(13,Pin.OUT)
led_green_1 = Pin(12,Pin.OUT)
led_red_2 = Pin(17,Pin.OUT)
led_yellow_2 = Pin(18,Pin.OUT)
led_green_2 = Pin(19,Pin.OUT)
#Define push buttons and buzzer and the pins they are attached to
push_button_blue = Pin(16,Pin.IN,Pin.PULL_DOWN)
push_button_green = Pin(15,Pin.IN,Pin.PULL_DOWN)
push_button_white = Pin(7,Pin.IN,Pin.PULL_DOWN)
push_button_yellow = Pin(8,Pin.IN,Pin.PULL_DOWN)
buzzer = Pin(20,Pin.OUT)
#define 7 segment displays
top_segment_A = Pin(5,Pin.OUT,value=1)
top_right_segment_B = Pin(6,Pin.OUT,value=1)
top_left_segment_F = Pin(4,Pin.OUT,value=1)
middle_segment_G = Pin(3,Pin.OUT,value=1)
bottom_right_segment_C = Pin(0,Pin.OUT,value=1)
bottom_left_segment_E = Pin(2,Pin.OUT,value=1)
bottom_segment_D = Pin(1,Pin.OUT,value=1)
def crossing_sequence():
#segment order = [top,top left,top right, middle, bottom left, bottom right, bottom] digits =[1,2,3,4,5]
digits =['1111111','0001000','1101101','0100010','0100100','1000101','0010100']
for i in range(8):
buzzer.value(1)
time.sleep(0.5)
buzzer.value(0)
time.sleep(0.5)
for i in range(7):
number = digits[6-i]
top_segment_A.value(int(number[0]))
top_left_segment_F.value(int(number[1]))
top_right_segment_B.value(int(number[2]))
middle_segment_G.value(int(number[3]))
bottom_left_segment_E.value(int(number[4]))
bottom_right_segment_C.value(int(number[5]))
bottom_segment_D.value(int(number[6]))
buzzer.value(1)
time.sleep(0.5)
buzzer.value(0)
time.sleep(0.5)
button_pressed = False
def traffic_light_sequence():
led_yellow_1.value(0)
led_red_1.value(1)
led_red_2.value(1)
time.sleep(1)
led_yellow_2.value(1)
time.sleep(2)
led_green_2.value(1)
led_red_2.value(0)
led_yellow_2.value(0)
time.sleep(1)
led_green_2.value(0)
led_yellow_2.value(1)
time.sleep(2)
led_yellow_2.value(0)
led_red_2.value(1)
time.sleep(1)
led_yellow_1.value(1)
time.sleep(2)
led_red_1.value(0)
led_yellow_1.value(0)
led_green_1(1)
time.sleep(1)
led_yellow_1.value(1)
led_green_1.value(0)
time.sleep(2)
def emergency_button(Pin):
push_button_white.irq(handler=None)
pressed = True
global advance
if led_red_1.value() == 1 and led_red_2.value() == 1:
led_red_2.value(1)
led_red_1.value(1)
elif led_red_1.value() != 1:
led_red_2.value(1)
led_green_1.value(0)
led_yellow_1.value(1)
time.sleep(1)
led_yellow_1.value(0)
led_red_1.value(1)
time.sleep(5)
else:
led_red_1.value(1)
led_green_2.value(0)
led_yellow_2.value(1)
time.sleep(1)
led_yellow_2.value(0)
led_red_2.value(1)
time.sleep(5)
while pressed:
if push_button_white.value() == 1:
pressed = False
time.sleep(0.2)
time.sleep(0.2)
advance = True
push_button_white.irq(trigger=Pin.IRQ_RISING, handler=emergency_button)
#wait for input
def reset_button(Pin):
push_button_yellow.irq(handler=None)
global advance
if led_red_1.value() != 1:
led_red_2.value(1)
led_green_1.value(0)
led_yellow_1.value(1)
time.sleep(1)
led_yellow_1.value(0)
led_red_1.value(1)
time.sleep(5)
else:
led_red_1.value(1)
led_green_2.value(0)
led_yellow_2.value(1)
time.sleep(1)
led_yellow_2.value(0)
led_red_2.value(1)
time.sleep(5)
push_button_yellow.irq(trigger=Pin.IRQ_RISING, handler=reset_button)
advance = True
def pedestrian_button_pressed(Pin):
push_button_green.irq(handler=None)
push_button_blue.irq(handler=None)
global button_pressed
button_pressed = True
print('button')
time.sleep(0.2)
push_button_green.irq(trigger=Pin.IRQ_RISING,handler=pedestrian_button_pressed)
push_button_blue.irq(trigger=Pin.IRQ_RISING,handler=pedestrian_button_pressed)
# interupt pins
push_button_white.irq(trigger=Pin.IRQ_RISING, handler=emergency_button)
push_button_yellow.irq(trigger=Pin.IRQ_RISING, handler=reset_button)
push_button_blue.irq(trigger=Pin.IRQ_RISING,handler=pedestrian_button_pressed)
push_button_green.irq(trigger=Pin.IRQ_RISING,handler=pedestrian_button_pressed)
while True:
if button_pressed == True:
led_red_1.value(1)
led_red_2.value(1)
led_yellow_1(0)
crossing_sequence()
button_pressed=False
#Traffic light sequence
traffic_light_sequence()