Na semaforu 1 koji se nalazi na „glavnoj“ cesti upaljeno je zeleno svjetlo za automobile te crveno za pješake. Na semaforu 2 koji se nalazi na „sporednoj“ cesti upaljeno je crveno svjetlo za automobile te zeleno za pješake. Zamišljeno je da je na „glavnoj“ cesti konstantno upaljeno zeleno svjetlo kako bi bio brži „protok“ vozila, a na „sporednoj“ cesti crveno svjetlo sve dok ne naiđe automobil ili pješak koji želi prijeći cestu.
Dependencies: mbed
main.cpp@4:88f5dd4e476d, 2019-11-28 (annotated)
- Committer:
- tbogdan
- Date:
- Thu Nov 28 09:52:12 2019 +0000
- Revision:
- 4:88f5dd4e476d
- Parent:
- 3:7d80fb2473cc
.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tbogdan | 0:a30d2e391254 | 1 | #include "mbed.h" |
tbogdan | 0:a30d2e391254 | 2 | BusOut semafor1(D7,D6,D5,D4,D3,D2); |
tbogdan | 0:a30d2e391254 | 3 | BusOut semafor2(D12,D11,D10,D9,D8); |
tbogdan | 0:a30d2e391254 | 4 | Timer t; |
tbogdan | 4:88f5dd4e476d | 5 | Timer t_2; |
tbogdan | 0:a30d2e391254 | 6 | Ticker pj; |
tbogdan | 4:88f5dd4e476d | 7 | InterruptIn button(D13); |
tbogdan | 0:a30d2e391254 | 8 | InterruptIn echo(PB_15); |
tbogdan | 0:a30d2e391254 | 9 | DigitalOut trigger(PB_13); |
tbogdan | 4:88f5dd4e476d | 10 | InterruptIn echo_2(D14); |
tbogdan | 4:88f5dd4e476d | 11 | DigitalOut trigger_2(D15); |
tbogdan | 0:a30d2e391254 | 12 | bool gotovo=false; |
tbogdan | 0:a30d2e391254 | 13 | bool pritisnuto=false; |
tbogdan | 0:a30d2e391254 | 14 | void startTimer() |
tbogdan | 0:a30d2e391254 | 15 | { |
tbogdan | 0:a30d2e391254 | 16 | t.start(); |
tbogdan | 0:a30d2e391254 | 17 | } |
tbogdan | 0:a30d2e391254 | 18 | |
tbogdan | 0:a30d2e391254 | 19 | void stopTimer() |
tbogdan | 0:a30d2e391254 | 20 | { |
tbogdan | 0:a30d2e391254 | 21 | t.stop(); |
tbogdan | 0:a30d2e391254 | 22 | } |
tbogdan | 0:a30d2e391254 | 23 | |
tbogdan | 4:88f5dd4e476d | 24 | void startTimer_2() |
tbogdan | 4:88f5dd4e476d | 25 | { |
tbogdan | 4:88f5dd4e476d | 26 | t_2.start(); |
tbogdan | 4:88f5dd4e476d | 27 | } |
tbogdan | 4:88f5dd4e476d | 28 | |
tbogdan | 4:88f5dd4e476d | 29 | void stopTimer_2() |
tbogdan | 4:88f5dd4e476d | 30 | { |
tbogdan | 4:88f5dd4e476d | 31 | t_2.stop(); |
tbogdan | 4:88f5dd4e476d | 32 | } |
tbogdan | 0:a30d2e391254 | 33 | void gumb() |
tbogdan | 0:a30d2e391254 | 34 | { |
tbogdan | 0:a30d2e391254 | 35 | pritisnuto=true; |
tbogdan | 0:a30d2e391254 | 36 | } |
tbogdan | 0:a30d2e391254 | 37 | |
tbogdan | 0:a30d2e391254 | 38 | void pjesaci() |
tbogdan | 0:a30d2e391254 | 39 | { |
tbogdan | 0:a30d2e391254 | 40 | if(pritisnuto==true && gotovo==true) { |
tbogdan | 2:7897e64de2f3 | 41 | semafor2 = 0b10010; //Semafor 2 pali se crveno svijetlo za pješake |
tbogdan | 0:a30d2e391254 | 42 | wait(1); |
tbogdan | 0:a30d2e391254 | 43 | semafor2 = 0b11010; //Semafor 2 pali se žuto svjetlo za aute |
tbogdan | 4:88f5dd4e476d | 44 | wait(3); |
tbogdan | 0:a30d2e391254 | 45 | semafor1 = 0b100010; //Semafor 1 pali se zeleno svjetlo za pješake |
tbogdan | 0:a30d2e391254 | 46 | semafor2 = 0b00110; //Semafor 2 pali se zeleno svjetlo za aute |
tbogdan | 0:a30d2e391254 | 47 | wait(10); |
tbogdan | 0:a30d2e391254 | 48 | semafor1 = 0b100100; //Semafor 1 pali crveno svjetlo za pješake |
tbogdan | 4:88f5dd4e476d | 49 | wait(3); |
tbogdan | 0:a30d2e391254 | 50 | semafor2 = 0b01010; //Semafor 2 pali se žuto svjetlo za aute |
tbogdan | 4:88f5dd4e476d | 51 | wait(3); |
tbogdan | 0:a30d2e391254 | 52 | semafor2 = 0b10010; //Semafor 2 pali se crveno svjetlo za aute |
tbogdan | 4:88f5dd4e476d | 53 | wait(3); |
tbogdan | 0:a30d2e391254 | 54 | semafor1 = 0b110100; //Semafor 1 pali se žuto svjetlo za aute |
tbogdan | 4:88f5dd4e476d | 55 | wait(1); |
tbogdan | 0:a30d2e391254 | 56 | pritisnuto=false; |
tbogdan | 0:a30d2e391254 | 57 | gotovo=false; |
tbogdan | 0:a30d2e391254 | 58 | } |
tbogdan | 0:a30d2e391254 | 59 | } |
tbogdan | 0:a30d2e391254 | 60 | int main() |
tbogdan | 0:a30d2e391254 | 61 | { |
tbogdan | 4:88f5dd4e476d | 62 | button.mode(PullUp); |
tbogdan | 0:a30d2e391254 | 63 | button.fall(&gumb); |
tbogdan | 0:a30d2e391254 | 64 | echo.rise(&startTimer); |
tbogdan | 0:a30d2e391254 | 65 | echo.fall(&stopTimer); |
tbogdan | 4:88f5dd4e476d | 66 | echo_2.rise(&startTimer_2); |
tbogdan | 4:88f5dd4e476d | 67 | echo_2.fall(&stopTimer_2); |
tbogdan | 0:a30d2e391254 | 68 | |
tbogdan | 3:7d80fb2473cc | 69 | pj.attach(&pjesaci,0.5); |
tbogdan | 0:a30d2e391254 | 70 | |
tbogdan | 0:a30d2e391254 | 71 | while(1) { |
tbogdan | 4:88f5dd4e476d | 72 | |
tbogdan | 0:a30d2e391254 | 73 | semafor1 = 0b001100; //Semafor 1 upaljeno zeleno za aute, a crveno za pješake |
tbogdan | 0:a30d2e391254 | 74 | semafor2 = 0b10001; //Semafor 2 upaljeno crveno za aute, a zeleno za pješake |
tbogdan | 4:88f5dd4e476d | 75 | wait (15); |
tbogdan | 3:7d80fb2473cc | 76 | semafor2 = 0b10010; //Semafor 2 pali se crveno svijetlo za pješake |
tbogdan | 4:88f5dd4e476d | 77 | wait(3); |
tbogdan | 3:7d80fb2473cc | 78 | semafor1 = 0b010100; //Semafor 1 pali se žuto svjetlo za aute |
tbogdan | 4:88f5dd4e476d | 79 | wait(3); |
tbogdan | 4:88f5dd4e476d | 80 | semafor1 = 0b100100; //Semafor 1 pali se crveno svjetlo za aute |
tbogdan | 4:88f5dd4e476d | 81 | wait(3); |
tbogdan | 4:88f5dd4e476d | 82 | semafor1 = 0b100101; //Semafor 1 pali se strelica za skretanje u lijevo |
tbogdan | 3:7d80fb2473cc | 83 | wait(5); |
tbogdan | 4:88f5dd4e476d | 84 | semafor1 = 0b100100; //Semafor 1 gasi se strelica za skretanje u lijevo |
tbogdan | 0:a30d2e391254 | 85 | trigger = 1; |
tbogdan | 0:a30d2e391254 | 86 | wait_us(10); |
tbogdan | 0:a30d2e391254 | 87 | trigger = 0; |
tbogdan | 0:a30d2e391254 | 88 | wait(1); |
tbogdan | 0:a30d2e391254 | 89 | float distance = t.read() * 1e6 / 58; |
tbogdan | 0:a30d2e391254 | 90 | t.reset(); |
tbogdan | 4:88f5dd4e476d | 91 | if (distance <= 5) { |
tbogdan | 0:a30d2e391254 | 92 | pritisnuto=true; |
tbogdan | 3:7d80fb2473cc | 93 | gotovo=true; |
tbogdan | 0:a30d2e391254 | 94 | } |
tbogdan | 4:88f5dd4e476d | 95 | trigger_2 = 1; |
tbogdan | 4:88f5dd4e476d | 96 | wait_us(10); |
tbogdan | 4:88f5dd4e476d | 97 | trigger_2 = 0; |
tbogdan | 4:88f5dd4e476d | 98 | wait(1); |
tbogdan | 4:88f5dd4e476d | 99 | float distance_2 = t_2.read() * 1e6 / 58; |
tbogdan | 4:88f5dd4e476d | 100 | t_2.reset(); |
tbogdan | 4:88f5dd4e476d | 101 | if (distance_2 <= 5) { |
tbogdan | 4:88f5dd4e476d | 102 | pritisnuto=true; |
tbogdan | 4:88f5dd4e476d | 103 | gotovo=true; |
tbogdan | 4:88f5dd4e476d | 104 | } |
tbogdan | 4:88f5dd4e476d | 105 | if(pritisnuto==true) { |
tbogdan | 4:88f5dd4e476d | 106 | gotovo=true; |
tbogdan | 4:88f5dd4e476d | 107 | } |
tbogdan | 4:88f5dd4e476d | 108 | semafor1 = 0b100100; //Semafor 1 pali se crveno svjetlo za aute služi da se pričeka još par sekundi da prođu auti koji skreću na strelicu. |
tbogdan | 4:88f5dd4e476d | 109 | wait(1); |
tbogdan | 4:88f5dd4e476d | 110 | semafor1 = 0b110100; |
tbogdan | 4:88f5dd4e476d | 111 | wait(3); |
tbogdan | 0:a30d2e391254 | 112 | } |
tbogdan | 0:a30d2e391254 | 113 | } |