Karanovic_Semafor

Dependencies:   mbed LED

https://os.mbed.com/media/uploads/akaranovi/20201201_212425.jpg

Program se sastoji od: -5x LED-ice od kojih svaka prikazuje jedno stanje na semaforu -1x Integrirano tipkalo za Hardverski interrupt -1x NUCLEO-F072RB pločica mikroupravljača

Program simulira rad semafora za automobile i pješake. Automobilima je zeleno svijetlo 15 sekundi nakon čega se pali zeleno svijetlo za pješake koje traje 7 sekundi. U slučaju pritiska na hardverski interrupt "blinka" žuto svijetlo 10 sekundi nakon čega program nastavlja sa normalnim radom.

main.cpp

Committer:
akaranovi
Date:
2020-11-29
Revision:
1:f40a898ee10e
Parent:
0:c3966e70a28e

File content as of revision 1:f40a898ee10e:

#include "mbed.h"
#include "led.h"
Serial pc(USBTX, USBRX);
LED led1(A0);
LED led2(D2);
LED led3(D3);
LED led4(D4);
LED led5(D5);
InterruptIn button(USER_BUTTON);
Timer automobil;
Timer pjesak;
Timer flipper;
Timer zuta;
Timer debounce;
//Funkcija hardverskog interrupta
void flip()
{
    if(debounce.read_ms()>200) {
        led1.status(0);
        led3.status(0);
        led4.status(0);
        led5.status(0);
        int i;
        for(i=0; i<20; i++) {
            led2.flip();
            wait(0.5);
        }
    }
    debounce.reset();
}

int main()
{
    pjesak.reset();
    automobil.reset();
    debounce.start();
    button.rise(&flip);

    while(1) {

//Početno stanje LED-ica
        led1.status(0);
        led2.status(0);
        led3.status(1);
        led4.status(1);
        led5.status(0);

//Nakon 12.5 sekundi ugasi zeleno svijetlo za automobile
        automobil.start();
        if (automobil.read() > 12.5) {
            led3.flip();
            
//Nakon 13 sekundi upali žuto svijetlo za automobile            
        }
        if (automobil.read() > 13) {
            led2.flip();
//Nakon 15 sekundi upali crveno za automobile i zeleno za pješake
        }
        if(automobil.read()>15) {
            automobil.stop();
            led1.flip();
            led2.flip();
            led4.flip();
            led5.flip();
            pjesak.reset();
            pjesak.start();
            while(pjesak.read()<7) {
                if (pjesak.read() > 5)
                    led2.flip();
            }
            automobil.reset();
            pjesak.stop();
        }

        led1.flip();
        led2.flip();
    }

    return 0;
}