control simulation of elevator

Dependencies:   mbed TSI

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?

UserRevisionLine numberNew 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 }