Konstrukcijski zadatak semafor

Kod

  1. include "mbed.h"

Definiranje izlaza za 7-segmentni display DigitalOut e(D8); DigitalOut f(D9); DigitalOut g(D10); DigitalOut dt(D11); DigitalOut d(D12); DigitalOut c(D13); DigitalOut b(D14); DigitalOut a(D15);

Definiranje izlaza za semafor DigitalOut GreenLed(D5); DigitalOut YellowLed(D6); DigitalOut RedLed(D7);

Definiranje ulaza za button i vezanje hardwerskog interrupta za pin D4 InterruptIn Button(D4);

Funkcija koja prima simbol koji želimo prikazati i preko switch/case-a ispisuje na 7-segmentni void displaySevenSeg(char symbol){ switch(symbol){ case '0': a = 1; b = 1; c = 1; d = 1; e = 1; f = 1; g = 0; dt = 0; break; case '1': a = 0; b = 1; c = 1; d = 0; e = 0; f = 0; g = 0; dt = 0; break; case '2': a = 1; b = 1; c = 0; d = 1; e = 1; f = 0; g = 1; dt = 0; break; case '3': a = 1; b = 1; c = 1; d = 1; e = 0; f = 0; g = 1; dt = 0; break; case '4': a = 0; b = 1; c = 1; d = 0; e = 0; f = 1; g = 1; dt = 0; break; case '5': a = 1; b = 0; c = 1; d = 1; e = 0; f = 1; g = 1; dt = 0; break; case '6': a = 1; b = 0; c = 1; d = 1; e = 1; f = 1; g = 1; dt = 0; break; case '7': a = 1; b = 1; c = 1; d = 0; e = 0; f = 0; g = 0; dt = 0; break; case '8': a = 1; b = 1; c = 1; d = 1; e = 1; f = 1; g = 1; dt = 0; break; case '9': a = 1; b = 1; c = 1; d = 1; e = 0; f = 1; g = 1; dt = 0; break; } }

funkcija za paljenje zelenog svijetla na semaforu void TurnGreen(){ wait(0.2); RedLed = 0; YellowLed = 1; wait(2); YellowLed = 0; GreenLed = 1; wait(3); }

Funkcija za paljenje crvenog svijetla na semaforu void TurnRed(){ wait(0.2); GreenLed = 0; YellowLed = 1; wait(2); YellowLed = 0; RedLed = 1; wait(6); TurnGreen(); }

Funkcija za odbrojavanje void CountdownSequence(){ displaySevenSeg('9'); wait(1); displaySevenSeg('8'); wait(1); displaySevenSeg('7'); wait(1); displaySevenSeg('6'); wait(1); displaySevenSeg('5'); wait(1); displaySevenSeg('4'); wait(1); displaySevenSeg('3'); wait(1); displaySevenSeg('2'); wait(1); displaySevenSeg('1'); wait(1); displaySevenSeg('0'); wait(1); TurnRed(); }

int main() { Button.rise(&CountdownSequence); ova linija koda veže pritiskivanje gumba s funkcijom za odbrojavanje TurnGreen(); palimo zeleno svijetlo kao početno stanje

while (true) { WFI(); ova linija koda stavlja procesor u sleep mode i čeka da se pojavi interrupt ( WFI = wait for interrupt ) flow programa zamišljen je kao konačni automat (finite state machine) početno stanje je upaljeno zeleno svijetlo, da bi izašli iz početnog stanja moramo pritisnuti gumb pritiskom gumba ulazimo u stanje odbrojavanja ( funkcija CountdownSequence()), pri kraju izvršavanja poziva se funkcija TurnRed() čime ulazimo u slijedeće stanje Funkcija TurnRed obavlja sekvencu paljenja crvenog svijetla i nakon 6 sekundi crvenog poziva funkciju Turn } }


All wikipages