Funkcioniranje semafora za automobile i pjesake, sa tipkalom i buzzerom.

Dependencies:   mbed buzzer

https://os.mbed.com/media/uploads/matej2/slika_sheme.png

Korištene komponente su: • 5 x LED-ica • 1 x tipkalo • 1x Piezzo buzzer • 1x NUCLEO-F072RB pločica mikroupravljača

Rad se sastoji od LED-ice sa desne strane (crvena, žuta i zelena) koje prikazuju glavni semafor tj. semafor za aute, dok LED-ice sa lijeve strane (crvena i žuta) predstavljaju sporedni semafor, tj. semafor za pješake. Na samom početku svijetli crvena LED-ica i za pješaka i za vozače te potom svijetli crvena i žuta za vozače, a ostaje crvena pješacima te na kraju svijetli zelena autima te crvena i dalje pješacima. Ovaj ciklus se ponavlja sve dok se ne pojavi pješak i stisne tipkalo koje služi kao interupt te se u tom trenutku odvije ciklus za semafor do kraja, ukoliko je bilo crveno bude crveno i žuto pa zeleno, te potom ostaje crveno za automobile, a pali se zeleno za pješake nakon čega se ponovno pješacima pali crveno i ostaje crveno dok netko ponovno ne stisne tipkalo. Tipkalo je spojeno na pin povezan sa pull up otpornikom na mikroupravljaču što znači da je na tom pinu cijelo vrijeme prisutan signal zbog prolaska struje sve dok se ne stisne tipkalo; u trenutku kada se stisne tipkalo dolazi do kratkog spoja te je pin spojen na GND i time dajemo signal mikroupravljaču da je tipkalo stisnuto i počinje završavanje ciklusa semafora za automobile te se poziva ciklus semafora za pješaka. Dokle god nije upaljeno zeleno svjetlo pješacima, buzzer proizvodi jedan zvuk dok u trenutku paljenja zelenog svjetla pješacima buzzer proizvodi drugačiji zvuk čime je omogućeno korištenje semafora i za slijepe osobe.

main.cpp

Committer:
matej2
Date:
2021-07-07
Revision:
0:e03b8f02a649

File content as of revision 0:e03b8f02a649:

#include "mbed.h"
#include "buzzer.h"

InterruptIn pjesakTipka(D6, PullUp);
DigitalOut aCrveno(A0);
DigitalOut aZuto(A1);
DigitalOut aZeleno(A2);
DigitalOut pCrveno(A4);
DigitalOut pZeleno(A5);
Beep buzzer(D2);  
Ticker ticker;

bool pjesakTipkalo = false;  
                                
void kliknutoTipkalo() {  
    pjesakTipkalo = true;
}

void sound() {
    if(pZeleno == 1) {
        buzzer.beep(400, 0.5);
    } else {
        buzzer.beep(200, 0.5);
    }
}

void glavniSemafor() {
    pCrveno = 1;
    aCrveno = 1;
    wait(5);
    aCrveno = 1;
    aZuto = 1;
    wait(2);
    aZuto = 0;
    aCrveno = 0;
    aZeleno = 1;
    wait(5);
    aZeleno = 0;
    aCrveno = 1;
}

void sporedniSemafor() {
    pCrveno = 1;
    wait(5);
    pCrveno = 0;
    pZeleno = 1;
    wait(5);
    pZeleno = 0;
    pCrveno = 1;
    pjesakTipkalo = false;
}
        
int main() {
    
    ticker.attach(&sound, 1.0);  
    pjesakTipka.fall(&kliknutoTipkalo);  
    
    while(true) {
        if(!pjesakTipkalo) {  
            glavniSemafor(); 
        } else {
            sporedniSemafor();
        }
    }
}