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

https://os.mbed.com/media/uploads/djukicic/schema.png

Committer:
djukicic
Date:
Sun Feb 21 17:27:16 2021 +0000
Revision:
0:d702e04aa0e3
/

Who changed what in which revision?

UserRevisionLine numberNew 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 }