Semestrálna práca VÝTAH Roman Ciesarík

Dependencies:   MMA8451Q mbed

Revision:
8:9686195ddf1d
Parent:
7:8786833154ff
Child:
9:51cf1120b4f4
--- a/main.cpp	Fri Jan 05 22:00:44 2018 +0000
+++ b/main.cpp	Sat Jan 06 19:06:35 2018 +0000
@@ -1,9 +1,5 @@
 #include "mbed.h"
 #include "headre.h"
-//#include "definicie.h"
-
-
-
 
 #define DISPLAY     0x30    // DATA smer  0x01-> UP 0x02-> DOWN , text (string)
 #define TERMINAL    0xD0    // Vypise vsetko
@@ -20,7 +16,7 @@
 #define POSCHODIE_BUTTON_3  0xc3    // |-----------|
 #define POSCHODIE_BUTTON_4  0xc4    // └-----------┘
 
-#define VYTAH_DIODA_P   0x20        // ┌--------------------------┐
+#define VYTAH_DIODA_P   0x20        // ┌--------------------------┐ 
 #define VYTAH_DIODA_1   0x21        // | DATA 0x00-> OFF 0x01->ON |
 #define VYTAH_DIODA_2   0x22        // |--------------------------|
 #define VYTAH_DIODA_3   0x23        // |--------------------------|
@@ -35,7 +31,7 @@
 #define VYTAH   0xf0    // DATA 0x00-> UNLOCK  0x01-> LOCK
 #define BRZDA   0xf     // DATA 0x00-> DEACTIVATE  0x01-> ACTIVATE
 
-#define FLOOR_LIMIT_SWITCH_P    0xe0    // ┌------------------------------------------┐
+#define FLOOR_LIMIT_SWITCH_P    0xe0    // ┌------------------------------------------┐ 
 #define FLOOR_LIMIT_SWITCH_1    0xe1    // | DATA 0x00-> LOW 0x01->WIDE 0x02-> NARROW |
 #define FLOOR_LIMIT_SWITCH_2    0xe2    // |------------------------------------------|
 #define FLOOR_LIMIT_SWITCH_3    0xe3    // |------------------------------------------|
@@ -44,7 +40,6 @@
 #define MOTOR   0xf1    // DATA 0x1-> STOP 0x02-> UP/DOWN 32bit <-100,100> 0x3-> MOTOR ENCODER COUNT (double)
 #define WATCHDOG 0xfe   // DATA 0x01-> time out ELSE regular reset ( 1500ms )
 
-
 Serial pc(USBTX, USBRX, 57600);
 
 int i;
@@ -71,76 +66,70 @@
 
 // crc [0xA0, prijem, odosielatel, vrlkost dat , data (256),crc]
 //char odosli[5+sizeof(DATA)];
-
+DigitalOut myled(LED1);
+DigitalOut myled2(LED2);
 
 
 char demo[]= {1,2,3,4,5,6};
 char prijemSpravy[30];
-char diode_DATA[]= {0x00,0x01};
-int diode_cislo[]= {0,0,0,0,0};
+char diode_DATA[]={0x00,0x01};
+int diode_cislo[]={0,0,0,0,0};
 int stav=5;
+int poradie[]={0,0,0,0,0};
+
 
-int poradie[]= {0,0,0,0,0};
-int zar=0;
-int por=0;
-//int kk=0;
 
+char buffer_kto[100];
+char buffer_co[100];
+int buff_index=0;
+int cyklus=0;
 
 int main()
 {
     pc.attach(&prijmemSpravu);
     //dole();
-    while(true) {
-
-        //rozhodni();
-        /* for(int i=0;i<5;i++)
-             if(diode_cislo[i]!=0)
-             {
-                 if(i<stav){dole();break;}
-                 else {hore();break;}
-             }
-            */
+while(true)
+{
+    
+    rozhodni();
+   /* for(int i=0;i<5;i++)
+        if(diode_cislo[i]!=0)
+        {
+            if(i<stav){dole();break;}
+            else {hore();break;}
+        }
+       */
 /*
-        while(true) {
-
-            if (por<5) {
-                // pc.attach(&prijmemSpravu);
-                pohyb(poradie[por]);
-            
-                por++;
-            } else {
-                por=0;
-                pohyb(poradie[por]);
-            }
-        }*/
-
-
-
+      if(cyklus<100)
+        {
+            rozhodni(buffer_kto[cyklus], buffer_co[cyklus]);
+            cyklus++;
+        }
+    else
+    {
+       cyklus=0; 
+       rozhodni(buffer_kto[cyklus], buffer_co[cyklus]);
+       cyklus++; 
     }
+*/
+    
+    /*stop();
+    wait(1);
+    hore();*/
+}   
 }
 
-void zarad(int co)
-{
-    if (zar<5) {
-        poradie[zar]=co;
-        zar++;
-    } else {
-        poradie[0]=co;
-        zar=1;
-    }
-}
-
-void pohyb(int kam )
+void pohyb(int kam)
 {
     zamkni();
-    if (stav < kam) { pc.attach(&prijmemSpravu);hore();}
-    if (stav > kam) { pc.attach(&prijmemSpravu);dole();}
+     if (stav <kam) hore();
+        if (stav >kam) dole();
 
-    /*
+/*
     switch(stav)
     {
         case 5: dole(); break;
-        case 4:
+        case 4: 
             if(diode_cislo[4]==1)
          break;
         case 3: break;
@@ -148,21 +137,23 @@
         case 1: break;
         case 0: break;
         default: break;
-    }
-    */
+    }*/
 }
 
 
 void zamkni()
