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:
- 12:1c7b59097090
- Parent:
- 11:95e4e04a7dd2
- Child:
- 13:e3089b058fab
--- a/model.cpp Sun Dec 18 13:52:01 2016 +0000 +++ b/model.cpp Mon Dec 19 17:47:06 2016 +0000 @@ -2,13 +2,12 @@ int pom=0; DigitalOut cervena(LED1); DigitalOut zelena(LED2); -Model::Model(Serial *pci) +Model::Model(Serial *pci):communication(pci) { - - + sendDataOk=false; cmd= new Commands(); pc=pci; - pc->baud(57600); +// pc->baud(57600); cmd->MotorDown[0]=0x2; cmd->MotorDown[1]=0xff; cmd->MotorDown[2]=0xff; @@ -21,141 +20,132 @@ cmd->MotorUp[4]=0x14; cmd->MotorStop[0]=0x1; cmd->Lock[0]=0x00; - watchDog[0]=0x01; - sendDataOk = true; +// watchDog[0]=0x01; +// pc->attach(this,&Model::SerialCallBack,Serial::RxIrq); +// tc.attach(this,&Model::TickerCallBack,1); + //odosle packet na reset watchDogu-u vzdy pri vytvoreni objektu // sendPacket(0xa0,0xfe,0x0, watchDog,1); -// sendPacket(0xa0,0xf,0x0, cmd->Lock,1); - watchDog[0]=0x2; - DataIn= new char[6](); +// watchDog[0]=0x02; +// DataIn= new char[6](); cmd->LedOn[0]=0x01; cmd->LedOff[0]=0x00; cmd->ArrowDown[0]=0x02; cmd->ArrowUp[0]=0x01; - mapPoschodie.insert(pair<string, bool>("p1",false)); - mapPoschodie.insert(pair<string, bool>("p2",false)); - mapPoschodie.insert(pair<string, bool>("p3",false)); - mapPoschodie.insert(pair<string, bool>("p4",false)); - mapPoschodie.insert(pair<string, bool>("p0",false)); - poschodie=4; +// mapPoschodie.insert(pair<string, bool>("p1",false)); +// mapPoschodie.insert(pair<string, bool>("p2",false)); +// mapPoschodie.insert(pair<string, bool>("p3",false)); +// mapPoschodie.insert(pair<string, bool>("p4",false)); +// mapPoschodie.insert(pair<string, bool>("p0",false)); +// poschodie=4; direction=0; p4=1; p3=1; p2=1; p1=1; p0=1; - pc->attach(this,&Model::SerialCallBack,Serial::RxIrq); -// tc.attach(this,&Model::TickerCallBack,1); -} + -void Model::SerialCallBack() -{ -// pom++; -// if(pom==1) { -// zelena=0; -// cervena=0; +NVIC_SetPriority(LPTimer_IRQn, 255); +} +// +//void Model::SerialCallBack() +//{ +// +// 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: +// if(poschodie!=4) +// mapPoschodie.find("p4")->second=true; +// break; +// case 0xb3: +// case 0xc3: +// if(poschodie!=3) +// mapPoschodie.find("p3")->second=true; +// break; +// case 0xb2: +// case 0xc2: +// if(poschodie!=2) +// mapPoschodie.find("p2")->second=true; +// break; +// case 0xb1: +// case 0xc1: +// if(poschodie!=1) +// mapPoschodie.find("p1")->second=true; +// break; +// case 0xb0: +// case 0xc0: +// if(poschodie!=0) +// mapPoschodie.find("p0")->second=true; +// break; +// default: +// ; +// } +// //osetrenie ACK +// if(sourceAdd==0x00) +// sendDataOk=false; +////// zelena=0; +////// cervena=0; +//// } +//} +//void Model::TickerCallBack() +//{ +// sendPacket(0xa0,0xfe,0x00, watchDog,1); +// pom++; +// if (pom==1) { +// zelena =0; +// cervena=1; // } else { // zelena=1; -// cervena=1; +// cervena=0; // 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: - if(poschodie!=4) - mapPoschodie.find("p4")->second=true; - break; - case 0xb3: - case 0xc3: - if(poschodie!=3) - mapPoschodie.find("p3")->second=true; - break; - case 0xb2: - case 0xc2: - if(poschodie!=2) - mapPoschodie.find("p2")->second=true; - break; - case 0xb1: - case 0xc1: - if(poschodie!=1) - mapPoschodie.find("p1")->second=true; - break; - case 0xb0: - case 0xc0: - if(poschodie!=0) - mapPoschodie.find("p0")->second=true; - break; - default: - ; - } -// if(startByteIn==0xa0&&targetAdd==0x00&&sourceAdd==0x00&&DataLength==0x00) { -// sendDataOk=false; -// zelena=0; -// cervena=0; +// +//} +// +//char Model::crcCalc(char targetAddr, char senderAddr, char *data,int DataSize) +//{ +// int dataLenght = DataSize; +// char crc = 0x00; +// crc = crcArray[crc^targetAddr]; +// crc = crcArray[crc^senderAddr]; +// for(int i = 0 ; i < dataLenght ; i++) { +// crc = crcArray[crc^data[i]]; // } - -} -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; - char crc = 0x00; - crc = crcArray[crc^targetAddr]; - crc = crcArray[crc^senderAddr]; - for(int i = 0 ; i < dataLenght ; i++) { - crc = crcArray[crc^data[i]]; - } - return crc; -} -void Model::sendPacket(char startByte,char target,char source,char *data,int DataSize) -{ +// return crc; +//} +//void Model::sendPacket(char startByte,char target,char source,char *data,int DataSize) +//{ // sendDataOk=true; - //packet format : || start byte: a0 | reciever adress - 1B | sender adress - 1B | data lenght - 1B | data - 0-265B | crc8 - 1B || -// do{ - -// cervena=1; - int dataLenght = DataSize; - char crc8 = crcCalc(target, source, data,dataLenght); - pc->putc(startByte); - pc->putc(target); - pc->putc(source); - pc->putc(dataLenght); - for (int i = 0 ; i < dataLenght ; i++) { - pc->putc(data[i]); - } - pc->putc(crc8); - +// int cnt=0; +// while(sendDataOk){ +// cnt++; +// if(cnt==5){sendDataOk=false;cnt=0;} +// //packet format : || start byte: a0 | reciever adress - 1B | sender adress - 1B | data lenght - 1B | data - 0-265B | crc8 - 1B || +// int dataLenght = DataSize; +// char crc8 = crcCalc(target, source, data,dataLenght); +// pc->putc(startByte); +// pc->putc(target); +// pc->putc(source); +// pc->putc(dataLenght); +// for (int i = 0 ; i < dataLenght ; i++) { +// pc->putc(data[i]); +// } +// pc->putc(crc8); // wait(0.003); - -// } while(sendDataOk); -// zelena=1; - -} +// } +//} void Model::doSomething(char data) { - +data=getSourceAdd(); switch(data) { case 0xe4: p4=1; @@ -195,7 +185,6 @@ break; default: ; - } if( mapPoschodie.find("p3")->second==true) { mapPoschodie.find("p3")->second=false; @@ -222,8 +211,6 @@ ; } - - if( mapPoschodie.find("p2")->second==true) { mapPoschodie.find("p2")->second=false; sendPacket(0xa0,0x12,0x00,cmd->LedOff,1); @@ -258,6 +245,7 @@ tmOut2.attach(this,&Model::DoorUnlock,3); } break; + case 0xe0: poschodie=0; p0=1; @@ -290,60 +278,58 @@ sendPacket(0xa0,0x14,0x00,cmd->LedOn,1); sendPacket(0xa0,0x24,0x00,cmd->LedOn,1); if(direction==0) { //chod nahor - if(poschodie<4) { + if(poschodie<4) upMotor(); - } + } } 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); if(direction==0) { - if(poschodie<3) { + if(poschodie<3) upMotor(); - } else { + else downMotor(); - } + } } 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); if(direction==0) { - if(poschodie<2) { + if(poschodie<2) upMotor(); - } else { + else downMotor(); - } + } } 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); if(direction==0) { - if(poschodie<1) { + if(poschodie<1) upMotor(); - } else { + else downMotor(); - } } } 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(); } } void Model::setDoorStatus(bool mValue) { - if(mValue==true) { + if(mValue==true) cmd->Lock[0]=0x01;//Lock door - } else { + else cmd->Lock[0]=0x00;//;Unlock door - } + sendPacket(0xa0,0xf0,0x0, cmd->Lock,1); } void Model::DoorUnlock() @@ -386,7 +372,6 @@ } 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) { @@ -394,7 +379,6 @@ } 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) {