control simulation of elevator

Dependencies:   mbed TSI

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);
}