control simulation of elevator

Dependencies:   mbed TSI

ovladanie.cpp

Committer:
kicin2
Date:
2019-01-23
Revision:
0:62c18ef61b61
Child:
1:7dea46c9d8dc

File content as of revision 0:62c18ef61b61:

/** 
*   @file ovladanie.cpp 
*   @brief Súbor obsahuje funkcie ktoré odosielajú údaje simulátoru
*   @author Benedikt Kicin
*   @date 21.1.2018
*/

#include "komunikacia.h"

/**
* Funkcia ktorá riadi pohyb výťahu, ktorý buď zastaví alebo sa pohybuje horea a nadol
* @param command - parameter podľa ktorého sa zadáva aký typ pohybu má výťah vykonať
*/
void motor(int command) //0-stop, 1 - hore, 2-dole, 3-pocet pohybov
{
    switch(command) {
        case 0: {//stop elevator
            int packet0[]= {0xA0,0xf1,0x00,0x01,0x01};  //doska; rychlost motoru; vytah; velkost dat; data
            sendTo(packet0);
            break;
        }
        case 1: {//up move of elevator
            int packet1[]= {0xA0,0xf1,0x00,0x05,0x02,0x00,0x00,0x00,0x64};  //data rychlost 100 hore
            sendTo(packet1);
            break;
        }
        case 2: {//down move of elevator
            int packet2[]= {0xA0,0xf1,0x00,0x05,0x02,0xFF,0xFF,0xFF,0x9C};  //data rychlost 100 dole
            sendTo(packet2);
            break;
        }
        case 3: { //pocet spusteni motora
            int packet3[]= {0xA0,0xf1,0x00,0x01,0x03};
            sendTo(packet3);
            break;
        }
    }
}

/**
* Funkcia ktorá riadi zamykanie výťahu
* @param command - parameter podľa ktorého sa kabínka 
*        odomkne - 0, zamkne - 1, pošle aktuálny stav -2
*/
void kabinkaLock(int command)
{
    switch(command) {
        case 0: {//Unlock the door
            int packet0[]= {0xA0,0xf0,0x00,0x01,0x00};  //doska; vytah
            sendTo(packet0);
            break;
        }
        case 1: {//Lock the door
            int packet1[]= {0xA0,0xf0,0x00,0x01,0x01};
            sendTo(packet1);
            break;
        }
        default : { //send status
            int packet1[]= {0xA0,0xf0,0x00,0x01,0x02};
            sendTo(packet1);
            break;
        }
    }
}

/**
* Funkcia ktorá rozsviecuje a zhasína LED indikátory tlačidiel v simulátore
* @param floor   - parameter ktorý vyjadruje na akom poschodí sa má LED rozsvietiť/zhasnúť
* @param command - riadi či sa LED zhasne - 0 alebo rozsvieti - 1
*/
void ledButton(int floor, int command) //(0x21,1)
{
    //int pom = floor%0x10; //mod16
    if(command == 0) { //offLed
        int packet0[]= {0xA0,floor,0x00,0x01,0x00}; //vypni
        sendTo(packet0);
    } else {
        int packet0[]= {0xA0,floor,0x00,0x01,0x01}; //inak zapni
        sendTo(packet0);
    }
}

/**
* Funkcia ktorá vykresľuje na displej výťahu kde sa výťah nachádza a ktorým smerom sa pohybuje
* @param floor   - parameter ktorý vyjadruje na akom poschodí sa výťah nachádza
* @param command - riadi aký sa má indikovať smer pohybu nahor - 1 alebo nadol - 2
*/
void LCDdisp(int floor,int command)
{
    int addr = 0x30;
    int data0;
    if(command == 1) {//up arrow
        data0 = 0x01;
    } else if (command == 2) { //down arrow
        data0= 0x02;
    } else data0= 0x03;
    switch(floor) {
        case 0: {// P floor
            int packet0[]= {0xA0,addr,0x00,0x02,data0,0x50};
            sendTo(packet0);
            break;
        }
        case 1: {// 1st floor
            int packet0[]= {0xA0,addr,0x00,0x02,data0,0x31};
            sendTo(packet0);
            break;
        }
        case 2: {// 2nd floor
            int packet0[]= {0xA0,addr,0x00,0x02,data0,0x32};
            sendTo(packet0);
            break;
        }
        case 3: {// 3rd floor
            int packet0[]= {0xA0,addr,0x00,0x02,data0,0x33};
            sendTo(packet0);
            break;
        }
        case 4: {// 4th floor
            int packet0[]= {0xA0,addr,0x00,0x02,data0,0x34};
            sendTo(packet0);
            break;
        }
    }
}

/**
* Funkcia ktorá inicializuje uvodnné nastavenie LED tlačidiel výťahu
*/
void ledReset()
{
    for (int j=0x10; j<0x15; j++) {
        ledButton(j, 0);
        int k=j+0x10;
        ledButton(k, 0);
    }
}