Simon Hladek / Mbed 2 deprecated elevator1

Dependencies:   MMA8451Q mbed

Revision:
9:97b26dcd1035
Parent:
8:96c852630824
Child:
10:dc94bacfccc6
diff -r 96c852630824 -r 97b26dcd1035 model.cpp
--- a/model.cpp	Sun Dec 11 16:28:43 2016 +0000
+++ b/model.cpp	Mon Dec 12 22:25:35 2016 +0000
@@ -1,16 +1,13 @@
 #include "model.h"
-
-Model::Model(Serial *pci,Timer _tm):cmd(new Commands)
+int pom=0;
+DigitalOut cervena(LED1);
+DigitalOut zelena(LED2);
+Model::Model(Serial *pci):cmd(new Commands)
 {
     pc=pci;
     pc->baud(57600);
-    char data[1];
-    data[0]=0x43;
-//        for(int i =0;i<2;i++){
-//        sendPacket(0xa0,0xd0,0x00,data,1);}
-//          data[0]=0x44;
-//        for(int i =0;i<15;i++){
-//        sendPacket(0xa0,0xd0,0x00,data,1);}
+    pc->attach(this,&Model::SerialCallBack,Serial::RxIrq);
+    tc.attach(this,&Model::TickerCallBack,1);
     cmd->MotorDown[0]=0x2;
     cmd->MotorDown[1]=0xff;
     cmd->MotorDown[2]=0xff;
@@ -22,6 +19,11 @@
     cmd->MotorUp[3]=0x00;
     cmd->MotorUp[4]=0x14;
     cmd->MotorStop[0]=0x1;
+    cmd->Lock[0]=0x00;
+    watchDog[0]=0x01;
+   sendPacket(0xa0,0xfe,0x0, watchDog,1);
+    watchDog[0]=0x2;
+    DataIn= new char[6]();
     cmd->LedOn[0]=0x01;
     cmd->LedOff[0]=0x00;
     cmd->ArrowDown[0]=0x02;
@@ -39,14 +41,69 @@
     p1=1;
     p0=1;
 }
-void Model::setDataForResend(char targetAdd,char sourceAdd,int dataLength,char *data )
+
+void Model::SerialCallBack()
 {
+    pom++;
+    if(pom==1) {
+        zelena=0;
+    } else {
+        zelena=1;
+        pom=0;
+    }
+    startByteIn=pc->getc();
+    targetAdd=pc->getc();
+    sourceAdd=pc->getc();
+    DataLength=pc->getc();
+    for (unsigned int i=0; i< DataLength; i++) {
+        DataIn[i]=pc->getc();
+    }
+    CrcIn=pc->getc();
+    switch( sourceAdd) {
+        case 0xc4:
+        case 0xb4:
+            mapPoschodie.find("p4")->second=true;
+            break;
+        case 0xb3:
+        case 0xc3:
+            mapPoschodie.find("p3")->second=true;
+            break;
+        case 0xb2:
+        case 0xc2:
+            mapPoschodie.find("p2")->second=true;
+            break;
+        case 0xb1:
+        case 0xc1:
+            mapPoschodie.find("p1")->second=true;
+            break;
+        case 0xb0:
+        case 0xc0:
+            mapPoschodie.find("p0")->second=true;
+            break;
+        default:
+            ;
+    }
 
 }
 Serial* Model::getSerial(void)
 {
     return pc;
 }
