![](/media/cache/group/tvz-logo.png.50x50_q85.png)
Konstrukcijski rad
Dependencies: mbed TrafficFlash TrafficLight2 TrafficLight1
Sklop simulira rad semofora jednostavnog križanja sa integriranim: • Vremenskim brojačima trajanja aktivnog zelenog signalnog svjetla • Blinkajućim zelenim svjetlom kao upozorenje na skoro paljenje žutog signalnog svjetla • Tipkalom koje služi za pješake (naizmjenična funkcija, koristi se jedno za oba semofora) • Petljama koje detektiraju vozilo ispred semafora Sklop se sastaji: • Mikroupravljač STM32F407VTG6 - 1 kom • 7-segment LED display - 2 kom • LE diode 5mm - 6 kom • Tipkalo - 1 kom • Otpornik 1/4W, 400 ohm - 6 kom • DIP SW, 4 kontakta -1 kom
Funkcionalni opis: Signalizacija LE diodama: • Prikaz semofora – svaki semofor ostvaren pomoću tri LED, crvena, žuta i zelena • Brojači semofora – svaki semofor ima svoj brojač trajanja zelenog LED svjetla koji je ostvaren pomoću 7-segmentnog displeja
Digitalni ulazi: • Tipkalo - funkcija je simulirati tipkalo za pješake na semoforu, pritiskom na tipkalo, semofor mijenja stanje • DIP switch – korištena dva digitalna inputa koji simuliraju stanje petlje na semoforu, ovisno o stanju petlje ispred jednog i drugog semofora, semofori mijenjaju svoja stanja
main.cpp
- Committer:
- divicic
- Date:
- 2020-11-26
- Revision:
- 0:2a22ea0dfee6
File content as of revision 0:2a22ea0dfee6:
#include "mbed.h" #include "TrafficFlash.h" #include "TrafficLight1.h" #include "TrafficLight2.h" //Ticker, Loop detectors Ticker LDT1; Ticker LDT2; //Users functions void TL1_DSP(void); void TL2_DSP(void); void DSP1_Time(); void DSP2_Time(); void TL1_button(void); void TL2_button(void); void LoopDT1(void); void LoopDT2(void); void Task_1(void); void Task_2(void); void Task_3(void); void Task_4(void); void Task_5(void); void Task_6(void); void Task_7(void); //Global variable char i=0,j=0; //Timers Timer timer1; Timer timer2; Timer debounce; //Digital inputs DigitalIn sw1(PE_4); DigitalIn sw2(PC_13); //7-segment display, TLD1 digital outputs DigitalOut TLD1_A(PE_10); DigitalOut TLD1_B(PE_11); DigitalOut TLD1_C(PE_12); DigitalOut TLD1_D(PE_13); DigitalOut TLD1_E(PE_14); DigitalOut TLD1_F(PE_15); DigitalOut TLD1_G(PB_10); //7-segment display, TLD2 digital outputs DigitalOut TLD2_A(PB_0); DigitalOut TLD2_B(PB_8); DigitalOut TLD2_C(PB_9); DigitalOut TLD2_D(PE_1); DigitalOut TLD2_E(PE_7); DigitalOut TLD2_F(PE_8); DigitalOut TLD2_G(PE_9); //Traffic ligt 1, digital outputs TrafficLight1 TL1_R(PC_0); TrafficLight1 TL1_Y(PC_1); TrafficLight1 TL1_G(PC_2); //Traffic light 2, digital inputs TrafficLight2 TL2_R(PA_0); TrafficLight2 TL2_Y(PA_1); TrafficLight2 TL2_G(PA_2); //Traffic light button, interrupt InterruptIn button(PE_5); int main() { sw1.mode(PullUp); sw2.mode(PullUp); Task_1(); while(true) { //Dogadaji Task_2(); Task_3(); Task_4(); Task_5(); Task_6(); Task_7(); } } //Users functions void TL1_DSP(char i) { switch (9-i) { case 0: TLD1_A = 1; TLD1_B = 1; TLD1_C = 1; TLD1_D = 1; TLD1_E = 1; TLD1_F = 1; TLD1_G = 0; break; case 1: TLD1_A = 0; TLD1_B = 1; TLD1_C = 1; TLD1_D = 0; TLD1_E = 0; TLD1_F = 0; TLD1_G = 0; break; case 2: TLD1_A = 1; TLD1_B = 1; TLD1_C = 0; TLD1_D = 1; TLD1_E = 1; TLD1_F = 0; TLD1_G = 1; break; case 3: TLD1_A = 1; TLD1_B = 1; TLD1_C = 1; TLD1_D = 1; TLD1_E = 0; TLD1_F = 0; TLD1_G = 1; break; case 4: TLD1_A = 0; TLD1_B = 1; TLD1_C = 1; TLD1_D = 0; TLD1_E = 0; TLD1_F = 1; TLD1_G = 1; break; case 5: TLD1_A = 1; TLD1_B = 0; TLD1_C = 1; TLD1_D = 1; TLD1_E = 0; TLD1_F = 1; TLD1_G = 1; break; case 6: TLD1_A = 1; TLD1_B = 0; TLD1_C = 1; TLD1_D = 1; TLD1_E = 1; TLD1_F = 1; TLD1_G = 1; break; case 7: TLD1_A = 1; TLD1_B = 1; TLD1_C = 1; TLD1_D = 0; TLD1_E = 0; TLD1_F = 0; TLD1_G = 0; break; case 8: TLD1_A = 1; TLD1_B = 1; TLD1_C = 1; TLD1_D = 1; TLD1_E = 1; TLD1_F = 1; TLD1_G = 1; break; case 9: TLD1_A = 1; TLD1_B = 1; TLD1_C = 1; TLD1_D = 1; TLD1_E = 0; TLD1_F = 1; TLD1_G = 1; break; } } void TL2_DSP(char j) { switch(9-j) { case 0: TLD2_A = 1; TLD2_B = 1; TLD2_C = 1; TLD2_D = 1; TLD2_E = 1; TLD2_F = 1; TLD2_G = 0; break; case 1: TLD2_A = 0; TLD2_B = 1; TLD2_C = 1; TLD2_D = 0; TLD2_E = 0; TLD2_F = 0; TLD2_G = 0; break; case 2: TLD2_A = 1; TLD2_B = 1; TLD2_C = 0; TLD2_D = 1; TLD2_E = 1; TLD2_F = 0; TLD2_G = 1; break; case 3: TLD2_A = 1; TLD2_B = 1; TLD2_C = 1; TLD2_D = 1; TLD2_E = 0; TLD2_F = 0; TLD2_G = 1; break; case 4: TLD2_A = 0; TLD2_B = 1; TLD2_C = 1; TLD2_D = 0; TLD2_E = 0; TLD2_F = 1; TLD2_G = 1; break; case 5: TLD2_A = 1; TLD2_B = 0; TLD2_C = 1; TLD2_D = 1; TLD2_E = 0; TLD2_F = 1; TLD2_G = 1; break; case 6: TLD2_A = 1; TLD2_B = 0; TLD2_C = 1; TLD2_D = 1; TLD2_E = 1; TLD2_F = 1; TLD2_G = 1; break; case 7: TLD2_A = 1; TLD2_B = 1; TLD2_C = 1; TLD2_D = 0; TLD2_E = 0; TLD2_F = 0; TLD2_G = 0; break; case 8: TLD2_A = 1; TLD2_B = 1; TLD2_C = 1; TLD2_D = 1; TLD2_E = 1; TLD2_F = 1; TLD2_G = 1; break; case 9: TLD2_A = 1; TLD2_B = 1; TLD2_C = 1; TLD2_D = 1; TLD2_E = 0; TLD2_F = 1; TLD2_G = 1; break; } } void DSP1_Time() { while(i<10) { switch(i) { case 6: TL1_R.Off(); TL1_Y.Off(); TL1_G.Off(); TL2_R.On(); TL2_Y.Off(); TL2_G.Off(); break; case 7: TL1_R.Off(); TL1_Y.Off(); TL1_G.On(); TL2_R.On(); TL2_Y.Off(); TL2_G.Off(); break; case 8: TL1_R.Off(); TL1_Y.Off(); TL1_G.Off(); TL2_R.On(); TL2_Y.Off(); TL2_G.Off(); break; case 9: TL1_R.Off(); TL1_Y.Off(); TL1_G.On(); TL2_R.On(); TL2_Y.Off(); TL2_G.Off(); break; default: TL1_R.Off(); TL1_Y.Off(); TL1_G.On(); TL2_R.On(); TL2_Y.Off(); TL2_G.Off(); } if (timer1.read_ms()>=1000) { TL1_DSP(i); timer1.reset(); i++; } debounce.start(); button.rise(&TL1_button); LDT1.attach(&LoopDT1, 0.2); } i=0; timer1.stop(); } void DSP2_Time() { while(j<10) { switch(j) { case 6: TL1_R.On(); TL1_Y.Off(); TL1_G.Off(); TL2_R.Off(); TL2_Y.Off(); TL2_G.Off(); break; case 7: TL1_R.On(); TL1_Y.Off(); TL1_G.Off(); TL2_R.Off(); TL2_Y.Off(); TL2_G.On(); break; case 8: TL1_R.On(); TL1_Y.Off(); TL1_G.Off(); TL2_R.Off(); TL2_Y.Off(); TL2_G.Off(); break; case 9: TL1_R.On(); TL1_Y.Off(); TL1_G.Off(); TL2_R.Off(); TL2_Y.Off(); TL2_G.On(); break; default: TL1_R.On(); TL1_Y.Off(); TL1_G.Off(); TL2_R.Off(); TL2_Y.Off(); TL2_G.On(); } if (timer2.read_ms()>=1000) { TL2_DSP(j); timer2.reset(); j++; } debounce.start(); button.rise(&TL2_button); LDT2.attach(&LoopDT2, 0.2); } j=0; timer2.stop(); } void TL1_button() { if (debounce.read_ms()>200) i=10; debounce.reset(); } void TL2_button() { if (debounce.read_ms()>200) j=10; debounce.reset(); } void LoopDT1() { if (sw1==1 && sw2==0) { i=10; } } void LoopDT2() { if (sw2==1 && sw1==0) { j=10; } } void Task_1() { TL1_R.Off(); TL1_Y.Off(); TL1_G.Off(); TL2_R.Off(); TL2_Y.Off(); TL2_G.Off(); wait(1); } void Task_2() { timer1.start(); DSP1_Time(); TLD1_A = 0; TLD1_B = 0; TLD1_C = 0; TLD1_D = 0; TLD1_E = 0; TLD1_F = 0; TLD1_G = 0; } void Task_3() { TL1_R.Off(); TL1_Y.On(); TL1_G.Off(); TL2_R.On(); TL2_Y.Off(); TL2_G.Off(); wait(1.5); } void Task_4() { TL1_R.On(); TL1_Y.Off(); TL1_G.Off(); TL2_R.On(); TL2_Y.On(); TL2_G.Off(); wait(1.5); } void Task_5() { timer2.start(); DSP2_Time(); TLD2_A = 0; TLD2_B = 0; TLD2_C = 0; TLD2_D = 0; TLD2_E = 0; TLD2_F = 0; TLD2_G = 0; } void Task_6() { TL1_R.On(); TL1_Y.Off(); TL1_G.Off(); TL2_R.Off(); TL2_Y.On(); TL2_G.Off(); wait(1.5); } void Task_7() { TL1_R.On(); TL1_Y.On(); TL1_G.Off(); TL2_R.On(); TL2_Y.Off(); TL2_G.Off(); wait(1.5); }