Karanovic_Semafor

Dependencies:   mbed LED

https://os.mbed.com/media/uploads/akaranovi/20201201_212425.jpg

Program se sastoji od: -5x LED-ice od kojih svaka prikazuje jedno stanje na semaforu -1x Integrirano tipkalo za Hardverski interrupt -1x NUCLEO-F072RB pločica mikroupravljača

Program simulira rad semafora za automobile i pješake. Automobilima je zeleno svijetlo 15 sekundi nakon čega se pali zeleno svijetlo za pješake koje traje 7 sekundi. U slučaju pritiska na hardverski interrupt "blinka" žuto svijetlo 10 sekundi nakon čega program nastavlja sa normalnim radom.

Committer:
akaranovi
Date:
Sun Nov 29 12:09:11 2020 +0000
Revision:
0:c3966e70a28e
OK

Who changed what in which revision?

UserRevisionLine numberNew contents of line
akaranovi 0:c3966e70a28e 1 #include "mbed.h"
akaranovi 0:c3966e70a28e 2 #include "led.h"
akaranovi 0:c3966e70a28e 3 Serial pc(USBTX, USBRX);
akaranovi 0:c3966e70a28e 4 LED led1(A0);
akaranovi 0:c3966e70a28e 5 LED led2(D2);
akaranovi 0:c3966e70a28e 6 LED led3(D3);
akaranovi 0:c3966e70a28e 7 LED led4(D4);
akaranovi 0:c3966e70a28e 8 LED led5(D5);
akaranovi 0:c3966e70a28e 9 InterruptIn button(USER_BUTTON);
akaranovi 0:c3966e70a28e 10 Timer automobil;
akaranovi 0:c3966e70a28e 11 Timer pjesak;
akaranovi 0:c3966e70a28e 12 Timer flipper;
akaranovi 0:c3966e70a28e 13 Timer zuta;
akaranovi 0:c3966e70a28e 14 Timer debounce;
akaranovi 0:c3966e70a28e 15 //Funkcija hardverskog interrupta
akaranovi 0:c3966e70a28e 16 void flip()
akaranovi 0:c3966e70a28e 17 {
akaranovi 0:c3966e70a28e 18 if(debounce.read_ms()>200) {
akaranovi 0:c3966e70a28e 19 led1.status(0);
akaranovi 0:c3966e70a28e 20 led3.status(0);
akaranovi 0:c3966e70a28e 21 led4.status(0);
akaranovi 0:c3966e70a28e 22 led5.status(0);
akaranovi 0:c3966e70a28e 23 int i;
akaranovi 0:c3966e70a28e 24 for(i=0; i<20; i++) {
akaranovi 0:c3966e70a28e 25 led2.flip();
akaranovi 0:c3966e70a28e 26 wait(0.5);
akaranovi 0:c3966e70a28e 27 }
akaranovi 0:c3966e70a28e 28 }
akaranovi 0:c3966e70a28e 29 debounce.reset();
akaranovi 0:c3966e70a28e 30 }
akaranovi 0:c3966e70a28e 31
akaranovi 0:c3966e70a28e 32 int main()
akaranovi 0:c3966e70a28e 33 {
akaranovi 0:c3966e70a28e 34 pjesak.reset();
akaranovi 0:c3966e70a28e 35 automobil.reset();
akaranovi 0:c3966e70a28e 36 debounce.start();
akaranovi 0:c3966e70a28e 37 button.rise(&flip);
akaranovi 0:c3966e70a28e 38
akaranovi 0:c3966e70a28e 39 while(1) {
akaranovi 0:c3966e70a28e 40
akaranovi 0:c3966e70a28e 41 //Početno stanje LED-ica
akaranovi 0:c3966e70a28e 42 led1.status(0);
akaranovi 0:c3966e70a28e 43 led2.status(0);
akaranovi 0:c3966e70a28e 44 led3.status(1);
akaranovi 0:c3966e70a28e 45 led4.status(1);
akaranovi 0:c3966e70a28e 46 led5.status(0);
akaranovi 0:c3966e70a28e 47
akaranovi 0:c3966e70a28e 48 //Nakon 12.5 sekundi ugasi zeleno svijetlo za automobile
akaranovi 0:c3966e70a28e 49 automobil.start();
akaranovi 0:c3966e70a28e 50 if (automobil.read() > 12.5) {
akaranovi 0:c3966e70a28e 51 led3.flip();
akaranovi 0:c3966e70a28e 52
akaranovi 0:c3966e70a28e 53 //Nakon 13 sekundi upali žuto svijetlo za automobile
akaranovi 0:c3966e70a28e 54 }
akaranovi 0:c3966e70a28e 55 if (automobil.read() > 13) {
akaranovi 0:c3966e70a28e 56 led2.flip();
akaranovi 0:c3966e70a28e 57 //Nakon 15 sekundi upali crveno za automobile i zeleno za pješake
akaranovi 0:c3966e70a28e 58 }
akaranovi 0:c3966e70a28e 59 if(automobil.read()>15) {
akaranovi 0:c3966e70a28e 60 automobil.stop();
akaranovi 0:c3966e70a28e 61 led1.flip();
akaranovi 0:c3966e70a28e 62 led2.flip();
akaranovi 0:c3966e70a28e 63 led4.flip();
akaranovi 0:c3966e70a28e 64 led5.flip();
akaranovi 0:c3966e70a28e 65 pjesak.reset();
akaranovi 0:c3966e70a28e 66 pjesak.start();
akaranovi 0:c3966e70a28e 67 while(pjesak.read()<7) {
akaranovi 0:c3966e70a28e 68 if (pjesak.read() > 5)
akaranovi 0:c3966e70a28e 69 led2.flip();
akaranovi 0:c3966e70a28e 70 }
akaranovi 0:c3966e70a28e 71 automobil.reset();
akaranovi 0:c3966e70a28e 72 pjesak.stop();
akaranovi 0:c3966e70a28e 73 }
akaranovi 0:c3966e70a28e 74
akaranovi 0:c3966e70a28e 75 led1.flip();
akaranovi 0:c3966e70a28e 76 led2.flip();
akaranovi 0:c3966e70a28e 77 }
akaranovi 0:c3966e70a28e 78
akaranovi 0:c3966e70a28e 79 return 0;
akaranovi 0:c3966e70a28e 80 }