simulacija pokretnih vrata

Dependencies:   mbed libVrata

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

Committer:
styropore
Date:
Tue Nov 30 22:18:20 2021 +0000
Revision:
0:3e43e4aa5a59
Pokretna vrata

Who changed what in which revision?

UserRevisionLine numberNew contents of line
styropore 0:3e43e4aa5a59 1 #include "mbed.h"
styropore 0:3e43e4aa5a59 2 #include "libVrata.h"
styropore 0:3e43e4aa5a59 3
styropore 0:3e43e4aa5a59 4 DigitalOut ledCrvena(p15),ledZuta(p16);
styropore 0:3e43e4aa5a59 5 DigitalOut led1(LED1), led4(LED4);
styropore 0:3e43e4aa5a59 6
styropore 0:3e43e4aa5a59 7 InterruptIn tipkaloCrveno(p11), tipkaloPlavo(p12);
styropore 0:3e43e4aa5a59 8
styropore 0:3e43e4aa5a59 9 Ticker blink1, blink2;
styropore 0:3e43e4aa5a59 10 Timer vrijemeZatvaranja;
styropore 0:3e43e4aa5a59 11
styropore 0:3e43e4aa5a59 12 AnalogIn aIn19(p19), aIn20(p20); // analogni ulazi fotootpornika
styropore 0:3e43e4aa5a59 13
styropore 0:3e43e4aa5a59 14 Vrata vrata(p21);
styropore 0:3e43e4aa5a59 15
styropore 0:3e43e4aa5a59 16 bool senzorAktiviran(int rbr) // 0 - ulaz, 1 - izlaz
styropore 0:3e43e4aa5a59 17 {
styropore 0:3e43e4aa5a59 18 if ((rbr == 0) && (aIn19 < 0.5f)) return true;
styropore 0:3e43e4aa5a59 19 if ((rbr == 1) && (aIn20 < 0.5f)) return true;
styropore 0:3e43e4aa5a59 20 return false;
styropore 0:3e43e4aa5a59 21 }
styropore 0:3e43e4aa5a59 22
styropore 0:3e43e4aa5a59 23 void blinkCrvenaLed()
styropore 0:3e43e4aa5a59 24 {
styropore 0:3e43e4aa5a59 25 ledCrvena = ! ledCrvena;
styropore 0:3e43e4aa5a59 26 }
styropore 0:3e43e4aa5a59 27
styropore 0:3e43e4aa5a59 28 void blinkZutaLed()
styropore 0:3e43e4aa5a59 29 {
styropore 0:3e43e4aa5a59 30 ledZuta = !ledZuta;
styropore 0:3e43e4aa5a59 31 }
styropore 0:3e43e4aa5a59 32
styropore 0:3e43e4aa5a59 33 void otvoriVrata()
styropore 0:3e43e4aa5a59 34 {
styropore 0:3e43e4aa5a59 35 blink1.attach(&blinkCrvenaLed, 0.1);
styropore 0:3e43e4aa5a59 36 vrata.otvori();
styropore 0:3e43e4aa5a59 37 blink1.detach();
styropore 0:3e43e4aa5a59 38 ledCrvena = 0;
styropore 0:3e43e4aa5a59 39 }
styropore 0:3e43e4aa5a59 40
styropore 0:3e43e4aa5a59 41 void zatvoriVrata()
styropore 0:3e43e4aa5a59 42 {
styropore 0:3e43e4aa5a59 43 blink1.attach(&blinkCrvenaLed, 0.1);
styropore 0:3e43e4aa5a59 44 vrata.zatvori();
styropore 0:3e43e4aa5a59 45 blink1.detach();
styropore 0:3e43e4aa5a59 46 ledCrvena = 0;
styropore 0:3e43e4aa5a59 47 }
styropore 0:3e43e4aa5a59 48
styropore 0:3e43e4aa5a59 49 void automatikaToggle() // interrupt plava tipka - izbor rezima rada
styropore 0:3e43e4aa5a59 50 {
styropore 0:3e43e4aa5a59 51 vrata.rucno = !vrata.rucno;
styropore 0:3e43e4aa5a59 52 ledZuta = vrata.rucno;
styropore 0:3e43e4aa5a59 53 wait_ms(200);
styropore 0:3e43e4aa5a59 54 }
styropore 0:3e43e4aa5a59 55
styropore 0:3e43e4aa5a59 56 void pokreniVrataRucno() // rucno upravljanje vratima
styropore 0:3e43e4aa5a59 57 {
styropore 0:3e43e4aa5a59 58 if(vrata.rucno) {
styropore 0:3e43e4aa5a59 59 if(vrata.rad < 0) otvoriVrata();
styropore 0:3e43e4aa5a59 60 else if(vrata.rad > 0) zatvoriVrata();
styropore 0:3e43e4aa5a59 61 wait_ms(200);
styropore 0:3e43e4aa5a59 62 }
styropore 0:3e43e4aa5a59 63 }
styropore 0:3e43e4aa5a59 64
styropore 0:3e43e4aa5a59 65 int main()
styropore 0:3e43e4aa5a59 66 {
styropore 0:3e43e4aa5a59 67 bool zutaBlink = false; // uključen ticker blinkanja zute Led
styropore 0:3e43e4aa5a59 68 otvoriVrata(); // prvi setup vrata
styropore 0:3e43e4aa5a59 69 wait(2); //
styropore 0:3e43e4aa5a59 70 zatvoriVrata(); //
styropore 0:3e43e4aa5a59 71
styropore 0:3e43e4aa5a59 72 tipkaloCrveno.mode(PullDown);
styropore 0:3e43e4aa5a59 73 tipkaloPlavo.mode(PullDown);
styropore 0:3e43e4aa5a59 74 tipkaloPlavo.rise(&automatikaToggle);
styropore 0:3e43e4aa5a59 75 tipkaloCrveno.rise(&pokreniVrataRucno);
styropore 0:3e43e4aa5a59 76 ledZuta = vrata.rucno;
styropore 0:3e43e4aa5a59 77
styropore 0:3e43e4aa5a59 78 while(1) {
styropore 0:3e43e4aa5a59 79 led1 = senzorAktiviran(1);
styropore 0:3e43e4aa5a59 80 led4 = senzorAktiviran(0);
styropore 0:3e43e4aa5a59 81 if(!vrata.rucno) { // automatski
styropore 0:3e43e4aa5a59 82 ledZuta = vrata.rucno;
styropore 0:3e43e4aa5a59 83 if(senzorAktiviran(0) || senzorAktiviran(1)) {
styropore 0:3e43e4aa5a59 84 otvoriVrata();
styropore 0:3e43e4aa5a59 85 vrijemeZatvaranja.reset();
styropore 0:3e43e4aa5a59 86 vrijemeZatvaranja.start();
styropore 0:3e43e4aa5a59 87 }
styropore 0:3e43e4aa5a59 88 if(vrijemeZatvaranja.read() > 5.0) { // automatsko zatvaranje vrata nakon 5 sec
styropore 0:3e43e4aa5a59 89 zatvoriVrata();
styropore 0:3e43e4aa5a59 90 vrijemeZatvaranja.stop();
styropore 0:3e43e4aa5a59 91 vrijemeZatvaranja.reset();
styropore 0:3e43e4aa5a59 92 }
styropore 0:3e43e4aa5a59 93 } else { // rucno
styropore 0:3e43e4aa5a59 94 if(senzorAktiviran(0) || senzorAktiviran(1)) {
styropore 0:3e43e4aa5a59 95 if(!zutaBlink) {
styropore 0:3e43e4aa5a59 96 blink2.attach(&blinkZutaLed, 0.2);
styropore 0:3e43e4aa5a59 97 zutaBlink = true;
styropore 0:3e43e4aa5a59 98 }
styropore 0:3e43e4aa5a59 99 } else if (zutaBlink) {
styropore 0:3e43e4aa5a59 100 blink2.detach();
styropore 0:3e43e4aa5a59 101 zutaBlink = false;
styropore 0:3e43e4aa5a59 102 ledZuta = vrata.rucno;
styropore 0:3e43e4aa5a59 103 }
styropore 0:3e43e4aa5a59 104 }
styropore 0:3e43e4aa5a59 105 wait_ms(20);
styropore 0:3e43e4aa5a59 106 }
styropore 0:3e43e4aa5a59 107 }