+void Model::TickerCallBack()
+{
+    sendPacket(0xa0,0xfe,0x00, watchDog,1);
+    pom++;
+    if (pom==1) {
+        zelena =0;
+        cervena=1;
+    } else {
+        zelena=1;
+        cervena=0;
+        pom=0;
+    }
+
+}
+
 char Model::crcCalc(char targetAddr, char senderAddr, char *data,int DataSize)
 {
     int dataLenght = DataSize;
@@ -74,6 +131,136 @@
 }
 void Model::doSomething(char data)
 {
+
+    switch(data) {
+        case 0xe4:
+            p4=1;
+            poschodie=4;
+            cmd->ArrowDown[1]=0x34;
+            cmd->ArrowUp[1]=0x34;
+            switch(direction) {
+                case -1:
+                    sendPacket(0xa0,0x30,0x00,cmd->ArrowDown,2);
+                    break;
+                case 1:
+                    sendPacket(0xa0,0x30,0x00,cmd->ArrowUp,2);
+                    break;
+                default:
+                    ;
+            }
+            if( mapPoschodie.find("p4")->second==true) {
+                mapPoschodie.find("p4")->second=false;
+                sendPacket(0xa0,0x24,0x00,cmd->LedOff,1);
+                sendPacket(0xa0,0x14,0x00,cmd->LedOff,1);
+                stopMotor();
+                tmOut.attach(this,&Model::TimeOutCallBack,4);
+                tmOut2.attach(this,&Model::DoorUnlock,3);
+            };
+            break;
+        case 0xe3:
+            p3=1;
+            poschodie=3;
+            cmd->ArrowDown[1]=0x33;
+            cmd->ArrowUp[1]=0x33;
+            switch(direction) {
+                case -1:
+                    sendPacket(0xa0,0x30,0x00,cmd->ArrowDown,2);
+                    break;
+                case 1:
+                    sendPacket(0xa0,0x30,0x00,cmd->ArrowUp,2);
+                    break;
+                default:
+                    ;
+
+            }
+            if( mapPoschodie.find("p3")->second==true) {
+                mapPoschodie.find("p3")->second=false;
+                sendPacket(0xa0,0x13,0x00,cmd->LedOff,1);
+                sendPacket(0xa0,0x23,0x00,cmd->LedOff,1);
+                stopMotor();
+                tmOut.attach(this,&Model::TimeOutCallBack,4);
+                tmOut2.attach(this,&Model::DoorUnlock,3);
+            }
+            break;
+        case 0xe2:
+            poschodie=2;
+            p2=1;
+            cmd->ArrowDown[1]=0x32;
+            cmd->ArrowUp[1]=0x32;
+            switch(direction) {
+                case -1:
+                    sendPacket(0xa0,0x30,0x00,cmd->ArrowDown,2);
+                    break;
+                case 1:
+                    sendPacket(0xa0,0x30,0x00,cmd->ArrowUp,2);
+                    break;
+                default:
+                    ;
+
+            }
+
+
+            if( mapPoschodie.find("p2")->second==true) {
+                mapPoschodie.find("p2")->second=false;
+                sendPacket(0xa0,0x12,0x00,cmd->LedOff,1);
+                sendPacket(0xa0,0x22,0x00,cmd->LedOff,1);
+                stopMotor();
+                tmOut.attach(this,&Model::TimeOutCallBack,4);
+                tmOut2.attach(this,&Model::DoorUnlock,3);
+
+            }
+            break;
+        case 0xe1:
+            poschodie=1;
+            cmd->ArrowDown[1]=0x31;
+            cmd->ArrowUp[1]=0x31;
+            p1=1;
+            switch(direction) {
+                case -1:
+                    sendPacket(0xa0,0x30,0x00,cmd->ArrowDown,2);
+                    break;
+                case 1:
+                    sendPacket(0xa0,0x30,0x00,cmd->ArrowUp,2);
+                    break;
+                default:
+                    ;
+            }
+            if( mapPoschodie.find("p1")->second==true) {
+                mapPoschodie.find("p1")->second=false;
+                sendPacket(0xa0,0x11,0x00,cmd->LedOff,1);
+                sendPacket(0xa0,0x21,0x00,cmd->LedOff,1);
+                stopMotor();
+                tmOut.attach(this,&Model::TimeOutCallBack,4);
+                tmOut2.attach(this,&Model::DoorUnlock,3);
+            }
+            break;
+        case 0xe0:
+            poschodie=0;
+            p0=1;
+            cmd->ArrowDown[1]=0x50;
+            cmd->ArrowUp[1]=0x50;
+            switch(direction) {
+                case -1:
+                    sendPacket(0xa0,0x30,0x00,cmd->ArrowDown,2);
+                    break;
+                case 1:
+                    sendPacket(0xa0,0x30,0x00,cmd->ArrowUp,2);
+                    break;
+                default:
+                    ;
+            }
+            if( mapPoschodie.find("p0")->second==true) {
+                mapPoschodie.find("p0")->second=false;
+                sendPacket(0xa0,0x10,0x00,cmd->LedOff,1);
+                sendPacket(0xa0,0x20,0x00,cmd->LedOff,1);
+                stopMotor();
+                tmOut.attach(this,&Model::TimeOutCallBack,4);
+                tmOut2.attach(this,&Model::DoorUnlock,3);
+            }
+            break;
+        default:
+            ;
+    }
     if( mapPoschodie.find("p4")->second==true&&p4==true) {
         p4=false;
         sendPacket(0xa0,0x14,0x00,cmd->LedOn,1);
@@ -83,8 +270,7 @@
                 upMotor();
             }
         }
-    }
-    if( mapPoschodie.find("p3")->second==true&&p3==true) {
+    } else if( mapPoschodie.find("p3")->second==true&&p3==true) {
         p3=false;
         sendPacket(0xa0,0x13,0x00,cmd->LedOn,1);
         sendPacket(0xa0,0x23,0x00,cmd->LedOn,1);
@@ -95,9 +281,7 @@
                 downMotor();
             }
         }
