control simulation of elevator

Dependencies:   mbed TSI

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