Receiver demo for the Manchester encoding library using UART's hardware.
Dependencies: CRC16 ManchesterMsg ManchesterUART mbed
Example of a Manchester code receiver using the ManchesterUART library.
Diff: main.cpp
- Revision:
- 0:a508b645fc7e
- Child:
- 1:3b3e8080688f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Nov 22 16:53:15 2017 +0000 @@ -0,0 +1,53 @@ +#include "mbed.h" +#include "ManchesterUART.h" +#include "CRC16.h" + +DigitalOut led(LED1); +ManchesterUART man(p28, p27, 230400); // Tx pin name, Rx pin name, speed [bps] +ManchesterMsg msg(100); // Message container (max bytes) +char str[80]; // Storage for the received array of char +uint32_t val; // Storage for the value received +CRC16 crc16; // CRC16 object +unsigned short recvCRC16; // CRC16 received in the message +unsigned short calcCRC16; // CRC16 calculated + +int main(void) { + while(1) { + if(man.receive(msg)) { // Receive message + + // Print data length and raw data bytes + printf("\r\n----------------------------------------\r\n"); + printf("Message length: %d\r\n", msg.len); + printf("Raw data :\r\n"); + for(size_t i = 0; i < msg.len; i++) { + if((i + 1) % 10 == 0) + printf(" %.2x\r\n", msg.data[i]); + else + printf(" %.2x", msg.data[i]); + } + printf("\r\n\r\n"); + + // Calculate CRC16. Exclude CRC bytes (last two bytes) from calculation. + calcCRC16 = crc16.calc(msg.data, msg.len - 2); + printf("Calculated CRC16 = %d\r\n", calcCRC16); + + // Extract data and CRC16 from the message + msg >> str >> val >> recvCRC16; +// + printf("Received CRC16 = %d\r\n", recvCRC16); + printf("\r\n"); + + if( calcCRC16 == recvCRC16) { + printf("Received data :\r\n"); + printf(" str = %s\r\n", str); + printf(" val = 0x%x\r\n", val); + } + else + printf("CRC error\r\n"); + } + else + printf("Error = %d\r\n", man.lastError()); + + led = !led; + } +}