Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:691f916fe587, 2021-05-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |