
control simulation of elevator
vytah.cpp@1:7dea46c9d8dc, 2019-01-23 (annotated)
- Committer:
- kicin2
- Date:
- Wed Jan 23 23:52:27 2019 +0000
- Revision:
- 1:7dea46c9d8dc
- Parent:
- 0:62c18ef61b61
version 1.0.2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kicin2 | 0:62c18ef61b61 | 1 | /** |
kicin2 | 0:62c18ef61b61 | 2 | * @file vytah.cpp |
kicin2 | 0:62c18ef61b61 | 3 | * @brief Súbor obsahuje funkcie pre riadenie výťahu simulátora |
kicin2 | 0:62c18ef61b61 | 4 | * @author Benedikt Kicin |
kicin2 | 0:62c18ef61b61 | 5 | * @date 21.1.2018 |
kicin2 | 0:62c18ef61b61 | 6 | */ |
kicin2 | 0:62c18ef61b61 | 7 | |
kicin2 | 0:62c18ef61b61 | 8 | #include "mbed.h" |
kicin2 | 0:62c18ef61b61 | 9 | #include "komunikacia.h" |
kicin2 | 0:62c18ef61b61 | 10 | #include "ovladanie.h" |
kicin2 | 0:62c18ef61b61 | 11 | |
kicin2 | 0:62c18ef61b61 | 12 | int whereIsElev; //kde je vytah |
kicin2 | 0:62c18ef61b61 | 13 | int commandGoElev; //kam ma ist vytah |
kicin2 | 0:62c18ef61b61 | 14 | |
kicin2 | 0:62c18ef61b61 | 15 | /** |
kicin2 | 0:62c18ef61b61 | 16 | * Funkcia ktorá spracuváva prijatý paket a rozdeľuje ho na paket prijatý od tlačidiel alebo indikátorov umiestnenia výťahu |
kicin2 | 0:62c18ef61b61 | 17 | */ |
kicin2 | 0:62c18ef61b61 | 18 | void buttonOutSwitch() |
kicin2 | 0:62c18ef61b61 | 19 | { |
kicin2 | 0:62c18ef61b61 | 20 | if(packetOK == 1) { //kontrola crc prijateho packetu ok |
kicin2 | 0:62c18ef61b61 | 21 | int pom1; |
kicin2 | 0:62c18ef61b61 | 22 | int pom2; |
kicin2 | 0:62c18ef61b61 | 23 | int addr = packet[2]; //adresa packetu, zistenie ktory button bol stlaceny |
kicin2 | 0:62c18ef61b61 | 24 | |
kicin2 | 0:62c18ef61b61 | 25 | if(addr == 0xb0 || addr == 0xb1 || addr == 0xb2 || addr == 0xb3 || addr == 0xb4 || //buttony vo vytahu |
kicin2 | 0:62c18ef61b61 | 26 | addr == 0xc0 || addr == 0xc1 || addr == 0xc2 || addr == 0xc3 || addr == 0xc4) { //buttony na poschodi |
kicin2 | 0:62c18ef61b61 | 27 | |
kicin2 | 0:62c18ef61b61 | 28 | pom1 = packet[2]% 0xB0; //receive addr - prepocet z tlacidiel na led Tlacidiel |
kicin2 | 0:62c18ef61b61 | 29 | if(pom1<5) { // |
kicin2 | 0:62c18ef61b61 | 30 | pom1 = packet[2]% 0x90; //B0-B4%B0 =0-4 else C0-C4%B0 =10-14 || B0-B4%90 =20-24 else C0-C4%90 =30-34 |
kicin2 | 0:62c18ef61b61 | 31 | } |
kicin2 | 0:62c18ef61b61 | 32 | pom2 = pom1%0x10; // pre commandGoElev --> aby sme mali hodnotu 0-4 |
kicin2 | 0:62c18ef61b61 | 33 | kabinkaLock(1); //uzamknutie dveri |
kicin2 | 0:62c18ef61b61 | 34 | commandGoElev = pom2; //vytah pojde na poschodie z ktoreho sme vypocitali kde bolo stlaceny button |
kicin2 | 0:62c18ef61b61 | 35 | ledButton(pom1,1); //a zasvieti sa ledka na ktore poschodie ma ist vytah |
kicin2 | 0:62c18ef61b61 | 36 | if (whereIsElev > commandGoElev) { //ak je vyssie |
kicin2 | 0:62c18ef61b61 | 37 | LCDdisp(whereIsElev,2); //down |
kicin2 | 0:62c18ef61b61 | 38 | motor(2); //down |
kicin2 | 0:62c18ef61b61 | 39 | } else if (whereIsElev < commandGoElev) { |
kicin2 | 0:62c18ef61b61 | 40 | LCDdisp(whereIsElev,1); //up |
kicin2 | 0:62c18ef61b61 | 41 | motor(1); //up |
kicin2 | 0:62c18ef61b61 | 42 | }else{motor(1);} |
kicin2 | 0:62c18ef61b61 | 43 | } else if(addr == 0xe0 || addr == 0xe1 || addr == 0xe2 || addr == 0xe3 || addr == 0xe4) { //ledSignalizacia vedla buttonov |
kicin2 | 0:62c18ef61b61 | 44 | pom2 = addr - 0xe0;//receive addr --> 0 - 4 |
kicin2 | 0:62c18ef61b61 | 45 | pom1 = addr - 0xd0; //pre 0xD0: 0x10-0x14 // pre 0xC0: 0x20-0x24 |
kicin2 | 0:62c18ef61b61 | 46 | |
kicin2 | 0:62c18ef61b61 | 47 | if (commandGoElev>whereIsElev) { |
kicin2 | 0:62c18ef61b61 | 48 | LCDdisp(whereIsElev,1); |
kicin2 | 0:62c18ef61b61 | 49 | } else if (commandGoElev<whereIsElev) { |
kicin2 | 0:62c18ef61b61 | 50 | LCDdisp(whereIsElev,2); |
kicin2 | 0:62c18ef61b61 | 51 | } |
kicin2 | 0:62c18ef61b61 | 52 | if (commandGoElev == pom2) { //kam ma ist vytah |
kicin2 | 0:62c18ef61b61 | 53 | motor(0); //stop |
kicin2 | 0:62c18ef61b61 | 54 | whereIsElev = pom2; //kde je vytah |
kicin2 | 0:62c18ef61b61 | 55 | wait(2); |
kicin2 | 0:62c18ef61b61 | 56 | kabinkaLock(0); //zamknutie kabinky po 2sekundach kvoli spomaleniu pri zastaveni |
kicin2 | 0:62c18ef61b61 | 57 | ledButton(pom1,0); //ledka pri tlacitkach sa vypne |
kicin2 | 0:62c18ef61b61 | 58 | ledButton(pom1+0x10,0); //druhe led tlacidlo |
kicin2 | 0:62c18ef61b61 | 59 | LCDdisp(whereIsElev,0); //nastavi sa poschodie displeya kde stoji vytah |
kicin2 | 0:62c18ef61b61 | 60 | } |
kicin2 | 0:62c18ef61b61 | 61 | whereIsElev = pom2; //ulozi sa aktualna pozicia do pom2 |
kicin2 | 0:62c18ef61b61 | 62 | } |
kicin2 | 0:62c18ef61b61 | 63 | packet = 0; |
kicin2 | 0:62c18ef61b61 | 64 | packetOK =0; //vynuluju sa kontrolne packety |
kicin2 | 0:62c18ef61b61 | 65 | } |
kicin2 | 0:62c18ef61b61 | 66 | } |
kicin2 | 0:62c18ef61b61 | 67 | |
kicin2 | 0:62c18ef61b61 | 68 | /** |
kicin2 | 0:62c18ef61b61 | 69 | * Funkcia ktorá nastaví pozíciu výťahu na štvrté poschodie |
kicin2 | 0:62c18ef61b61 | 70 | */ |
kicin2 | 0:62c18ef61b61 | 71 | void elevReset() |
kicin2 | 0:62c18ef61b61 | 72 | { |
kicin2 | 0:62c18ef61b61 | 73 | kabinkaLock(0); |
kicin2 | 0:62c18ef61b61 | 74 | whereIsElev =4; |
kicin2 | 0:62c18ef61b61 | 75 | commandGoElev=4; |
kicin2 | 0:62c18ef61b61 | 76 | motor(1); |
kicin2 | 0:62c18ef61b61 | 77 | } |