![](/media/cache/group/tvz-logo.png.50x50_q85.png)
Program se sastoji od 6 LED od kojih 5 LED prikazuju stanje na semaforima (automobili i pješaci). U pozadini se nalazi 1 LED koja govori da se program izvršava ispravno. Buzzer signalizira siguran prolaz pješaka. Integrirano tipkalo služi za HW interrupt gdje se prekida izvodenje programa i pali se treptajuće žuto svjetlo. U radu se koristi pločica NUCLEO-F072RB.
Dependencies: mbed LED SeeedShieldBot BluetoothSerial buzzer
main.cpp@1:add66fe63d7c, 2021-02-21 (annotated)
- Committer:
- djukicic
- Date:
- Sun Feb 21 17:36:53 2021 +0000
- Revision:
- 1:add66fe63d7c
- Parent:
- 0:d702e04aa0e3
/
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
djukicic | 0:d702e04aa0e3 | 1 | #include "mbed.h" |
djukicic | 0:d702e04aa0e3 | 2 | #include "led.h" |
djukicic | 0:d702e04aa0e3 | 3 | #include "buzzer.h" |
djukicic | 0:d702e04aa0e3 | 4 | |
djukicic | 0:d702e04aa0e3 | 5 | Beep buzzer(D7); |
djukicic | 0:d702e04aa0e3 | 6 | |
djukicic | 0:d702e04aa0e3 | 7 | LED led1(D4); // crvena auto |
djukicic | 0:d702e04aa0e3 | 8 | LED led2(D3); // zuta |
djukicic | 0:d702e04aa0e3 | 9 | LED led3(D2); // zelena auto |
djukicic | 0:d702e04aa0e3 | 10 | LED led4(D6); // crvena pjesak |
djukicic | 0:d702e04aa0e3 | 11 | LED led5(D5); // zelena pjesak |
djukicic | 0:d702e04aa0e3 | 12 | LED led6(D8); // plava |
djukicic | 0:d702e04aa0e3 | 13 | Ticker blu; |
djukicic | 0:d702e04aa0e3 | 14 | InterruptIn button(USER_BUTTON); |
djukicic | 0:d702e04aa0e3 | 15 | Timer automobil; |
djukicic | 0:d702e04aa0e3 | 16 | Timer pjesak; |
djukicic | 0:d702e04aa0e3 | 17 | Timer flipper; |
djukicic | 0:d702e04aa0e3 | 18 | Timer zuta; |
djukicic | 0:d702e04aa0e3 | 19 | Timer debounce; |
djukicic | 0:d702e04aa0e3 | 20 | |
djukicic | 0:d702e04aa0e3 | 21 | float hi=440.00; |
djukicic | 0:d702e04aa0e3 | 22 | float lo=1; |
djukicic | 0:d702e04aa0e3 | 23 | int b; |
djukicic | 0:d702e04aa0e3 | 24 | float freq[28] = {hi,lo,hi,lo,hi,lo,hi,lo,hi,lo,hi,lo,hi,lo,hi,lo,hi,lo,hi,lo,hi,lo,hi,lo,hi,lo,hi,lo}; |
djukicic | 0:d702e04aa0e3 | 25 | float fast_tempo[28] = {4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}; |
djukicic | 0:d702e04aa0e3 | 26 | float slow_tempo[28] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; |
djukicic | 0:d702e04aa0e3 | 27 | |
djukicic | 0:d702e04aa0e3 | 28 | //Funkcija hardverskog interrupta |
djukicic | 0:d702e04aa0e3 | 29 | |
djukicic | 0:d702e04aa0e3 | 30 | void flip() |
djukicic | 0:d702e04aa0e3 | 31 | { |
djukicic | 0:d702e04aa0e3 | 32 | if(debounce.read_ms()>200) { |
djukicic | 0:d702e04aa0e3 | 33 | automobil.stop(); |
djukicic | 0:d702e04aa0e3 | 34 | pjesak.stop(); |
djukicic | 0:d702e04aa0e3 | 35 | led1.status(0); |
djukicic | 0:d702e04aa0e3 | 36 | led3.status(0); |
djukicic | 0:d702e04aa0e3 | 37 | led4.status(0); |
djukicic | 0:d702e04aa0e3 | 38 | led5.status(0); |
djukicic | 0:d702e04aa0e3 | 39 | int i; |
djukicic | 0:d702e04aa0e3 | 40 | for(i=0; i<20; i++) { |
djukicic | 0:d702e04aa0e3 | 41 | led2.flip(); |
djukicic | 0:d702e04aa0e3 | 42 | wait(0.5); |
djukicic | 0:d702e04aa0e3 | 43 | } |
djukicic | 0:d702e04aa0e3 | 44 | } |
djukicic | 0:d702e04aa0e3 | 45 | |
djukicic | 0:d702e04aa0e3 | 46 | if(automobil.read()>15 && pjesak.read_ms()>200) |
djukicic | 0:d702e04aa0e3 | 47 | { |
djukicic | 0:d702e04aa0e3 | 48 | led1.status(1); |
djukicic | 0:d702e04aa0e3 | 49 | led2.status(0); |
djukicic | 0:d702e04aa0e3 | 50 | led3.status(0); |
djukicic | 0:d702e04aa0e3 | 51 | led4.status(0); |
djukicic | 0:d702e04aa0e3 | 52 | led5.status(1); |
djukicic | 0:d702e04aa0e3 | 53 | } |
djukicic | 0:d702e04aa0e3 | 54 | automobil.start(); |
djukicic | 0:d702e04aa0e3 | 55 | pjesak.start(); |
djukicic | 0:d702e04aa0e3 | 56 | debounce.reset(); |
djukicic | 0:d702e04aa0e3 | 57 | } |
djukicic | 0:d702e04aa0e3 | 58 | |
djukicic | 0:d702e04aa0e3 | 59 | void blu1() |
djukicic | 0:d702e04aa0e3 | 60 | { |
djukicic | 0:d702e04aa0e3 | 61 | led6.flip(); |
djukicic | 0:d702e04aa0e3 | 62 | } |
djukicic | 0:d702e04aa0e3 | 63 | |
djukicic | 0:d702e04aa0e3 | 64 | |
djukicic | 0:d702e04aa0e3 | 65 | int main() |
djukicic | 0:d702e04aa0e3 | 66 | { |
djukicic | 0:d702e04aa0e3 | 67 | pjesak.reset(); |
djukicic | 0:d702e04aa0e3 | 68 | automobil.reset(); |
djukicic | 0:d702e04aa0e3 | 69 | debounce.start(); |
djukicic | 0:d702e04aa0e3 | 70 | button.rise(&flip); |
djukicic | 0:d702e04aa0e3 | 71 | blu.attach(&blu1,0.1); |
djukicic | 0:d702e04aa0e3 | 72 | |
djukicic | 0:d702e04aa0e3 | 73 | while(1) { |
djukicic | 0:d702e04aa0e3 | 74 | |
djukicic | 0:d702e04aa0e3 | 75 | //Početno stanje LED-ica |
djukicic | 0:d702e04aa0e3 | 76 | led1.status(0); |
djukicic | 0:d702e04aa0e3 | 77 | led2.status(0); |
djukicic | 0:d702e04aa0e3 | 78 | led3.status(1); |
djukicic | 0:d702e04aa0e3 | 79 | led4.status(1); |
djukicic | 0:d702e04aa0e3 | 80 | led5.status(0); |
djukicic | 0:d702e04aa0e3 | 81 | |
djukicic | 0:d702e04aa0e3 | 82 | buzzer.beep(freq[b], slow_tempo[b]); |
djukicic | 0:d702e04aa0e3 | 83 | b++; |
djukicic | 0:d702e04aa0e3 | 84 | |
djukicic | 0:d702e04aa0e3 | 85 | automobil.start(); |
djukicic | 0:d702e04aa0e3 | 86 | |
djukicic | 0:d702e04aa0e3 | 87 | //Nakon 13 sekundi upali žuto svjetlo za automobile i gasi se zeleno |
djukicic | 0:d702e04aa0e3 | 88 | if (automobil.read() > 13) { |
djukicic | 0:d702e04aa0e3 | 89 | led3.flip(); |
djukicic | 0:d702e04aa0e3 | 90 | led2.flip(); |
djukicic | 0:d702e04aa0e3 | 91 | } |
djukicic | 0:d702e04aa0e3 | 92 | wait(1/slow_tempo[b]); |
djukicic | 0:d702e04aa0e3 | 93 | |
djukicic | 0:d702e04aa0e3 | 94 | //Nakon 15 sekundi upali crveno za automobile i zeleno za pješake |
djukicic | 0:d702e04aa0e3 | 95 | |
djukicic | 0:d702e04aa0e3 | 96 | if(automobil.read()>15) { |
djukicic | 0:d702e04aa0e3 | 97 | automobil.stop(); |
djukicic | 0:d702e04aa0e3 | 98 | led1.flip(); |
djukicic | 0:d702e04aa0e3 | 99 | led2.flip(); |
djukicic | 0:d702e04aa0e3 | 100 | led4.flip(); |
djukicic | 0:d702e04aa0e3 | 101 | led5.flip(); |
djukicic | 0:d702e04aa0e3 | 102 | pjesak.reset(); |
djukicic | 0:d702e04aa0e3 | 103 | pjesak.start(); |
djukicic | 0:d702e04aa0e3 | 104 | while(pjesak.read()<8) { |
djukicic | 0:d702e04aa0e3 | 105 | if (pjesak.read() > 6) |
djukicic | 0:d702e04aa0e3 | 106 | led2.flip(); |
djukicic | 0:d702e04aa0e3 | 107 | for(b=0; b<8; b++) { |
djukicic | 0:d702e04aa0e3 | 108 | buzzer.beep(freq[b], fast_tempo[b]); |
djukicic | 0:d702e04aa0e3 | 109 | wait(1/fast_tempo[b]); |
djukicic | 0:d702e04aa0e3 | 110 | } |
djukicic | 0:d702e04aa0e3 | 111 | } |
djukicic | 0:d702e04aa0e3 | 112 | automobil.reset(); |
djukicic | 0:d702e04aa0e3 | 113 | pjesak.stop(); |
djukicic | 0:d702e04aa0e3 | 114 | b=0; |
djukicic | 0:d702e04aa0e3 | 115 | } |
djukicic | 0:d702e04aa0e3 | 116 | } |
djukicic | 0:d702e04aa0e3 | 117 | return 0; |
djukicic | 0:d702e04aa0e3 | 118 | } |