-    }
-
-    if( mapPoschodie.find("p2")->second==true&&p2==true) {
+    } else if( mapPoschodie.find("p2")->second==true&&p2==true) {
         p2=false;
         sendPacket(0xa0,0x12,0x00,cmd->LedOn,1);
         sendPacket(0xa0,0x22,0x00,cmd->LedOn,1);
@@ -108,10 +292,7 @@
                 downMotor();
             }
         }
-    }
-
-
-    if( mapPoschodie.find("p1")->second==true&&p1==true) {
+    } else if( mapPoschodie.find("p1")->second==true&&p1==true) {
         p1=false;
         sendPacket(0xa0,0x11,0x00,cmd->LedOn,1);
         sendPacket(0xa0,0x21,0x00,cmd->LedOn,1);
@@ -121,165 +302,92 @@
             } else {
                 downMotor();
             }
+
         }
-    }
-
-    if( mapPoschodie.find("p0")->second==true&&p0==1) {
+    } else if( mapPoschodie.find("p0")->second==true&&p0==1) {
         p0=0;
         sendPacket(0xa0,0x10,0x00,cmd->LedOn,1);
         sendPacket(0xa0,0x20,0x00,cmd->LedOn,1);
-        if(mapPoschodie.find("p4")->second==false || mapPoschodie.find("p3")->second==false || mapPoschodie.find("p2")->second==false|| mapPoschodie.find("p1")->second==false  ) {
-            if(direction==0)
-                downMotor();
-        }
+//         if(mapPoschodie.find("p4")->second==false || mapPoschodie.find("p3")->second==false/* || mapPoschodie.find("p2")->second==false|| mapPoschodie.find("p1")->second==false  */) {
+        if(direction==0)
+            downMotor();
     }
-
-    switch(data) {
-        case 0xe4:
-            p4=1;
-            poschodie=4;
-            cmd->ArrowDown[1]=0x34;
-            cmd->ArrowUp[1]=0x34;
-            if(direction==-1) {
-                sendPacket(0xa0,0x30,0x00,cmd->ArrowDown,2);
-            } else {
-                sendPacket(0xa0,0x30,0x00,cmd->ArrowUp,2);
-            }
-            if( mapPoschodie.find("p4")->second==true) {
-                mapPoschodie.find("p4")->second=false;
-                sendPacket(0xa0,0x24,0x00,cmd->LedOff,1);
-                sendPacket(0xa0,0x14,0x00,cmd->LedOff,1);
-                stopMotor();
-                wait(3);
-                if(mapPoschodie.find("p3")->second==true||mapPoschodie.find("p2")->second==true||mapPoschodie.find("p1")->second==true||mapPoschodie.find("p0")->second==true) {
-                    downMotor();
-                }
-            }
-            break;
-        case 0xe3:
-            p3=1;
-            poschodie=3;
-            cmd->ArrowDown[1]=0x33;
-            cmd->ArrowUp[1]=0x33;
-            if(direction==-1) {
-                sendPacket(0xa0,0x30,0x00,cmd->ArrowDown,2);
-            } else {
-                sendPacket(0xa0,0x30,0x00,cmd->ArrowUp,2);
-            }
-            if( mapPoschodie.find("p3")->second==true) {
-                mapPoschodie.find("p3")->second=false;
-                sendPacket(0xa0,0x13,0x00,cmd->LedOff,1);
-                sendPacket(0xa0,0x23,0x00,cmd->LedOff,1);
-                stopMotor();
-                wait(3);
-                if(mapPoschodie.find("p2")->second==true||mapPoschodie.find("p1")->second==true||mapPoschodie.find("p0")->second==true) {
-                    downMotor();
-                } else if(mapPoschodie.find("p4")->second==true) {
-                    upMotor();
-                }
-            }
-            break;
-        case 0xe2:
-            poschodie=2;
-            p2=1;
-            cmd->ArrowDown[1]=0x32;
-            cmd->ArrowUp[1]=0x32;
-            if(direction==-1) {
-                sendPacket(0xa0,0x30,0x00,cmd->ArrowDown,2);
-            } else {
-                sendPacket(0xa0,0x30,0x00,cmd->ArrowUp,2);
-            }
-            if( mapPoschodie.find("p2")->second==true) {
-                mapPoschodie.find("p2")->second=false;
-                sendPacket(0xa0,0x12,0x00,cmd->LedOff,1);
-                sendPacket(0xa0,0x22,0x00,cmd->LedOff,1);
-                sendPacket(0xa0,0xf1,0x00,cmd->MotorStop,1);
-                wait(3);
-                if(mapPoschodie.find("p1")->second==true||mapPoschodie.find("p0")->second==true) {
-                    downMotor();
-                } else if(mapPoschodie.find("p3")->second==true||mapPoschodie.find("p4")->second==true) {
-                    upMotor();
-                }
-            }
-
-            break;
-        case 0xe1:
-            poschodie=1;
-            cmd->ArrowDown[1]=0x31;
-            cmd->ArrowUp[1]=0x31;
-            p1=1;
-
-            if(direction==-1) {
-                sendPacket(0xa0,0x30,0x00,cmd->ArrowDown,2);
-            } else {
-                sendPacket(0xa0,0x30,0x00,cmd->ArrowUp,2);
-            }
-            if( mapPoschodie.find("p1")->second==true) {
-                mapPoschodie.find("p1")->second=false;
-                sendPacket(0xa0,0x11,0x00,cmd->LedOff,1);
-                sendPacket(0xa0,0x21,0x00,cmd->LedOff,1);
-                stopMotor();
-                wait(3);
-                if(mapPoschodie.find("p0")->second==true) {
-                    downMotor();
-                } else if(mapPoschodie.find("p2")->second==true||mapPoschodie.find("p3")->second==true||mapPoschodie.find("p4")->second==true) {
-                    upMotor();
-                }
-            }
-            break;
-        case 0xe0:
-            poschodie=0;
-            p0=1;
-            cmd->ArrowDown[1]=0x50;
-            cmd->ArrowUp[1]=0x50;
-            if(direction==-1) {
-                sendPacket(0xa0,0x30,0x00,cmd->ArrowDown,2);
-            } else {
-                sendPacket(0xa0,0x30,0x00,cmd->ArrowUp,2);
-            }
-            if( mapPoschodie.find("p0")->second==true) {
-                mapPoschodie.find("p0")->second=false;
-                sendPacket(0xa0,0x10,0x00,cmd->LedOff,1);
-                sendPacket(0xa0,0x20,0x00,cmd->LedOff,1);
-                stopMotor();
-                wait(3);
-                if(mapPoschodie.find("p1")->second==true||mapPoschodie.find("p2")->second==true||mapPoschodie.find("p3")->second==true||mapPoschodie.find("p4")->second==true) {
-                    upMotor();
-                }
-            }
-
-            break;
-        default:
-            break;
-
-    }
-
 }
