simulacija pokretnih vrata

Dependencies:   mbed libVrata

shema sklopa https://os.mbed.com/media/uploads/styropore/shema.png

Revision:
0:3e43e4aa5a59
diff -r 000000000000 -r 3e43e4aa5a59 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Nov 30 22:18:20 2021 +0000
@@ -0,0 +1,107 @@
+#include "mbed.h"
+#include "libVrata.h"
+
+DigitalOut ledCrvena(p15),ledZuta(p16);
+DigitalOut led1(LED1), led4(LED4);
+
+InterruptIn tipkaloCrveno(p11), tipkaloPlavo(p12);
+
+Ticker blink1, blink2;
+Timer vrijemeZatvaranja;
+
+AnalogIn aIn19(p19), aIn20(p20);  // analogni ulazi fotootpornika
+
+Vrata vrata(p21);
+
+bool senzorAktiviran(int rbr) // 0 - ulaz,   1 - izlaz
+{
+    if ((rbr == 0) && (aIn19 < 0.5f)) return true;
+    if ((rbr == 1) && (aIn20 < 0.5f)) return true;
+    return false;
+}
+
+void blinkCrvenaLed()
+{
+    ledCrvena = ! ledCrvena;
+}
+
+void blinkZutaLed()
+{
+    ledZuta = !ledZuta;
+}
+
+void otvoriVrata()
+{
+    blink1.attach(&blinkCrvenaLed, 0.1);
+    vrata.otvori();
+    blink1.detach();
+    ledCrvena = 0;
+}
+
+void zatvoriVrata()
+{
+    blink1.attach(&blinkCrvenaLed, 0.1);
+    vrata.zatvori();
+    blink1.detach();
+    ledCrvena = 0;
+}
+
+void automatikaToggle()  // interrupt plava tipka - izbor rezima rada
+{
+    vrata.rucno = !vrata.rucno;
+    ledZuta = vrata.rucno;
+    wait_ms(200);
+}
+
+void pokreniVrataRucno()   // rucno upravljanje vratima
+{
+    if(vrata.rucno) {
+        if(vrata.rad < 0) otvoriVrata();
+        else if(vrata.rad > 0) zatvoriVrata();
+        wait_ms(200);
+    }
+}
+
+int main()
+{
+    bool zutaBlink = false; // uključen ticker blinkanja zute Led
+    otvoriVrata();  // prvi setup vrata
+    wait(2);        //
+    zatvoriVrata(); //
+
+    tipkaloCrveno.mode(PullDown);
+    tipkaloPlavo.mode(PullDown);
+    tipkaloPlavo.rise(&automatikaToggle);
+    tipkaloCrveno.rise(&pokreniVrataRucno);
+    ledZuta = vrata.rucno;
+    
+    while(1) {
+        led1 = senzorAktiviran(1);
+        led4 = senzorAktiviran(0);
+        if(!vrata.rucno) { // automatski
+            ledZuta = vrata.rucno;
+            if(senzorAktiviran(0) || senzorAktiviran(1)) {
+                otvoriVrata();
+                vrijemeZatvaranja.reset();
+                vrijemeZatvaranja.start();
+            }
+            if(vrijemeZatvaranja.read() > 5.0) {  // automatsko zatvaranje vrata nakon 5 sec
+                zatvoriVrata();
+                vrijemeZatvaranja.stop();
+                vrijemeZatvaranja.reset();
+            }
+        } else {  // rucno
+            if(senzorAktiviran(0) || senzorAktiviran(1)) {
+                if(!zutaBlink) {
+                    blink2.attach(&blinkZutaLed, 0.2);
+                    zutaBlink = true;
+                }
+            } else if (zutaBlink) {
+                blink2.detach();
+                zutaBlink = false;
+                ledZuta = vrata.rucno;
+            }
+        }
+        wait_ms(20);
+    }
+}