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

Dependencies:   MMA8451Q mbed

Revision:
6:83b531eead03
Parent:
5:c1952cbf8111
Child:
7:8786833154ff
--- a/main.cpp	Thu Jan 04 23:04:53 2018 +0000
+++ b/main.cpp	Fri Jan 05 21:10:58 2018 +0000
@@ -20,7 +20,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 +35,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    // |------------------------------------------|
@@ -76,63 +76,71 @@
 
 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;
 
 
 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]);
+            }
         }
-       */
+
 
-    
-    /*stop();
-    wait(1);
-    hore();*/
-}   
+
+    }
 }
 
 void zarad(int co)
 {
-    if (zar<5)
-        {
-            poradie[zar]=co;
-            zar++;
-        }
-    else
-    {
+    if (zar<5) {
+        poradie[zar]=co;
+        zar++;
+    } else {
         poradie[0]=co;
         zar=1;
     }
 }
 
-void pohyb( )
+void pohyb(int kam )
 {
     zamkni();
-    if (stav < poradie[por]) hore();
-    if (stav > poradie[por]) dole();
+    if (stav < kam) { pc.attach(&prijmemSpravu);hore();}
+    if (stav > kam) { pc.attach(&prijmemSpravu);dole();}
 
     /*
     switch(stav)
     {
         case 5: dole(); break;
-        case 4: 
+        case 4:
             if(diode_cislo[4]==1)
          break;
         case 3: break;
@@ -166,208 +174,274 @@
 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()
 {
-    //pc.attach(&prijmemSpravu);
-    for (int j=0;j<4;j++)
-    {
-        while(true)
-        {
-            if(pc.readable()==1)
-            {
-                prijemSpravy[j]=pc.getc(); 
-                break;                                 
+    for (int j=0; j<4; j++) {
+        while(true) {
+            if(pc.readable()==1) {
+                prijemSpravy[j]=pc.getc();
+                break;
             }
-        }    
+        }
+    }
+
+    int pom= prijemSpravy[3] + 1;
+
+    for (int j=0; j<pom; j++) {
+        while(true) {
+            if(pc.readable()==1) {
+                prijemSpravy[j+4]=pc.getc();
+                break;
+            }
+        }
     }
     
-    int pom= prijemSpravy[3] + 1;
+    rozhodni();
     
-    for (int j=0;j<pom;j++)
-    {
-        while(true)
-        {
-            if(pc.readable()==1)
-            {
-                prijemSpravy[j+4]=pc.getc();
-                break;                                  
-            }
-        }    
-    }
-   pc.attach(&prijmemSpravu);
+    pc.attach(&prijmemSpravu);
 }
 /*
 void obsluz(int cislo)
 {
      poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]);
-        diode_cislo[4]=1; 
+        diode_cislo[4]=1;
         zamkni();
-    
+
 }
 */
 
 void rozhodni()
 {
-  switch(prijemSpravy[2])
-    {
+    switch(prijemSpravy[2]) {
+
         case 0xb4: /* vytah tla4idlo 4 poschodie   */
-            if (diode_cislo[4]==0) { zarad(4);}    
+            if (diode_cislo[4]==0) {
+                zarad(4);
+            }
             poslemSpravu(VYTAH_DIODA_4,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[4]=1; 
-        
+            diode_cislo[4]=1;
+
+            break;
+
+        case 0xb3: /* vytah tla4idlo 3 poschodie   */
+
+            if (diode_cislo[3]==0) {
+                zarad(3);
+            }
+            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;
+
+        case 0xc4: /* chodba tla4idlo 4 poschodie   */
+
+            if (diode_cislo[4]==0) {
+                zarad(4);
+            }
+            poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[1]);
+            diode_cislo[4]=1;
+
+            break;
+
+        case 0xc3: /* chodba tla4idlo 3 poschodie   */
+
+            if (diode_cislo[3]==0) {
+                zarad(3);
+            }
+            poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[1]);
+            diode_cislo[3]=1;
+
+            break;
+
+        case 0xc2: /* chodba tla4idlo 2 poschodie   */
+
+            if (diode_cislo[2]==0) {
+                zarad(2);
+            }
+            poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[1]);
+            diode_cislo[2]=1;
+
+            break;
+
+        case 0xc1: /* chodba tla4idlo 1 poschodie   */
+
+            if (diode_cislo[1]==0) {
+                zarad(1);
+            }
+            poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[1]);
+            diode_cislo[1]=1;
+
+            break;
+
+        case 0xc0: /* chodba tla4idlo pr9zemie   */
+
+            if (diode_cislo[0]==0) {
+                zarad(0);
+            }
+            poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[1]);
+            diode_cislo[0]=1;
+
+            break;
+
+
+
+
+        case 0xe4: /* info pre odomknutie 4 poschodie   */
+
+            if(poradie[por]==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 0xe3: /* info pre odomknutie 3 poschodie   */
         
         
-            
-        break;
-        
-        case 0xb3: /* vytah tla4idlo 3 poschodie   */
-        poslemSpravu(VYTAH_DIODA_3,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[3]=1;
-            zamkni();
-            if (stav <3) hore();
-            if (stav >3) dole();
-        break;
-        
-        case 0xb2: /* vytah tla4idlo 2 poschodie   */
-        poslemSpravu(VYTAH_DIODA_2,0xCC,0x01, &diode_DATA[1]);
-        diode_cislo[2]=1;
-        zamkni();
-            if (stav <2) hore();
-        if (stav >2) dole();
-        break;
-        
-        case 0xb1: /* vytah tla4idlo 1 poschodie   */
-        poslemSpravu(VYTAH_DIODA_1,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[1]=1;
-            zamkni();
-            if (stav <1) hore();
-        if (stav >1) dole();
-        break;
+        if(poradie[por]==3) {
+          //  por++;
         
-        case 0xb0: /* vytah tla4idlo pr9zemie   */
-        poslemSpravu(VYTAH_DIODA_P,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[0]=1;
-            zamkni();
-            if (stav <0) hore();
-        if (stav >0) dole();
-        break;
-        
-        case 0xc4: /* chodba tla4idlo 4 poschodie   */
-        poslemSpravu(POSCHODIE_DIODA_4,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[4]=1;
-            zamkni();
-            if (stav <4) hore();
-        if (stav >4) dole();
-        break;
-        
-        case 0xc3: /* chodba tla4idlo 3 poschodie   */
-        poslemSpravu(POSCHODIE_DIODA_3,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[3]=1;
-            zamkni();
-            if (stav <3) hore();
-        if (stav >3) dole();
-        break;
-        
-        case 0xc2: /* chodba tla4idlo 2 poschodie   */
-        poslemSpravu(POSCHODIE_DIODA_2,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[2]=1;
-            zamkni();
-            if (stav <2) hore();
-        if (stav >2) dole();
-        break;
-        
-        case 0xc1: /* chodba tla4idlo 1 poschodie   */
-        poslemSpravu(POSCHODIE_DIODA_1,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[1]=1;
-            zamkni();
-            if (stav <1) hore();
-        if (stav >2) dole();
-        break;
+            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();
+                
+            }
+            
+            
+            }
+            break;
+
+        case 0xe2: /* info pre odomknutie 2 poschodie   */
         
-        case 0xc0: /* chodba tla4idlo pr9zemie   */
-        poslemSpravu(POSCHODIE_DIODA_P,0xCC,0x01, &diode_DATA[1]);
-            diode_cislo[0]=1;
-            zamkni();
-            if (stav <0) hore();
-        if (stav >0) dole();
-            //hore();
-        break;
-        
-        
-        
-        
-        case 0xe4: /* info pre odomknutie 4 poschodie   */
-          
-          if(poradie[zar]==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();}
-        }
-        
-        break;
-        
-        case 0xe3: /* info pre odomknutie 3 poschodie   */
-            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();}
-        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) {
+            
+            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   */
         
-        case 0xe2: /* info pre odomknutie 2 poschodie   */
-            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(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(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;
-        
-        
-        
-        
-        
+        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;
-        
+
+            break;
+
         case 0xfe: /* watchdog */
-            
-        break;
-        default: break;
-    }  
+
+            break;
+        default:
+            break;
+    }
 }
 
 void poslemSpravu(char adrRX, char adrTX, int velkost, char DATA[] )
@@ -400,22 +474,18 @@
 
 void kontrola()
 {
-    char kontrola[5]={0,0,0,0,0};
+    char kontrola[5]= {0,0,0,0,0};
 
-    for(int i=0;i<5;i++)
-        {
-            while(true)
-            {
-                if(pc.readable()==1)
-                {
-                    kontrola[i]=pc.getc();
-                    break;  
-                }
+    for(int i=0; i<5; i++) {
+        while(true) {
+            if(pc.readable()==1) {
+                kontrola[i]=pc.getc();
+                break;
             }
         }
-      
-    if(kontrola[0]!=0xA0&&kontrola[1]!=0x00&&kontrola[2]!=0x00&&kontrola[3]!=0x00&&kontrola[4]!=0x00)
-        {
-           // poslemSpravu();
-        }
+    }
+
+    if(kontrola[0]!=0xA0&&kontrola[1]!=0x00&&kontrola[2]!=0x00&&kontrola[3]!=0x00&&kontrola[4]!=0x00) {
+        // poslemSpravu();
+    }
 }
\ No newline at end of file