-{
+{   
+    
     char DATA[]= {0x01};
     poslemSpravu(VYTAH,0xcc,sizeof(DATA),DATA);
 }
 
 void odomkni()
 {
+    wait(1);
     char DATA[]= {0x00};
     poslemSpravu(VYTAH,0xcc,sizeof(DATA),DATA);
+    wait(1);
 }
 
 void stop()
@@ -174,283 +165,241 @@
 void hore()
 {
     char DATA[]= {0x02,0x64,0x00,0x00,0x00};
-    poslemSpravu(MOTOR,0xcc,sizeof(DATA),DATA);
+    poslemSpravu(MOTOR,0xcc,sizeof(DATA),DATA);   
 }
 
 void dole()
 {
     char DATA[]= {0x02,0x9c,0xff,0xff,0xff};
     poslemSpravu(MOTOR,0xcc,sizeof(DATA),DATA);
-     pc.attach(&prijmemSpravu);
 }
 
 void prijmemSpravu()
 {
-    for (int j=0; j<4; j++) {
-        while(true) {
-            if(pc.readable()==1) {
-                prijemSpravy[j]=pc.getc();
-                break;
-            }
-        }
-    }
+    //pc.attach(&prijmemSpravu);§
+    myled=0; 
 
-    int pom= prijemSpravy[3] + 1;
-
-    for (int j=0; j<pom; j++) {
-        while(true) {
-            if(pc.readable()==1) {
-                prijemSpravy[j+4]=pc.getc();
-                break;
+    for (int j=0;j<4;j++)
+    {
+        while(true)
+        {
+            if(pc.readable()==1)
+            {
+                prijemSpravy[j]=pc.getc(); 
+                break;                                 
             }
-        }
+        }    
     }
-    pc.attach(&prijmemSpravu);
-    rozhodni();
-    if (por<5) {
-                // pc.attach(&prijmemSpravu);
-                pohyb(poradie[por]);
-            
-                por++;
-            } else {
-                por=0;
-                pohyb(poradie[por]);
-            }
+    
+    int pom= prijemSpravy[3] + 1;
     
-    pc.attach(&prijmemSpravu);
+    for (int j=0;j<pom;j++)
+    {
+        while(true)
+        {
+            if(pc.readable()==1)
+            {
+                prijemSpravy[j+4]=pc.getc();
+                break;                                  
+            }
+        }    
+    }
+   // if(buff_index<100)
+     //   {
+            buffer_kto[buff_index]=prijemSpravy[2];
+            buffer_co[buff_index]=prijemSpravy[4];
+       //     buff_index++;
+        /*}
+    else
+    {
+       buff_index=0; 
+       buffer_kto[buff_index]=prijemSpravy[2];
+       buffer_co[buff_index]=prijemSpravy[4];
+       buff_index++; 
+    }*/
+myled=1; 
+   pc.attach(&prijmemSpravu);
 }
-/*
-void obsluz(int cislo)
-{
-     poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]);
-        diode_cislo[4]=1;
-        zamkni();
-
-}
-*/
 
 void rozhodni()
-{
-    switch(prijemSpravy[2]) {
-
+{ 
+    myled2=0; 
+    char bData=buffer_co[cyklus];
+  switch(buffer_kto[cyklus])
+    {
         case 0xb4: /* vytah tla4idlo 4 poschodie   */
-            if (diode_cislo[4]==0) {
-                zarad(4);
-            }
-            poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[4]=1;
-
-            break;
-
+        poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]);
+        diode_cislo[4]=1; 
+        
+       pohyb(4);
+            
+        break;
+        
         case 0xb3: /* vytah tla4idlo 3 poschodie   */
-
-            if (diode_cislo[3]==0) {
-                zarad(3);
-            }
-            poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[1]);
+        poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[1]);
             diode_cislo[3]=1;
-
-            break;
-
-        case 0xb2: /* vytah tla4idlo 2 poschodie   */
-
-            if (diode_cislo[2]==0) {
-                zarad(2);
-            }
-            poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[2]=1;
-
-            break;
-
-        case 0xb1: /* vytah tla4idlo 1 poschodie   */
-
-            if (diode_cislo[1]==0) {
-                zarad(1);
-            }
-            poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[1]=1;
-
-            break;
-
-        case 0xb0: /* vytah tla4idlo pr9zemie   */
-
-            if (diode_cislo[0]==0) {
-                zarad(0);
-            }
-            poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[0]=1;
-
-            break;
+           pohyb(3);
 
+        break;
+        
+        case 0xb2: /* vytah tla4idlo 2 poschodie   */
+        poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[1]);
+        diode_cislo[2]=1;
+        pohyb(2);
+        break;
+        
+        case 0xb1: /* vytah tla4idlo 1 poschodie   */
+        poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[1]);
+            diode_cislo[1]=1;
+            pohyb(1);
+        break;
+        
+        case 0xb0: /* vytah tla4idlo pr9zemie   */
+        poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[1]);
+            diode_cislo[0]=1;
+           pohyb(0);
+        break;
+        
         case 0xc4: /* chodba tla4idlo 4 poschodie   */
