import time
//Ubacivanje biblioteke za vreme, kako bismo kasnije mogli da upravljamo vremenom
import RPi.GPIO as GPIO //Ubacivanje biblioteke za GPIO pinove
GPIO.setmode(GPIO.BCM) //Definisanje nacina oznacavanja pinova koji se koristi GPIO.
setup(4,GPIO.OUT) //Zeleno svetlo
GPIO.setup(17,GPIO.OUT) //uto svetlo
GPIO.setup(27,GPIO.OUT) //Crveno svetlo
GPIO.setup(16,GPIO.OUT) //Crveno svetlo za peake
GPIO.setup(18,GPIO.OUT) //Zeleno svetlo za peake
GPIO.setup(22,GPIO.IN) //Senzor za detekciju pokreta
while True: //Beskonacna petlja u kojoj semafor non stop radi
GPIO.output(4,GPIO.HIGH) //Upaljeno zeleno svetlo za automobile
GPIO.output(16,GPIO.HIGH) //Upaljeno crveno svetlo za peake
print(Zeleno za kola, crveno za pesake)
brojacZeleno=30 //Brojac za odbrojavanje zelene svetlosti za automobile
while (brojacZeleno>=0): //Sve dok svetli zeleno svetlo za automobile
time.sleep(1) //Uspavljivanje niti na 1 sekundu
brojacZeleno=brojacZeleno-1 //Smanjivanje brojaca za 1 sekundu
if(brojacZeleno>15 and GPIO.input(22)):
//Vie od 15s zelenog svetla za automobile i deketovan je peak
time.sleep(10)
//Uspavljivanje niti na 10 sekundi i skracivanje cekanja od 5s
break
//Ostalo je jo 5s zelenog za automobile, izlazi se iz petlje i pali se treptuce zeleno
else:
//Ostalo je vie od 15s zelenog svetla za automobile i nije detektovan peak
continue
treptacZeleno=5
//Zavrava se zeleno svetlo za automobile i pali treptuce zeleno na 5s
while (treptacZeleno>=0):
//Treptuce zeleno svetlo traje (sledi simulacija trepterenja)
GPIO.output(4,GPIO.LOW) //Ugasi zeleno svetlo za automobile
time.sleep(1) //Sacekaj 1s
GPIO.output(4,GPIO.HIGH) //Upali zeleno svetlo za automobile
time.sleep(1) //Sacekaj 1s
treptacZeleno=treptacZeleno-1 //Smanji vreme treptuceg svetla
GPIO.output(4,GPIO.LOW) //Ugasi zeleno svetlo za automobile
GPIO.output(17,GPIO.HIGH) //Upali uto svetlo
time.sleep(3) //Sacekaj 3s, uto stoji upaljeno
GPIO.output(17,GPIO.LOW) //Ugasi uto svetlo
GPIO.output(27,GPIO.HIGH) //Upali crveno svetlo za automobile
time.sleep(5) //Sacekaj 5s pre nego sto upali zeleno za peake
GPIO.output(16,GPIO.LOW) //Ugasi crveno svetlo za peake
GPIO.output(18,GPIO.HIGH) //Upali zeleno svetlo za peake
print(zeleno za pesake, crveno za kola)
sleep(15) //Sacekaj 15s da peaci produ
trepstacPesak=5 //Pocinje treptujuce zeleno svetlo za peake
while (treptacPesak>=0): //Dok trepti zeleno svetlo za peake
GPIO.output(18,GPIO.LOW) //Ugasi zeleno svetlo
time.sleep(1) //Sacekaj 1s
GPIO.output(18,GPIO.HIGH) //Upali zeleno svetlo
treptacPesak=treptacPesak-1 //Smanji vreme treptuceg svetla
GPIO.output(18,GPIO.LOW) //Zavrilo se zeleno za peake i gasi se zeleno svetlo
GPIO.output(16,GPIO.HIGH) //Upali crveno za peake
time.sleep(5) //Sacekaj 5 sekundi
GPIO.output(27,GPIO.LOW) //Ugasi crveno za automobile
GPIO.output(17,GPIO.HIGH) //Upali zeleno svetlo za automobile
time.sleep(3) //Sacekaj 3 sekunde