-
 void Model::setDoorStatus(bool mValue)
 {
     if(mValue==true) {
-        cmd->Lock[1]=0x01;//Lock door
+        cmd->Lock[0]=0x01;//Lock door
     } else {
-        cmd->Lock[1]=0x00;//;Unlock door
+        cmd->Lock[0]=0x00;//;Unlock door
     }
     sendPacket(0xa0,0xf0,0x0, cmd->Lock,1);
 }
+void Model::DoorUnlock()
+{
+    cmd->Lock[0]=0x00;//;Unlock door
+    sendPacket(0xa0,0xf0,0x0, cmd->Lock,1);
+}
 void Model::stopMotor()
 {
     direction=0;
     sendPacket(0xa0,0xf1,0x00,cmd->MotorStop,1);
-};
+
+
+}
 void Model::downMotor()
 {
     direction=-1;
     sendPacket(0xa0,0xf1,0x00,cmd->MotorDown,5);
-};
+    setDoorStatus(1);
+}
 void Model::upMotor()
 {
     direction=1;
     sendPacket(0xa0,0xf1,0x00,cmd->MotorUp,5);
-};
+    setDoorStatus(1);
+}
+void Model::TimeOutCallBack()
+{
+    switch(poschodie) {
+        case 4:
+            if(mapPoschodie.find("p3")->second==true||mapPoschodie.find("p2")->second==true||mapPoschodie.find("p1")->second==true||mapPoschodie.find("p0")->second==true) {
+                downMotor();
+            }
+            break;
+        case 3:
+            if(mapPoschodie.find("p2")->second==true||mapPoschodie.find("p1")->second==true||mapPoschodie.find("p0")->second==true) {
+                downMotor();
+            } else if(mapPoschodie.find("p4")->second==true) {
+                upMotor();
+            }
+            break;
+        case 2:
+            //
+            if(mapPoschodie.find("p1")->second==true||mapPoschodie.find("p0")->second==true) {
+                downMotor();
+            } else if(mapPoschodie.find("p3")->second==true||mapPoschodie.find("p4")->second==true) {
+                upMotor();
+            }
+            break;
+        case 1:
+
+            if(mapPoschodie.find("p0")->second==true) {
+                downMotor();
+            } else if(mapPoschodie.find("p2")->second==true||mapPoschodie.find("p3")->second==true||mapPoschodie.find("p4")->second==true) {
+                upMotor();
+            }
+            break;
+        case 0:
+            if(mapPoschodie.find("p1")->second==true||mapPoschodie.find("p2")->second==true||mapPoschodie.find("p3")->second==true||mapPoschodie.find("p4")->second==true) {
+                upMotor();
+            }
+            break;
+
+        default:
+            ;
+    }
+
+}
 unsigned char Model::crcArray[]= {
     0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
     157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
@@ -297,4 +405,4 @@
     87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
     233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
     116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53
-};
\ No newline at end of file
+};