TVZ2020 / Mbed OS Semafor_odbrojavanje
Committer:
ssunara
Date:
Sun May 02 16:25:11 2021 +0000
Revision:
0:691f916fe587
Semafor s odbrojavanjem trajanja signalizacije.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ssunara 0:691f916fe587 1 #include "mbed.h"
ssunara 0:691f916fe587 2 #include "SegDisplay.h"
ssunara 0:691f916fe587 3 InterruptIn button1(PA_5); //Interrupt pin
ssunara 0:691f916fe587 4 InterruptIn button2(PA_6); //Interrupt pin
ssunara 0:691f916fe587 5 Serial pc(USBTX, USBRX); //Serijska komunikacija s računalom
ssunara 0:691f916fe587 6 DigitalOut redLED(PA_10);
ssunara 0:691f916fe587 7 DigitalOut yellowLED(PB_3);
ssunara 0:691f916fe587 8 DigitalOut greenLED(PB_5);
ssunara 0:691f916fe587 9 Ticker blink; //Ticker za blinkanje ledice
ssunara 0:691f916fe587 10 Timer debounce; //Timer za micanje debouncinga
ssunara 0:691f916fe587 11 void toggle(void); //inicijalizacija funkcije
ssunara 0:691f916fe587 12 void toggle2(void); //inicijalizacija funkcije
ssunara 0:691f916fe587 13 int state=1; // inicijalizacija varijable
ssunara 0:691f916fe587 14 int sec=0; // inicijalizacija varijable
ssunara 0:691f916fe587 15
ssunara 0:691f916fe587 16 void yellowBlink()
ssunara 0:691f916fe587 17 {
ssunara 0:691f916fe587 18 yellowLED=!yellowLED;
ssunara 0:691f916fe587 19
ssunara 0:691f916fe587 20 }
ssunara 0:691f916fe587 21
ssunara 0:691f916fe587 22 void odbrojavanje() // Funkcija za odbrojavanje trajanja signalizacije na semaforu
ssunara 0:691f916fe587 23 {
ssunara 0:691f916fe587 24 while (sec>0 && state!=5) {
ssunara 0:691f916fe587 25 Seg1 = SegConvert(sec); // Pozivanje funkcije za ispis na 7 seg. displayu
ssunara 0:691f916fe587 26 wait_us (1000000);
ssunara 0:691f916fe587 27 sec--;
ssunara 0:691f916fe587 28 }
ssunara 0:691f916fe587 29 }
ssunara 0:691f916fe587 30
ssunara 0:691f916fe587 31 void signalizacija(int red, int yellow, int green, int trajanje) // Funckija za signalizaciju na semaforu
ssunara 0:691f916fe587 32 {
ssunara 0:691f916fe587 33 redLED = red;
ssunara 0:691f916fe587 34 yellowLED = yellow;
ssunara 0:691f916fe587 35 greenLED= green;
ssunara 0:691f916fe587 36 sec = trajanje;
ssunara 0:691f916fe587 37 }
ssunara 0:691f916fe587 38
ssunara 0:691f916fe587 39 int main()
ssunara 0:691f916fe587 40 {
ssunara 0:691f916fe587 41 debounce.start();
ssunara 0:691f916fe587 42 SegInit(); // Pozivanje funkcije za inicijalizaciju 7 seg. displaya
ssunara 0:691f916fe587 43 while (true) {
ssunara 0:691f916fe587 44 button1.rise(&toggle); // Interrupt, semafor trenutno nije u funkciji
ssunara 0:691f916fe587 45 button2.rise(&toggle2); // Interrupt, vracanje semafora u funkcionalno stanje
ssunara 0:691f916fe587 46 if(state==1) { // Crveno na semaforu
ssunara 0:691f916fe587 47 pc.printf("Zaustavi se.\n");
ssunara 0:691f916fe587 48 blink.detach();
ssunara 0:691f916fe587 49 signalizacija(1,0,0,9);
ssunara 0:691f916fe587 50 state=2;
ssunara 0:691f916fe587 51 } else if(state==2) { // Prijelaz iz crvenog u zeleno
ssunara 0:691f916fe587 52 pc.printf("Pripremi se za kretanje.\n");
ssunara 0:691f916fe587 53 signalizacija(1,1,0,3);
ssunara 0:691f916fe587 54 state=3;
ssunara 0:691f916fe587 55 } else if(state==3) { // Zeleno na semaforu
ssunara 0:691f916fe587 56 pc.printf("Kreni.\n");
ssunara 0:691f916fe587 57 signalizacija(0,0,1,9);
ssunara 0:691f916fe587 58 state=4;
ssunara 0:691f916fe587 59 } else if(state==4) { // Prijelaz iz zelenog u crveno
ssunara 0:691f916fe587 60 pc.printf("Kreni se zaustavljati.\n");
ssunara 0:691f916fe587 61 signalizacija(0,1,0,3);
ssunara 0:691f916fe587 62 state=1;
ssunara 0:691f916fe587 63 } else if(state==5) { // Semafor izvan funckije
ssunara 0:691f916fe587 64 pc.printf("Semafor izvan funkcije ili prometna nesreća.\n");
ssunara 0:691f916fe587 65 signalizacija(0,0,0,0);
ssunara 0:691f916fe587 66 blink.attach(&yellowBlink, 0.25); // Ticker za blinkanje LED
ssunara 0:691f916fe587 67 state=6;
ssunara 0:691f916fe587 68 Seg1 = SegConvert(10);
ssunara 0:691f916fe587 69 }
ssunara 0:691f916fe587 70 odbrojavanje();
ssunara 0:691f916fe587 71 }
ssunara 0:691f916fe587 72
ssunara 0:691f916fe587 73 }
ssunara 0:691f916fe587 74
ssunara 0:691f916fe587 75 //Interrupt, semafor trenutno nije u funkciji
ssunara 0:691f916fe587 76 void toggle()
ssunara 0:691f916fe587 77 {
ssunara 0:691f916fe587 78 if (debounce.read_ms()>200) { // only allow toggle if debounce timer
ssunara 0:691f916fe587 79 state=5; // has passed 200 ms
ssunara 0:691f916fe587 80 }
ssunara 0:691f916fe587 81 debounce.reset(); // restart timer when the toggle is performed
ssunara 0:691f916fe587 82 }
ssunara 0:691f916fe587 83
ssunara 0:691f916fe587 84 //Interrupt, vracanje semafora u funkcionalno stanje
ssunara 0:691f916fe587 85 void toggle2()
ssunara 0:691f916fe587 86 {
ssunara 0:691f916fe587 87 if (debounce.read_ms()>200) { // only allow toggle if debounce timer
ssunara 0:691f916fe587 88 state=1; // has passed 200 ms
ssunara 0:691f916fe587 89
ssunara 0:691f916fe587 90 }
ssunara 0:691f916fe587 91 debounce.reset(); // restart timer when the toggle is performed
ssunara 0:691f916fe587 92 }