# import subrutine
from machine import Pin
import time
# setare porturi Raspberry Pico
ledrosu_A = Pin(15, Pin.OUT)
ledgalben_A = Pin(14, Pin.OUT)
ledverde_A= Pin(13, Pin.OUT)
ledrosu_P = Pin(12, Pin.OUT)
ledverde_P = Pin(11, Pin.OUT)
ledalbastru_P= Pin(10, Pin.OUT)
button = Pin(9, Pin.IN, Pin.PULL_DOWN)
# setare variabile
tverde_P=12 # timp de trecere a autovehiculelor
tgalbenrosu_A=5 # timp de mentinere galben inainte de rosu
tverde_A=12 # timp de mentinere verde pentru auto
tverde_P=16 # timp de trecere pietoni; se alege intotdeauna un nr par, pentru a putea fi impartit la 2 si sa rezulte un nr intreg
t_P=10 # timp de asteptare a pietonilor dupa apasarea butonului, daca a apasat cand era rosu pentru pietoni
comanda_trecere_P=0 # index care are valoarea 0 atunci cand nu a apasat nimeni butonul, 1 cand cineva a apasat butonul si inca nu se schimba culorile semaforului
# setare_semafor verde pentru auto, rosu pentru pietoni, se sting toate celalalte leduri
ledrosu_P(1); ledverde_P(0); ledrosu_A(0); ledgalben_A(0); ledverde_A(1); ledalbastru_P(0)# R _ & _ _ V
while True:
for i in range(tverde_A): # acesta este un ciclu care dureaza cat trec auto si nu se intrerupe cand se apasa pe buton;
if button.value(): # se verifica daca butonul este apasat
comanda_trecere_P=1 # se inregistreaza comanda de trecere pietoni
ledalbastru_P(1) # se aprinde ledul albastru pentru a se confirma ca a fost activata cererea de traversare a pietonilor
time.sleep(1) # acestia asteapta tverde_A secunde pana se termina ciclul pentru auto
while comanda_trecere_P==0: # daca butonul nu a fost apasat in ciclul anterior se intra in acesta
if button.value(): # se verifica daca butonul este apasat
comanda_trecere_P=1 # se inregistreaza comanda de trecere pietoni
ledalbastru_P(1) # se aprinde ledul albastru pentru a se confirma ca a fost activata cererea de traversare a pietonilor
time.sleep(t_P) # pietonii asteapta t_P secunde
break # iese din ciclu prin apasare pe buton
time.sleep(.5) # timpul dintre 2 verificari ale butonului
# aici se ajunge numai daca s-a apasat pe buton
ledalbastru_P(0) # se stinge ledul albastru confirmand ca se deruleaza ciclul semaforului
ledgalben_A(1); ledverde_A(0) # se aprinde galben pentru avertizarea auto ca se opreste circulatia
time.sleep(tgalbenrosu_A) # timp de aprindere led galben auto
ledrosu_P(0); ledverde_P(1); ledrosu_A(1); ledgalben_A(0); # se face verde pentru pietoni si rosu pentru auto; se stinge ledul galben
time.sleep(tverde_P) # timp de trecere pietoni si asteptare auto
ledgalben_A(1) # semnalizare de pregatire de trecere a autovehiculelor
for i in range(tverde_P/2): # semnalizare cu verde intermiten pentru a nu mai pasi pietonii pe trecere si cei de pe trecere sa se grabeasca
ledverde_P(0); time.sleep(.5)
ledverde_P(1); time.sleep(.5)
ledgalben_A(0) #se stinge ledul galben
ledrosu_P(1); ledverde_P(0); ledrosu_A(0); ledverde_A(1) # se face rosu pentru pietoni, verde pentru auto
comanda_trecere_P=0 # se reseteaza comanda_trecere_P