Mikroupravljaci, konstrukcijski zadatak

U prilogu se nalazi kod za simulaciju upravljanja semaforom, tj podešavanje brzine izmjene svjetla na semaforu ovisno o gustoći prometa. Kao senzor koji detektira gustoću prometa korišten je potenciometar koji je spojen na analogni ulaz. Maksimalna vrijednost napona na potenciometru odgovara maksimalnom ciklusu semafora. Očitavanje s analognog ulaza i korekcija trajanja ciklusa se odvija samo nakon pritiska tipkala od strane operatera, što se vrši pomoću hardverskog prekida. Samo paljenje i gašenje led dioda sukladno stanju semafora se vrši u funkcijama koje se nalazi u biblioteci my_library.h.

https://os.mbed.com/media/uploads/julijacapjak/shema_fotka.png

Revision:
0:0f1f798f7d20
Child:
1:46480da2ba4e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Jul 01 06:29:45 2022 +0000
@@ -0,0 +1,52 @@
+#include "mbed.h"
+#include "my_library.h"
+
+AnalogIn Pot(A0);               //definiranje pina za potenciometar
+InterruptIn button(D7);         //definiranje tipke za hardverski prekid
+
+Timer debounce;                 //timer koji koristimo za debounce (uklanjanje neželjenog titranja)
+
+float t5, t2;
+
+void confirm()
+{if (debounce.read_ms() > 200)    //provjera je li brid smetnja
+{
+    t5 = 5000000 * Pot;
+    t2 = 2000000 * Pot;
+    debounce.reset();           //reset timer-a
+}
+}
+    
+float t;
+int main(){
+    t5 = 5000000;               //proizvoljno vrijeme čekanja
+    t2 = 2000000;               //proizvoljno vrijeme čekanja
+    debounce.start();           //debounce počinje brojati
+    button.rise(&confirm);      //dodijeljivanje prekidne funckije
+   
+    while (1)
+    {
+        if ((Stanje == 1) || (Stanje == 3))     //provjera stanja
+        {   t=0;                                //početno vrijeme
+            while (t<t5){ t = t+1;}// (t5);     //vrijeme čekanja
+        }
+        else 
+        { t=0;                                  //početno vrijeme
+            while (t<t2) {t = t+1;}// (t5);     //vrijeme čekanja
+        }
+        if (Stanje == 0)                        //provjera stanja
+        {
+            Upali_1();                          //pozivanje funkcije
+        }
+         else if (Stanje == 1)                  //provjera stanja
+        {
+            Upali_2();                          //pozivanje funkcije    
+        }
+         else if (Stanje == 2)                  //provjera stanja
+        {
+            Upali_3();                          //pozivanje funkcije  
+        }
+         else Upali_0();
+    }
+}
+