Benedikt Kičin
/
vytah_simulation
control simulation of elevator
Diff: vytah.cpp
- Revision:
- 0:62c18ef61b61
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vytah.cpp Wed Jan 23 23:43:20 2019 +0000 @@ -0,0 +1,77 @@ +/** +* @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); +} \ No newline at end of file