![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Semafor sa 4 moda rada, brojačem i zvučnim signalom za pješake
Dependencies: BluetoothSerial SeeedShieldBot mbed
Diff: main.cpp
- Revision:
- 0:f3ad924cad2e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Sep 07 13:35:44 2022 +0000 @@ -0,0 +1,485 @@ +#include "mbed.h" + +BusOut zaslon(D11,D10,D9,D8,D7,D12,D13); + +DigitalOut crveno(D4); +DigitalOut zuto(D3); +DigitalOut zeleno(D2); +DigitalIn prekidac4(D14); +DigitalIn prekidac3(D15); + +PwmOut zvucniSignal(A3); + +InterruptIn promjenaNacinaRada(USER_BUTTON); +InterruptIn tipkaZaPjesakeNocniNacinRada(D5); + +Timeout upaliCrveno; +Timeout upaliZuto; +Timeout upaliZeleno; +Timeout ugasiCrveno; +Timeout ugasiZuto; +Timeout ugasiZeleno; +Timeout ugasiZvuk; +Timeout promjenaZvukaZaPjesake; +Ticker upaliZvuk; +Ticker paliZaslon; +Ticker blinkZuto; + +int i; +int nacinRada=3; +int zabraniPrvuSmjenuDnevnogNacina=0; +int zabraniDruguSmjenuDnevnogNacina=1; +int zabraniNocniRad=0; +int zabraniBlinkZuto=0; +int trenutniBrojNaZaslonu=0; +int smjenaDnevnogNacina=0; +int ponoviPetlju; +int zabraniPrekid=0; +int BR0=0x3F; +int BR1=0x06; +int BR2=0x5B; +int BR3=0x4F; +int BR4=0x66; +int BR5=0x6D; +int BR6=0x7D; +int BR7=0x07; +int BR8=0x7F; +int BR9=0x6F; + +char brojevi[10] = {BR0, BR1, BR2, BR3, BR4, BR5, BR6, BR7, BR8,BR9}; + + + +void paliOdbrojavanjeNaZaslonu(){ + + zaslon=brojevi[trenutniBrojNaZaslonu]; + + if(trenutniBrojNaZaslonu==0){ + zaslon=0x0; + paliZaslon.detach(); + + } + + trenutniBrojNaZaslonu=trenutniBrojNaZaslonu-1; + +} + + + +void gasiZvuk(){ + + zvucniSignal=0; + +} + + + +void paliZvuk(){ + + zvucniSignal=0.5; + ugasiZvuk.attach(&gasiZvuk,0.05); + +} + + + +void upaliCrvenoPjesacima(){ + + upaliZvuk.detach(); + zvucniSignal.period(0.004); + upaliZvuk.attach(&paliZvuk,1); + +} + + + +void upaliZelenoPjesacima(){ + + upaliZvuk.detach(); + zvucniSignal.period(0.0004); + upaliZvuk.attach(&paliZvuk,0.2); + promjenaZvukaZaPjesake.detach(); + promjenaZvukaZaPjesake.attach(&upaliCrvenoPjesacima,6); + +} + + + +void UpaliCrvenoDnevniNacinRada(){ + + promjenaZvukaZaPjesake.attach(&upaliZelenoPjesacima,1); + crveno=1; + zabraniPrvuSmjenuDnevnogNacina=0; + +} + + + +void UpaliZutoDnevniNacinRada(){ + + zuto=1; + + if(smjenaDnevnogNacina==2){ + paliZaslon.attach(&paliOdbrojavanjeNaZaslonu,1); + + } + + +} + + + +void UpaliZelenoDnevniNacinRada(){ + + zeleno=1; + zabraniDruguSmjenuDnevnogNacina=0; + +} + + + +void UgasiCrvenoDnevniNacinRada(){ + + crveno=0; + +} + + + +void UgasiZutoDnevniNacinRada(){ + + zuto=0; + +} + + + +void UgasiZelenoDnevniNacinRada(){ + + zeleno=0; + +} + + + +void UpaliZutoNocniNacinRada(){ + + zuto=1; + +} + + + +void UpaliZelenoNocniNacinRada(){ + + zeleno=1; + zabraniPrekid=0; + +} + + + +void UgasiCrvenoNocniNacinRada(){ + + crveno=0; + +} + + + +void UgasiZutoNocniNacinRada(){ + + zuto=0; + +} + + + +void UgasiZelenoNocniNacinRada(){ + + zeleno=0; + +} + + + +void nastaviPrekidNocniNacinrada(){ + + upaliZuto.attach(&UpaliZutoNocniNacinRada,8); + ugasiZuto.attach(&UgasiZutoNocniNacinRada,9); + ugasiCrveno.attach(&UgasiCrvenoNocniNacinRada,9); + upaliZeleno.attach(&UpaliZelenoNocniNacinRada,9); + +} + + + +void UpaliCrvenoNocniNacinRada(){ + + crveno=1; + promjenaZvukaZaPjesake.attach(&upaliZelenoPjesacima,1); + nastaviPrekidNocniNacinrada(); + +} + + + +void ugasiBlinkZuto(){ + + zuto=0; + +} + + + +void upaliBlinkZuto(){ + + zuto=1; + ugasiZuto.attach(&ugasiBlinkZuto,1); + +} + + + +void upaliZelenoZaPjesakeNocniNacinRada(){ + + if(zabraniPrekid==0){ + + if(nacinRada==1){ + + zabraniPrekid=1; + trenutniBrojNaZaslonu=6; + paliZaslon.attach(&paliOdbrojavanjeNaZaslonu,1); + ugasiZeleno.attach(&UgasiZelenoNocniNacinRada,5); + upaliZuto.attach(&UpaliZutoNocniNacinRada,5); + ugasiZuto.attach(&UgasiZutoNocniNacinRada,6); + upaliCrveno.attach(&UpaliCrvenoNocniNacinRada,6); + + } + + } + +} + + + +void dnevniNacinRada() +{ + + if(zabraniPrvuSmjenuDnevnogNacina==0){ + smjenaDnevnogNacina=1; + crveno=1; + zuto=0; + zeleno=0; + upaliZuto.attach(&UpaliZutoDnevniNacinRada,8); + ugasiCrveno.attach(&UgasiCrvenoDnevniNacinRada,9); + ugasiZuto.attach(&UgasiZutoDnevniNacinRada,9); + upaliZeleno.attach(&UpaliZelenoDnevniNacinRada,9); + zabraniPrvuSmjenuDnevnogNacina=1; + + } + + if(zabraniDruguSmjenuDnevnogNacina==0){ + smjenaDnevnogNacina=2; + ugasiZeleno.attach(&UgasiZelenoDnevniNacinRada,6); + upaliZuto.attach(&UpaliZutoDnevniNacinRada,6); + ugasiZuto.attach(&UgasiZutoDnevniNacinRada,7); + upaliCrveno.attach(&UpaliCrvenoDnevniNacinRada,7); + trenutniBrojNaZaslonu=9; + zabraniDruguSmjenuDnevnogNacina=1; + + } + +} + + + +void nocniNacinRada(){ + + if(zabraniNocniRad==0){ + + crveno=0; + zuto=0; + zeleno=1; + upaliCrvenoPjesacima(); + zabraniNocniRad=1; + + } + +} + + + +void nacinRadaBlinkZuto(){ + + if(zabraniBlinkZuto==0){ + crveno=0; + zeleno=0; + blinkZuto.attach(&upaliBlinkZuto,2); + zabraniBlinkZuto=1; + + } + +} + + + +void NacinRadaUgasen(){ + + crveno=0; + zuto=0; + zeleno=0; + zvucniSignal=0; + +} + + + +void promjeni(){ + + upaliCrveno.detach(); + upaliZuto.detach(); + upaliZeleno.detach(); + ugasiCrveno.detach(); + ugasiZuto.detach(); + ugasiZeleno.detach(); + ugasiZvuk.detach(); + promjenaZvukaZaPjesake.detach(); + upaliZvuk.detach(); + paliZaslon.detach(); + blinkZuto.detach(); + + zvucniSignal.period(0.0015); + zvucniSignal=0.5; + zaslon=0x0; + + + crveno=1; + zuto=1; + zeleno=1; + wait(1); + crveno=0; + zuto=0; + zeleno=0; + wait(1); + crveno=1; + zuto=1; + zeleno=1; + wait(1); + crveno=0; + zuto=0; + zeleno=0; + + zvucniSignal=0; + zvucniSignal.period(0.02); + + zabraniPrvuSmjenuDnevnogNacina=0; + zabraniNocniRad=0; + zabraniBlinkZuto=0; + + for(ponoviPetlju=10;ponoviPetlju>0;ponoviPetlju--){ + + if((prekidac4==0) && (prekidac3==0)){ + + nacinRada=0; + + } + if((prekidac4==1) && (prekidac3==0)){ + + nacinRada=1; + + } + if((prekidac4==0) && (prekidac3==1)){ + + + nacinRada=2; + + } + if((prekidac4==1) && (prekidac3==1)){ + + nacinRada=3; + + } + + } + +} + + + +int main(){ + + promjenaNacinaRada.fall(&promjeni); + tipkaZaPjesakeNocniNacinRada.rise(&upaliZelenoZaPjesakeNocniNacinRada); + crveno=0; + zuto=0; + zeleno=0; + zvucniSignal.period(0.0015); + zvucniSignal=0.5; + + + for(i=0;i<10;i++){ + + crveno=1; + wait(0.15); + crveno=0; + zuto=1; + wait(0.15); + zuto=0; + zeleno=1; + wait(0.15); + zeleno=0; + + } + + zvucniSignal=0; + + while(1){ + + do{ + if(nacinRada==0){ + + dnevniNacinRada(); + + } + + } + + while(nacinRada==0); + + do{ + if(nacinRada==1){ + + nocniNacinRada(); + + } + + } + + while(nacinRada==1); + + do{ + if(nacinRada==2){ + + nacinRadaBlinkZuto(); + + } + + } + + while(nacinRada==2); + + do{ + if(nacinRada==3){ + + NacinRadaUgasen(); + + } + + } + + while(nacinRada==3); + + } + +} \ No newline at end of file