Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 0:691f916fe587
diff -r 000000000000 -r 691f916fe587 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sun May 02 16:25:11 2021 +0000
@@ -0,0 +1,92 @@
+#include "mbed.h"
+#include "SegDisplay.h"
+InterruptIn button1(PA_5); //Interrupt pin
+InterruptIn button2(PA_6); //Interrupt pin
+Serial pc(USBTX, USBRX); //Serijska komunikacija s računalom
+DigitalOut redLED(PA_10);
+DigitalOut yellowLED(PB_3);
+DigitalOut greenLED(PB_5);
+Ticker blink; //Ticker za blinkanje ledice
+Timer debounce; //Timer za micanje debouncinga
+void toggle(void); //inicijalizacija funkcije
+void toggle2(void); //inicijalizacija funkcije
+int state=1; // inicijalizacija varijable
+int sec=0; // inicijalizacija varijable
+
+void yellowBlink()
+{
+ yellowLED=!yellowLED;
+
+}
+
+void odbrojavanje() // Funkcija za odbrojavanje trajanja signalizacije na semaforu
+{
+ while (sec>0 && state!=5) {
+ Seg1 = SegConvert(sec); // Pozivanje funkcije za ispis na 7 seg. displayu
+ wait_us (1000000);
+ sec--;
+ }
+}
+
+void signalizacija(int red, int yellow, int green, int trajanje) // Funckija za signalizaciju na semaforu
+{
+ redLED = red;
+ yellowLED = yellow;
+ greenLED= green;
+ sec = trajanje;
+}
+
+int main()
+{
+ debounce.start();
+ SegInit(); // Pozivanje funkcije za inicijalizaciju 7 seg. displaya
+ while (true) {
+ button1.rise(&toggle); // Interrupt, semafor trenutno nije u funkciji
+ button2.rise(&toggle2); // Interrupt, vracanje semafora u funkcionalno stanje
+ if(state==1) { // Crveno na semaforu
+ pc.printf("Zaustavi se.\n");
+ blink.detach();
+ signalizacija(1,0,0,9);
+ state=2;
+ } else if(state==2) { // Prijelaz iz crvenog u zeleno
+ pc.printf("Pripremi se za kretanje.\n");
+ signalizacija(1,1,0,3);
+ state=3;
+ } else if(state==3) { // Zeleno na semaforu
+ pc.printf("Kreni.\n");
+ signalizacija(0,0,1,9);
+ state=4;
+ } else if(state==4) { // Prijelaz iz zelenog u crveno
+ pc.printf("Kreni se zaustavljati.\n");
+ signalizacija(0,1,0,3);
+ state=1;
+ } else if(state==5) { // Semafor izvan funckije
+ pc.printf("Semafor izvan funkcije ili prometna nesreća.\n");
+ signalizacija(0,0,0,0);
+ blink.attach(&yellowBlink, 0.25); // Ticker za blinkanje LED
+ state=6;
+ Seg1 = SegConvert(10);
+ }
+ odbrojavanje();
+ }
+
+}
+
+//Interrupt, semafor trenutno nije u funkciji
+void toggle()
+{
+ if (debounce.read_ms()>200) { // only allow toggle if debounce timer
+ state=5; // has passed 200 ms
+ }
+ debounce.reset(); // restart timer when the toggle is performed
+}
+
+//Interrupt, vracanje semafora u funkcionalno stanje
+void toggle2()
+{
+ if (debounce.read_ms()>200) { // only allow toggle if debounce timer
+ state=1; // has passed 200 ms
+
+ }
+ debounce.reset(); // restart timer when the toggle is performed
+}
\ No newline at end of file