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: communication.cpp
- Revision:
- 12:1c7b59097090
- Parent:
- 11:95e4e04a7dd2
- Child:
- 13:e3089b058fab
--- a/communication.cpp Sun Dec 18 13:52:01 2016 +0000
+++ b/communication.cpp Mon Dec 19 17:47:06 2016 +0000
@@ -6,17 +6,21 @@
communication::communication(Serial *_pc):zelena(LED2),cervena(LED1)
{
pc=_pc;
- pom =0;
+ pom =0;
+ sourceAdd=0x05;
pc->baud(57600);
tc.attach(this,&communication::TickerCallBack,1);
pc->attach(this,&communication::SerialCallBack,Serial::RxIrq);
-
DataIn= new char[6]();
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;
+ watchDog[0]=0x01;
+ sendPacket(0xa0,0xfe,0x0, watchDog,1);
+ watchDog[1]=0x02;
}
unsigned char communication::crcArray[]= {
@@ -51,21 +55,26 @@
}
void communication::sendPacket(char startByte,char target,char source,char *data,int DataSize)
{
- //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]);
+ sendDataOk=true;
+ int cnt=0;
+ while(sendDataOk) {
+ //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);
}
- pc->putc(crc8);
}
void communication::TickerCallBack()
{
-// sendPacket(0xa0,0xfe,0x00, watchDog,1);
+ sendPacket(0xa0,0xfe,0x00, watchDog,1);
pom++;
if (pom==1) {
zelena =0;
@@ -75,17 +84,10 @@
cervena=0;
pom=0;
}
-
}
void communication::SerialCallBack()
{
- pom++;
- if(pom==1) {
- zelena=0;
- } else {
- zelena=1;
- pom=0;
- }
+
startByteIn=pc->getc();
targetAdd=pc->getc();
sourceAdd=pc->getc();
@@ -93,31 +95,38 @@
for (unsigned int i=0; i< DataLength; i++) {
DataIn[i]=pc->getc();
}
-// if(DataLength!=0x00)
CrcIn=pc->getc();
switch( sourceAdd) {
case 0xc4:
case 0xb4:
- mapPoschodie.find("p4")->second=true;
+ if(poschodie!=4)
+ mapPoschodie.find("p4")->second=true;
break;
case 0xb3:
case 0xc3:
- mapPoschodie.find("p3")->second=true;
+ if(poschodie!=3)
+ mapPoschodie.find("p3")->second=true;
break;
case 0xb2:
case 0xc2:
- mapPoschodie.find("p2")->second=true;
+ if(poschodie!=2)
+ mapPoschodie.find("p2")->second=true;
break;
case 0xb1:
case 0xc1:
- mapPoschodie.find("p1")->second=true;
+ if(poschodie!=1)
+ mapPoschodie.find("p1")->second=true;
break;
case 0xb0:
case 0xc0:
- mapPoschodie.find("p0")->second=true;
+ if(poschodie!=0)
+ mapPoschodie.find("p0")->second=true;
break;
default:
;
}
+ //osetrenie ACK
+ if(sourceAdd==0x00)
+ sendDataOk=false;
+}
-}