
control simulation of elevator
vytah.cpp
- Committer:
- kicin2
- Date:
- 2019-01-23
- Revision:
- 0:62c18ef61b61
File content as of revision 0:62c18ef61b61:
/** * @file vytah.cpp * @brief Súbor obsahuje funkcie pre riadenie výťahu simulátora * @author Benedikt Kicin * @date 21.1.2018 */ #include "mbed.h" #include "komunikacia.h" #include "ovladanie.h" int whereIsElev; //kde je vytah int commandGoElev; //kam ma ist vytah /** * Funkcia ktorá spracuváva prijatý paket a rozdeľuje ho na paket prijatý od tlačidiel alebo indikátorov umiestnenia výťahu */ void buttonOutSwitch() { if(packetOK == 1) { //kontrola crc prijateho packetu ok int pom1; int pom2; int addr = packet[2]; //adresa packetu, zistenie ktory button bol stlaceny if(addr == 0xb0 || addr == 0xb1 || addr == 0xb2 || addr == 0xb3 || addr == 0xb4 || //buttony vo vytahu addr == 0xc0 || addr == 0xc1 || addr == 0xc2 || addr == 0xc3 || addr == 0xc4) { //buttony na poschodi pom1 = packet[2]% 0xB0; //receive addr - prepocet z tlacidiel na led Tlacidiel if(pom1<5) { // 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 } pom2 = pom1%0x10; // pre commandGoElev --> aby sme mali hodnotu 0-4 kabinkaLock(1); //uzamknutie dveri commandGoElev = pom2; //vytah pojde na poschodie z ktoreho sme vypocitali kde bolo stlaceny button ledButton(pom1,1); //a zasvieti sa ledka na ktore poschodie ma ist vytah if (whereIsElev > commandGoElev) { //ak je vyssie LCDdisp(whereIsElev,2); //down motor(2); //down } else if (whereIsElev < commandGoElev) { LCDdisp(whereIsElev,1); //up motor(1); //up }else{motor(1);} } else if(addr == 0xe0 || addr == 0xe1 || addr == 0xe2 || addr == 0xe3 || addr == 0xe4) { //ledSignalizacia vedla buttonov pom2 = addr - 0xe0;//receive addr --> 0 - 4 pom1 = addr - 0xd0; //pre 0xD0: 0x10-0x14 // pre 0xC0: 0x20-0x24 if (commandGoElev>whereIsElev) { LCDdisp(whereIsElev,1); } else if (commandGoElev<whereIsElev) { LCDdisp(whereIsElev,2); } if (commandGoElev == pom2) { //kam ma ist vytah motor(0); //stop whereIsElev = pom2; //kde je vytah wait(2); kabinkaLock(0); //zamknutie kabinky po 2sekundach kvoli spomaleniu pri zastaveni ledButton(pom1,0); //ledka pri tlacitkach sa vypne ledButton(pom1+0x10,0); //druhe led tlacidlo LCDdisp(whereIsElev,0); //nastavi sa poschodie displeya kde stoji vytah } whereIsElev = pom2; //ulozi sa aktualna pozicia do pom2 } packet = 0; packetOK =0; //vynuluju sa kontrolne packety } } /** * Funkcia ktorá nastaví pozíciu výťahu na štvrté poschodie */ void elevReset() { kabinkaLock(0); whereIsElev =4; commandGoElev=4; motor(1); }