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.

Committer:
matej2
Date:
Wed Jul 07 17:30:40 2021 +0000
Revision:
0:e03b8f02a649
inicijalni commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
matej2 0:e03b8f02a649 1 #include "mbed.h"
matej2 0:e03b8f02a649 2 #include "buzzer.h"
matej2 0:e03b8f02a649 3
matej2 0:e03b8f02a649 4 InterruptIn pjesakTipka(D6, PullUp);
matej2 0:e03b8f02a649 5 DigitalOut aCrveno(A0);
matej2 0:e03b8f02a649 6 DigitalOut aZuto(A1);
matej2 0:e03b8f02a649 7 DigitalOut aZeleno(A2);
matej2 0:e03b8f02a649 8 DigitalOut pCrveno(A4);
matej2 0:e03b8f02a649 9 DigitalOut pZeleno(A5);
matej2 0:e03b8f02a649 10 Beep buzzer(D2);
matej2 0:e03b8f02a649 11 Ticker ticker;
matej2 0:e03b8f02a649 12
matej2 0:e03b8f02a649 13 bool pjesakTipkalo = false;
matej2 0:e03b8f02a649 14
matej2 0:e03b8f02a649 15 void kliknutoTipkalo() {
matej2 0:e03b8f02a649 16 pjesakTipkalo = true;
matej2 0:e03b8f02a649 17 }
matej2 0:e03b8f02a649 18
matej2 0:e03b8f02a649 19 void sound() {
matej2 0:e03b8f02a649 20 if(pZeleno == 1) {
matej2 0:e03b8f02a649 21 buzzer.beep(400, 0.5);
matej2 0:e03b8f02a649 22 } else {
matej2 0:e03b8f02a649 23 buzzer.beep(200, 0.5);
matej2 0:e03b8f02a649 24 }
matej2 0:e03b8f02a649 25 }
matej2 0:e03b8f02a649 26
matej2 0:e03b8f02a649 27 void glavniSemafor() {
matej2 0:e03b8f02a649 28 pCrveno = 1;
matej2 0:e03b8f02a649 29 aCrveno = 1;
matej2 0:e03b8f02a649 30 wait(5);
matej2 0:e03b8f02a649 31 aCrveno = 1;
matej2 0:e03b8f02a649 32 aZuto = 1;
matej2 0:e03b8f02a649 33 wait(2);
matej2 0:e03b8f02a649 34 aZuto = 0;
matej2 0:e03b8f02a649 35 aCrveno = 0;
matej2 0:e03b8f02a649 36 aZeleno = 1;
matej2 0:e03b8f02a649 37 wait(5);
matej2 0:e03b8f02a649 38 aZeleno = 0;
matej2 0:e03b8f02a649 39 aCrveno = 1;
matej2 0:e03b8f02a649 40 }
matej2 0:e03b8f02a649 41
matej2 0:e03b8f02a649 42 void sporedniSemafor() {
matej2 0:e03b8f02a649 43 pCrveno = 1;
matej2 0:e03b8f02a649 44 wait(5);
matej2 0:e03b8f02a649 45 pCrveno = 0;
matej2 0:e03b8f02a649 46 pZeleno = 1;
matej2 0:e03b8f02a649 47 wait(5);
matej2 0:e03b8f02a649 48 pZeleno = 0;
matej2 0:e03b8f02a649 49 pCrveno = 1;
matej2 0:e03b8f02a649 50 pjesakTipkalo = false;
matej2 0:e03b8f02a649 51 }
matej2 0:e03b8f02a649 52
matej2 0:e03b8f02a649 53 int main() {
matej2 0:e03b8f02a649 54
matej2 0:e03b8f02a649 55 ticker.attach(&sound, 1.0);
matej2 0:e03b8f02a649 56 pjesakTipka.fall(&kliknutoTipkalo);
matej2 0:e03b8f02a649 57
matej2 0:e03b8f02a649 58 while(true) {
matej2 0:e03b8f02a649 59 if(!pjesakTipkalo) {
matej2 0:e03b8f02a649 60 glavniSemafor();
matej2 0:e03b8f02a649 61 } else {
matej2 0:e03b8f02a649 62 sporedniSemafor();
matej2 0:e03b8f02a649 63 }
matej2 0:e03b8f02a649 64 }
matej2 0:e03b8f02a649 65 }