Na semaforu 1 koji se nalazi na „glavnoj“ cesti upaljeno je zeleno svjetlo za automobile te crveno za pješake. Na semaforu 2 koji se nalazi na „sporednoj“ cesti upaljeno je crveno svjetlo za automobile te zeleno za pješake. Zamišljeno je da je na „glavnoj“ cesti konstantno upaljeno zeleno svjetlo kako bi bio brži „protok“ vozila, a na „sporednoj“ cesti crveno svjetlo sve dok ne naiđe automobil ili pješak koji želi prijeći cestu.

Dependencies:   mbed

main.cpp

Committer:
tbogdan
Date:
2019-11-28
Revision:
4:88f5dd4e476d
Parent:
3:7d80fb2473cc

File content as of revision 4:88f5dd4e476d:

#include "mbed.h"
BusOut semafor1(D7,D6,D5,D4,D3,D2);
BusOut semafor2(D12,D11,D10,D9,D8);
Timer t;
Timer t_2;
Ticker pj;
InterruptIn button(D13);
InterruptIn echo(PB_15);
DigitalOut trigger(PB_13);
InterruptIn echo_2(D14);
DigitalOut trigger_2(D15);
bool gotovo=false;
bool pritisnuto=false;
void startTimer()
{
    t.start();
}

void stopTimer()
{
    t.stop();
}

void startTimer_2()
{
    t_2.start();
}

void stopTimer_2()
{
    t_2.stop();
}
void gumb()
{
    pritisnuto=true;
}

void pjesaci()
{
    if(pritisnuto==true && gotovo==true) {
        semafor2 = 0b10010;         //Semafor 2 pali se crveno svijetlo za pješake
        wait(1);
        semafor2 = 0b11010;         //Semafor 2 pali se žuto svjetlo za aute
        wait(3);
        semafor1 = 0b100010;        //Semafor 1 pali se zeleno svjetlo za pješake
        semafor2 = 0b00110;         //Semafor 2 pali se zeleno svjetlo za aute
        wait(10);
        semafor1 = 0b100100;        //Semafor 1 pali crveno svjetlo za pješake
        wait(3);
        semafor2 = 0b01010;         //Semafor 2 pali se žuto svjetlo za aute
        wait(3);
        semafor2 = 0b10010;         //Semafor 2 pali se crveno svjetlo za aute
        wait(3);
        semafor1 = 0b110100;       //Semafor 1 pali se žuto svjetlo za aute
        wait(1);
        pritisnuto=false;
        gotovo=false;
    }
}
int main()
{
    button.mode(PullUp);
    button.fall(&gumb);
    echo.rise(&startTimer);
    echo.fall(&stopTimer);
    echo_2.rise(&startTimer_2);
    echo_2.fall(&stopTimer_2);

    pj.attach(&pjesaci,0.5);

    while(1) {
        
        semafor1 = 0b001100;        //Semafor 1 upaljeno zeleno za aute, a crveno za pješake
        semafor2 = 0b10001;         //Semafor 2 upaljeno crveno za aute, a zeleno za pješake
        wait (15);                  
        semafor2 = 0b10010;         //Semafor 2 pali se crveno svijetlo za pješake
        wait(3);
        semafor1 = 0b010100;        //Semafor 1 pali se žuto svjetlo za aute
        wait(3);
        semafor1 = 0b100100;        //Semafor 1 pali se crveno svjetlo za aute
        wait(3);
        semafor1 = 0b100101;        //Semafor 1 pali se strelica za skretanje u lijevo
        wait(5);
        semafor1 = 0b100100;        //Semafor 1 gasi se strelica za skretanje u lijevo
        trigger = 1;
        wait_us(10);
        trigger = 0;
        wait(1);
        float distance = t.read() * 1e6 / 58;
        t.reset();
        if (distance <= 5) {
            pritisnuto=true;
            gotovo=true;
        }
        trigger_2 = 1;
        wait_us(10);
        trigger_2 = 0;
        wait(1);
        float distance_2 = t_2.read() * 1e6 / 58;
        t_2.reset();
        if (distance_2 <= 5) {
            pritisnuto=true;
            gotovo=true;
        }
        if(pritisnuto==true) {
            gotovo=true;
        }
        semafor1 = 0b100100;        //Semafor 1 pali se crveno svjetlo za aute služi da se pričeka još par sekundi da prođu auti koji skreću na strelicu.
        wait(1);
        semafor1 = 0b110100;
        wait(3);
    }
}