Semafor sa 4 moda rada, brojačem i zvučnim signalom za pješake
Dependencies: BluetoothSerial SeeedShieldBot mbed
main.cpp
- Committer:
- Ante16
- Date:
- 20 months ago
- Revision:
- 0:f3ad924cad2e
File content as of revision 0:f3ad924cad2e:
#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); } }