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.
Dependencies: mbed
main.cpp@3:57de536c4759, 2019-08-15 (annotated)
- Committer:
- pmic
- Date:
- Thu Aug 15 11:24:15 2019 +0000
- Revision:
- 3:57de536c4759
- Parent:
- 2:41ff1808bdf2
- Child:
- 4:d60840a04ddc
enhance
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| pmic | 3:57de536c4759 | 1 | // FORMAT_CODE_START |
| pmic | 3:57de536c4759 | 2 | // FORMAT_CODE_START |
| pmic | 3:57de536c4759 | 3 | // FORMAT_CODE_START |
| pmic | 0:03153e3cb89f | 4 | #include "mbed.h" |
| pmic | 0:03153e3cb89f | 5 | |
| pmic | 3:57de536c4759 | 6 | /* Notes pmic 15.08.2019: |
| pmic | 0:03153e3cb89f | 7 | - |
| pmic | 0:03153e3cb89f | 8 | */ |
| pmic | 0:03153e3cb89f | 9 | |
| pmic | 0:03153e3cb89f | 10 | Serial pc(SERIAL_TX, SERIAL_RX); // serial connection via USB - programmer |
| pmic | 0:03153e3cb89f | 11 | Timer twhile; // timer for time measurement (usage in while(1), without timer attached) |
| pmic | 0:03153e3cb89f | 12 | |
| pmic | 0:03153e3cb89f | 13 | Serial TFmini(PC_10, PC_11); // TX, RX |
| pmic | 3:57de536c4759 | 14 | |
| pmic | 3:57de536c4759 | 15 | int16_t dist; // actual distance measurements of LiDAR |
| pmic | 3:57de536c4759 | 16 | int16_t strength; // signal strength of LiDAR |
| pmic | 3:57de536c4759 | 17 | uint16_t checksum; // save check value |
| pmic | 3:57de536c4759 | 18 | |
| pmic | 3:57de536c4759 | 19 | volatile uint8_t uartData[9]; // buffer for seriel uart LiDar data |
| pmic | 3:57de536c4759 | 20 | volatile uint8_t cnt; // dataCounter |
| pmic | 3:57de536c4759 | 21 | |
| pmic | 3:57de536c4759 | 22 | volatile bool receiveComplete; |
| pmic | 3:57de536c4759 | 23 | const uint8_t HEADER = 0x59; //frame header of data package |
| pmic | 3:57de536c4759 | 24 | const uint16_t MAXDIST = 0xFFFF; // max. value of distance |
| pmic | 3:57de536c4759 | 25 | |
| pmic | 2:41ff1808bdf2 | 26 | void onCharReceived(); |
| pmic | 1:ce38967a0d22 | 27 | |
| pmic | 3:57de536c4759 | 28 | /* |
| pmic | 2:41ff1808bdf2 | 29 | const uint8_t enter_config_buf[8] = {0x42, 0x57, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02}; // 42 57 02 00 00 00 01 02 |
| pmic | 3:57de536c4759 | 30 | // const uint8_t config_buf[8] = {0x42, 0x57, 0x02, 0x00, 0x00, 0x00, 0x01, 0x06}; // 42 57 02 00 00 00 01 06 (Standard format, as show in in Table 6) |
| pmic | 2:41ff1808bdf2 | 31 | // const uint8_t config_buf[8] = {0x42, 0x57, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1A}; // 42 57 02 00 00 00 00 1A (Output unit of distance data is mm) |
| pmic | 3:57de536c4759 | 32 | const uint8_t config_buf[8] = {0x42, 0x57, 0x02, 0x00, 0x00, 0x00, 0x01, 0x1A}; // 42 57 02 00 00 00 00 1A (Output unit of distance data is cm) |
| pmic | 2:41ff1808bdf2 | 33 | // const uint8_t config_buf[8] = {0x42, 0x57, 0x02, 0x00, 0x00, 0x00, 0x04, 0x06}; // 42 57 02 00 00 00 04 06 (Pixhawk data format) |
| pmic | 2:41ff1808bdf2 | 34 | const uint8_t exit_config_buf[8] = {0x42, 0x57, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02}; // 42 57 02 00 00 00 00 02 |
| pmic | 3:57de536c4759 | 35 | */ |
| pmic | 0:03153e3cb89f | 36 | |
| pmic | 0:03153e3cb89f | 37 | // main program and control loop |
| pmic | 0:03153e3cb89f | 38 | // ----------------------------------------------------------------------------- |
| pmic | 0:03153e3cb89f | 39 | int main() |
| pmic | 0:03153e3cb89f | 40 | { |
| pmic | 3:57de536c4759 | 41 | pc.baud(115200); // for serial communication to pc |
| pmic | 3:57de536c4759 | 42 | |
| pmic | 3:57de536c4759 | 43 | TFmini.baud(115200); // for serial uart communication from TFmini |
| pmic | 3:57de536c4759 | 44 | dist = 0; |
| pmic | 3:57de536c4759 | 45 | strength = 0; |
| pmic | 3:57de536c4759 | 46 | checksum = 0; |
| pmic | 3:57de536c4759 | 47 | cnt = 0; |
| pmic | 3:57de536c4759 | 48 | receiveComplete = false; |
| pmic | 0:03153e3cb89f | 49 | TFmini.attach(&onCharReceived, Serial::RxIrq); |
| pmic | 3:57de536c4759 | 50 | |
| pmic | 2:41ff1808bdf2 | 51 | // twhile.start(); // timer for time measurement (usage in while(1), without timer attached) |
| pmic | 0:03153e3cb89f | 52 | while(1) { |
| pmic | 3:57de536c4759 | 53 | if( receiveComplete ) { |
| pmic | 3:57de536c4759 | 54 | pc.printf("%i %i \r\n", dist, strength); |
| pmic | 2:41ff1808bdf2 | 55 | // pc.printf("%10.6e %10i %10i \r\n", dt, dist, strength); |
| pmic | 3:57de536c4759 | 56 | receiveComplete = false; |
| pmic | 1:ce38967a0d22 | 57 | } |
| pmic | 2:41ff1808bdf2 | 58 | } |
| pmic | 2:41ff1808bdf2 | 59 | } |
| pmic | 2:41ff1808bdf2 | 60 | |
| pmic | 2:41ff1808bdf2 | 61 | void onCharReceived() |
| pmic | 2:41ff1808bdf2 | 62 | { |
| pmic | 3:57de536c4759 | 63 | /* |
| pmic | 3:57de536c4759 | 64 | if(TFmini.readable()) { |
| pmic | 3:57de536c4759 | 65 | uartData[cnt] = TFmini.getc(); |
| pmic | 3:57de536c4759 | 66 | if( uartData[0] != HEADER ) { |
| pmic | 3:57de536c4759 | 67 | cnt = 0; |
| pmic | 3:57de536c4759 | 68 | } else if( cnt == 1 && uartData[1] != HEADER ) { |
| pmic | 3:57de536c4759 | 69 | cnt = 0; |
| pmic | 3:57de536c4759 | 70 | } else if( cnt == 8 ) { |
| pmic | 3:57de536c4759 | 71 | checksum = 0; |
| pmic | 3:57de536c4759 | 72 | for(uint8_t j = 0; j < 8; j++) { |
| pmic | 3:57de536c4759 | 73 | checksum += uartData[j]; |
| pmic | 3:57de536c4759 | 74 | } |
| pmic | 3:57de536c4759 | 75 | if( uartData[8] == (checksum & 0xff) ) { |
| pmic | 3:57de536c4759 | 76 | dist = uartData[2] + uartData[3] * 256; |
| pmic | 3:57de536c4759 | 77 | strength = uartData[4] + uartData[5] * 256; |
| pmic | 3:57de536c4759 | 78 | receiveComplete = true; |
| pmic | 3:57de536c4759 | 79 | } |
| pmic | 3:57de536c4759 | 80 | cnt = 0; |
| pmic | 3:57de536c4759 | 81 | } else { |
| pmic | 3:57de536c4759 | 82 | cnt++; |
| pmic | 3:57de536c4759 | 83 | } |
| pmic | 3:57de536c4759 | 84 | } |
| pmic | 3:57de536c4759 | 85 | */ |
| pmic | 2:41ff1808bdf2 | 86 | ///* |
| pmic | 3:57de536c4759 | 87 | if(TFmini.readable()) { |
| pmic | 3:57de536c4759 | 88 | uartData[cnt] = TFmini.getc(); |
| pmic | 3:57de536c4759 | 89 | checksum += uartData[cnt]; |
| pmic | 3:57de536c4759 | 90 | if( uartData[0] != HEADER ) { |
| pmic | 3:57de536c4759 | 91 | cnt = 0; |
| pmic | 3:57de536c4759 | 92 | checksum = 0; |
| pmic | 3:57de536c4759 | 93 | } else if( cnt == 1 && uartData[1] != HEADER ) { |
| pmic | 2:41ff1808bdf2 | 94 | cnt = 0; |
| pmic | 3:57de536c4759 | 95 | checksum = 0; |
| pmic | 3:57de536c4759 | 96 | } else if( cnt == 8 ) { |
| pmic | 3:57de536c4759 | 97 | checksum -= uartData[cnt]; |
| pmic | 3:57de536c4759 | 98 | if( uartData[8] == (checksum & 0xff) ) { |
| pmic | 3:57de536c4759 | 99 | dist = uartData[2] + uartData[3] * 256; |
| pmic | 3:57de536c4759 | 100 | strength = uartData[4] + uartData[5] * 256; |
| pmic | 3:57de536c4759 | 101 | receiveComplete = true; |
| pmic | 3:57de536c4759 | 102 | } |
| pmic | 3:57de536c4759 | 103 | cnt = 0; |
| pmic | 3:57de536c4759 | 104 | checksum = 0; |
| pmic | 3:57de536c4759 | 105 | } else { |
| pmic | 3:57de536c4759 | 106 | cnt++; |
| pmic | 2:41ff1808bdf2 | 107 | } |
| pmic | 0:03153e3cb89f | 108 | } |
| pmic | 2:41ff1808bdf2 | 109 | //*/ |
| pmic | 3:57de536c4759 | 110 | } |
| pmic | 3:57de536c4759 | 111 |