TVZ2021
/
PokretnaVrata
simulacija pokretnih vrata
shema sklopa
main.cpp@0:3e43e4aa5a59, 2021-11-30 (annotated)
- Committer:
- styropore
- Date:
- Tue Nov 30 22:18:20 2021 +0000
- Revision:
- 0:3e43e4aa5a59
Pokretna vrata
Who changed what in which revision?
User | Revision | Line number | New 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 | } |