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.
Revision 1:9ba4618df7b5, committed 2017-03-06
- Comitter:
- libv2001
- Date:
- Mon Mar 06 21:35:31 2017 +0000
- Parent:
- 0:fc7bc75ace9b
- Commit message:
- Final Version
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Mar 06 19:55:58 2017 +0000 +++ b/main.cpp Mon Mar 06 21:35:31 2017 +0000 @@ -6,24 +6,34 @@ Serial pc(USBTX, USBRX); -DigitalOut led1(LED1); +DigitalOut led1(LED1); // Error Led +DigitalOut led2(LED2); // Still Alive Answer +DigitalOut led3(LED3); // Short Message +DigitalOut led4(LED4); // Long Message DigitalOut dataOut(p11); InterruptIn dataIn(p12); +InterruptIn btn1(p15); +InterruptIn btn2(p14); + Thread sender; Thread receiver; + +bool detectingPreambule = false; +bool dataInState = false; + uint32_t elapsed; uint32_t dataToggleT[7]; int dataInToggleCount = 0; uint32_t elapsedMin, elapsedMax; +bool reading = false; +bool bitReceived = false; bool clkUp = false; - bool shortMessageRequested = false; bool longMessageRequested = false; - bool stillAliveRequested = false; int stillAliveCounter = 10; @@ -47,7 +57,6 @@ LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt flag clkUp = !clkUp; sender.signal_set(SIGNAL_CLK_TOGGLE); - led1 = !led1; } } @@ -55,7 +64,7 @@ { LPC_SC->PCLKSEL1 |=1<<12; //pclk = cclk timer2 LPC_SC->PCONP |=1<<22; //timer2 power on - LPC_TIM2->MR0 = 960000; //10 msec + LPC_TIM2->MR0 = 96000; //10 msec LPC_TIM2->MCR = 3; //interrupt and reset control //3 = Interrupt & reset timer2 on match //1 = Interrupt only, no reset of timer0 @@ -68,6 +77,8 @@ elapsed = LPC_TIM0->TC; LPC_TIM0->TC = 0; + dataInState = true; + dataToggleT[dataInToggleCount] = elapsed; dataInToggleCount = (dataInToggleCount + 1) % 7; if (elapsed < elapsedMin){ @@ -80,7 +91,9 @@ void DataInFall(){ elapsed = LPC_TIM0->TC; LPC_TIM0->TC = 0; - + + dataInState = false; + dataToggleT[dataInToggleCount] = elapsed; dataInToggleCount = (dataInToggleCount + 1) % 7; if (elapsed < elapsedMin){ @@ -90,6 +103,14 @@ } } +void ShortMessageInt(){ + shortMessageRequested = true; +} + +void LongMessageInt(){ + longMessageRequested = true; +} + // ************************* // Sender // ************************* @@ -159,7 +180,7 @@ int i = 0; buffer[0] = 0; while (i < length){ - buffer[0] = buffer[0] + 1; + buffer[0] = (length - i) > (MAX_LENGTH - 1) ? buffer[0] + 1 : 0xFF; int subLength = (length - i) > (MAX_LENGTH - 1) ? MAX_LENGTH - 1: length - i; memcpy(&buffer[1],&msg[i],subLength); SendFrame(buffer, subLength + 1, TYPE_DATA|FLAG_QUESTION); @@ -229,7 +250,7 @@ uint32_t delta = dataToggleT[0]; uint32_t tempMin = (uint32_t) ((float)delta * 0.9f); uint32_t tempMax = (uint32_t) ((float)delta * 1.1f); - bool success = true; + bool success = !dataInState; for (int i = 1; i < 7 && success; ++i){ if (dataToggleT[i] > tempMax || dataToggleT[i] < tempMin){ success = false; @@ -262,6 +283,7 @@ WaitForPreambule(); data = ReadByte(); if (data != START){ + //pc.printf("Bad Start Byte %02X\r\n", data); return false; } @@ -282,11 +304,13 @@ hisDiggest = (hisDiggest << 8) | ReadByte(); if(myDiggest != hisDiggest){ + //pc.printf("Bad Diggest %04X, %04X\r\n", myDiggest, hisDiggest); return false; } data = ReadByte(); if (data != END){ + //pc.printf("Bad End Byte %02X\r\n", data); return false; } return true; @@ -297,16 +321,26 @@ stillAliveRequested = true; } else { stillAliveCounter = 10; - pc.printf("The other device is still alive!!!\r\n"); + //pc.printf("The other device is still alive!!!\r\n"); + led2 = !led2; } } void HandleDataFrame(char * frame){ char frag = frame[FRAGMENTATION_IDX]; - char msg[MAX_LENGTH]; - msg[frame[LENGTH_IDX] - 1] = 0; - memcpy(msg, &frame[FRAGMENTATION_IDX + 1], frame[LENGTH_IDX] - 1); - pc.printf("Message %d: %s \r\n",frag,msg); + + if (frag == 0x00){ + led3 = !led3; + } else if (frag != 0xFF){ + led4 = 1; + } else { + led4 = 0; + } + + //char msg[MAX_LENGTH]; + //msg[frame[LENGTH_IDX] - 1] = 0; + //memcpy(msg, &frame[FRAGMENTATION_IDX + 1], frame[LENGTH_IDX] - 1); + //pc.printf("Message %d: %s \r\n",frag,msg); } void HandleFrame(char * frame){ @@ -319,7 +353,7 @@ HandleDataFrame(frame); break; default: - pc.printf("Unknown Frame Type : %02X\r\n", frame[TYPE_FLAG_IDX]); + //pc.printf("Unknown Frame Type : %02X\r\n", frame[TYPE_FLAG_IDX]); break; } } @@ -328,9 +362,11 @@ char frame[80]; while(true){ if(!readFrame(frame)){ - pc.printf("Error while receiving frame\r\n"); + //pc.printf("Error while receiving frame\r\n"); + led1 = 1; continue; } + led1 = 0; HandleFrame(frame); } } @@ -348,6 +384,9 @@ dataIn.rise(DataInRise); dataIn.fall(DataInFall); + btn1.rise(&ShortMessageInt); + btn2.rise(&LongMessageInt); + sender.start(SenderMain); receiver.start(ReceiverMain);