-
-            if (diode_cislo[4]==0) {
-                zarad(4);
-            }
-            poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[1]);
+        poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[1]);
             diode_cislo[4]=1;
-
-            break;
-
+            pohyb(4);
+        break;
+        
         case 0xc3: /* chodba tla4idlo 3 poschodie   */
-
-            if (diode_cislo[3]==0) {
-                zarad(3);
-            }
-            poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[1]);
+        poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[1]);
             diode_cislo[3]=1;
-
-            break;
-
+           pohyb(3);
+        break;
+        
         case 0xc2: /* chodba tla4idlo 2 poschodie   */
-
-            if (diode_cislo[2]==0) {
-                zarad(2);
-            }
-            poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[1]);
+        poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[1]);
             diode_cislo[2]=1;
-
-            break;
-
+           pohyb(2);
+        break;
+        
         case 0xc1: /* chodba tla4idlo 1 poschodie   */
-
-            if (diode_cislo[1]==0) {
-                zarad(1);
-            }
-            poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[1]);
+        poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[1]);
             diode_cislo[1]=1;
-
-            break;
-
+            pohyb(1);
+        break;
+        
         case 0xc0: /* chodba tla4idlo pr9zemie   */
-
-            if (diode_cislo[0]==0) {
-                zarad(0);
-            }
-            poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[1]);
+        poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[1]);
             diode_cislo[0]=1;
-
-            break;
-
-
+           pohyb(0);
+        break;
+        
+        
+        
+        
+        case 0xe4: /* info pre odomknutie 4 poschodie   */
+            if(bData==0x01&&diode_cislo[4]==1){stop();
+            poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[0]);
+            poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[0]);
+            diode_cislo[4]=0;
+            stav=4;}
+            if(bData==0x02&&stav==4){wait(1);odomkni();//}
+            /*for (int kk=0;kk<5;kk++)
+            {}*/
+            if (diode_cislo[0]==1) pohyb(0);
+            else if (diode_cislo[1]==1) pohyb(1);
+            else if (diode_cislo[2]==1) pohyb(2);
+            else if (diode_cislo[3]==1) pohyb(3);}
+            //else if (diode_cislo[4]==1) pohyb(4);
 
 
-        case 0xe4: /* info pre odomknutie 4 poschodie   */
+        break;
+        
+        case 0xe3: /* info pre odomknutie 3 poschodie   */
+            if(bData==0x01&&diode_cislo[3]==1){stop();
+            poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[0]);
+            poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[0]);
+            diode_cislo[3]=0;
+            stav=3;}
+            if(bData==0x02&&stav==3){wait(1);odomkni();
 
-            if(poradie[por]==4) {
+            if (diode_cislo[0]==1) pohyb(0);
+            else if (diode_cislo[1]==1) pohyb(1);
+            else if (diode_cislo[2]==1) pohyb(2);
+            //else if (diode_cislo[3]==1) pohyb(3);
+            else if (diode_cislo[4]==1) pohyb(4);}
+        break;
+        
+        case 0xe2: /* info pre odomknutie 2 poschodie   */
+            if(bData==0x01&&diode_cislo[2]==1){stop();
+            poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[0]);
+            poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[0]);
+            diode_cislo[2]=0;
+            stav=2;}
+            if(bData==0x02&&stav==2){wait(1);odomkni();//}
+
+            if (diode_cislo[0]==1) pohyb(0);
+            else if (diode_cislo[1]==1) pohyb(1);
+           // else if (diode_cislo[2]==1) pohyb(2);
+            else if (diode_cislo[3]==1) pohyb(3);
+            else if (diode_cislo[4]==1) pohyb(4);}
 
