Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: model.cpp
- Revision:
- 9:97b26dcd1035
- Parent:
- 8:96c852630824
- Child:
- 10:dc94bacfccc6
--- 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 +};