-                if(prijemSpravy[4]==0x01&&diode_cislo[4]==1) {
-                    stop();
-                    poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[0]);
-                    poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[0]);
-                    diode_cislo[4]=0;
-                    stav=4;
-                }
-                if(prijemSpravy[4]==0x02&&stav==4) {
-                    wait(1);
-                    odomkni();
-                    //por++;
-                }
-            }
+        break;
+        
+        case 0xe1: /* info pre odomknutie 1 poschodie   */
+            if(bData==0x01&&diode_cislo[1]==1){stop();
+            poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[0]);
+            poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[0]);
+            diode_cislo[1]=0;
+            stav=1;}
+            if(bData==0x02&&stav==1){wait(1);odomkni();//}
+        
+            if (diode_cislo[0]==1) pohyb(0);
+          //  else if (diode_cislo[1]==1) pohyb(1);
+            else if (diode_cislo[2]==1) pohyb(2);
+            else if (diode_cislo[3]==1) pohyb(3);
+            else if (diode_cislo[4]==1) pohyb(4);}
 
-            break;
+        break;
+        
+        case 0xe0: /* info pre odomknutie prízemie   */
+            if(bData==0x01&&diode_cislo[0]==1){stop();
+            poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[0]);
+            poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[0]);
+            diode_cislo[0]=0;
+            stav=0;}
+            if(bData==0x02&&stav==0){wait(1);odomkni();//}
 
-        case 0xe3: /* info pre odomknutie 3 poschodie   */
+            //if (diode_cislo[0]==1) pohyb(0);
+            if (diode_cislo[1]==1) pohyb(1);
+            else if (diode_cislo[2]==1) pohyb(2);
+            else if (diode_cislo[3]==1) pohyb(3);
+            else if (diode_cislo[4]==1) pohyb(4);}
+
+        break;
         
         
-        if(poradie[por]==3) {
-          //  por++;
+        
         
-            if(prijemSpravy[4]==0x01&&diode_cislo[3]==1) {
-                stop();
-                poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[0]);
-                poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[0]);
-                diode_cislo[3]=0;
-                stav=3;
-            }
-            if(prijemSpravy[4]==0x02&&stav==3) {
-                wait(1);
-                odomkni();
-                
-            }
-            
+        
+        case 0xf: /* zachranna brzda */
             
-            }
-            break;
-
-        case 0xe2: /* info pre odomknutie 2 poschodie   */
+        break;
         
-        if(poradie[por]==2) {
-            
-            if(prijemSpravy[4]==0x01&&diode_cislo[2]==1) {
-                stop();
-                poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[0]);
-                poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[0]);
-                diode_cislo[2]=0;
-                stav=2;
-            }
-            if(prijemSpravy[4]==0x02&&stav==2) {
-                wait(1);
-                odomkni();
-            }
-            
-            }
-            
-            break;
-
-        case 0xe1: /* info pre odomknutie 1 poschodie   */
-        if(poradie[por]==1) {
+        case 0xfe: /* watchdog */
             
-            if(prijemSpravy[4]==0x01&&diode_cislo[1]==1) {
-                stop();
-                poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[0]);
-                poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[0]);
-                diode_cislo[1]=0;
-                stav=1;
-            }
-            if(prijemSpravy[4]==0x02&&stav==1) {
-                wait(1);
-                odomkni();
-            }
-            
-            }
-            
-            break;
-
-        case 0xe0: /* info pre odomknutie prízemie   */
-        
-        if(poradie[por]==0) {
-            
-            if(prijemSpravy[4]==0x01&&diode_cislo[0]==1) {
-                stop();
-                poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[0]);
-                poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[0]);
-                diode_cislo[0]=0;
-                stav=0;
-            }
-            if(prijemSpravy[4]==0x02&&stav==0) {
-                wait(1);
-                odomkni();
-            }
-            
-            }
-            
-            break;
-
-
-
-
-
-        case 0xf: /* zachranna brzda */
-
-            break;
-
-        case 0xfe: /* watchdog */
-
-            break;
-        default:
-            break;
+        break;
+        default: break;
+    }  
+    /*if(cyklus<100)
+        {
+            //rozhodni(buffer_kto[cyklus], buffer_co[cyklus]);
+            cyklus++;
+        }
+    else
+    {
+       cyklus=0; 
+       //rozhodni(buffer_kto[cyklus], buffer_co[cyklus]);
+       //cyklus++; 
     }
+*/ //pc.attach(&prijmemSpravu);
+    myled=1; 
 }
 
 void poslemSpravu(char adrRX, char adrTX, int velkost, char DATA[] )