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@1:ce38967a0d22, 2019-08-13 (annotated)
- Committer:
- pmic
- Date:
- Tue Aug 13 18:48:33 2019 +0000
- Revision:
- 1:ce38967a0d22
- Parent:
- 0:03153e3cb89f
- Child:
- 2:41ff1808bdf2
first working hack
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| pmic | 0:03153e3cb89f | 1 | #include "mbed.h" |
| pmic | 0:03153e3cb89f | 2 | #include "IIR_filter.h" |
| pmic | 0:03153e3cb89f | 3 | |
| pmic | 0:03153e3cb89f | 4 | /* Notes pmic 13.08.2019: |
| pmic | 0:03153e3cb89f | 5 | - |
| pmic | 0:03153e3cb89f | 6 | */ |
| pmic | 0:03153e3cb89f | 7 | |
| pmic | 0:03153e3cb89f | 8 | // nt baudrate = 115200; |
| pmic | 0:03153e3cb89f | 9 | Serial pc(SERIAL_TX, SERIAL_RX); // serial connection via USB - programmer |
| pmic | 0:03153e3cb89f | 10 | Timer t; // timer to analyse Button |
| 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 | |
| pmic | 0:03153e3cb89f | 14 | Serial TFmini(PC_10, PC_11); // TX, RX |
| pmic | 0:03153e3cb89f | 15 | int dist; //actual distance measurements of LiDAR |
| pmic | 0:03153e3cb89f | 16 | int strength; //signal strength of LiDAR |
| pmic | 0:03153e3cb89f | 17 | int check; //save check value |
| pmic | 0:03153e3cb89f | 18 | int i; |
| pmic | 1:ce38967a0d22 | 19 | volatile int uart[9]; //save data measured by LiDAR |
| pmic | 0:03153e3cb89f | 20 | const int HEADER=0x59; //frame header of data package |
| pmic | 0:03153e3cb89f | 21 | |
| pmic | 1:ce38967a0d22 | 22 | volatile char c0; |
| pmic | 1:ce38967a0d22 | 23 | volatile char c1; |
| pmic | 1:ce38967a0d22 | 24 | volatile char c2; |
| pmic | 0:03153e3cb89f | 25 | volatile char c; |
| pmic | 0:03153e3cb89f | 26 | |
| pmic | 1:ce38967a0d22 | 27 | float dt = 0.0f; |
| pmic | 1:ce38967a0d22 | 28 | |
| pmic | 1:ce38967a0d22 | 29 | int k; |
| pmic | 1:ce38967a0d22 | 30 | volatile bool was_readable; |
| pmic | 1:ce38967a0d22 | 31 | |
| pmic | 0:03153e3cb89f | 32 | void onCharReceived() |
| pmic | 0:03153e3cb89f | 33 | { |
| pmic | 1:ce38967a0d22 | 34 | /* |
| pmic | 1:ce38967a0d22 | 35 | twhile.reset(); |
| pmic | 1:ce38967a0d22 | 36 | if( TFmini.readable() ) { |
| pmic | 1:ce38967a0d22 | 37 | uart[0] = TFmini.getc(); |
| pmic | 1:ce38967a0d22 | 38 | uart[1] = TFmini.getc(); |
| pmic | 1:ce38967a0d22 | 39 | uart[2] = TFmini.getc(); |
| pmic | 1:ce38967a0d22 | 40 | was_readable = true; |
| pmic | 1:ce38967a0d22 | 41 | dt = twhile.read()*1000.0f; |
| pmic | 1:ce38967a0d22 | 42 | twhile.reset(); // 7.0312e-04 |
| pmic | 1:ce38967a0d22 | 43 | } |
| pmic | 1:ce38967a0d22 | 44 | */ |
| pmic | 1:ce38967a0d22 | 45 | |
| pmic | 1:ce38967a0d22 | 46 | if (TFmini.readable()) { //check if serial port has data input |
| pmic | 1:ce38967a0d22 | 47 | if(TFmini.getc() == HEADER) { //assess data package frame header 0x59 |
| pmic | 1:ce38967a0d22 | 48 | uart[0]=HEADER; |
| pmic | 1:ce38967a0d22 | 49 | if (TFmini.getc() == HEADER) { //assess data package frame header 0x59 |
| pmic | 1:ce38967a0d22 | 50 | uart[1] = HEADER; |
| pmic | 1:ce38967a0d22 | 51 | for (i = 2; i < 9; i++) { //save data in array |
| pmic | 1:ce38967a0d22 | 52 | uart[i] = TFmini.getc(); |
| pmic | 1:ce38967a0d22 | 53 | } |
| pmic | 1:ce38967a0d22 | 54 | check = uart[0] + uart[1] + uart[2] + uart[3] + uart[4] + uart[5] + uart[6] + uart[7]; |
| pmic | 1:ce38967a0d22 | 55 | if (uart[8] == (check & 0xff)){ //verify the received data as per protocol |
| pmic | 1:ce38967a0d22 | 56 | dist = uart[2] + uart[3] * 256; //calculate distance value |
| pmic | 1:ce38967a0d22 | 57 | strength = uart[4] + uart[5] * 256; //calculate signal strength value |
| pmic | 1:ce38967a0d22 | 58 | } |
| pmic | 1:ce38967a0d22 | 59 | } |
| pmic | 1:ce38967a0d22 | 60 | } |
| pmic | 1:ce38967a0d22 | 61 | was_readable = true; |
| pmic | 1:ce38967a0d22 | 62 | dt = twhile.read()*1000.0f; |
| pmic | 1:ce38967a0d22 | 63 | twhile.reset(); // 7.0312e-04 |
| pmic | 1:ce38967a0d22 | 64 | } |
| pmic | 1:ce38967a0d22 | 65 | |
| pmic | 0:03153e3cb89f | 66 | } |
| pmic | 0:03153e3cb89f | 67 | |
| pmic | 0:03153e3cb89f | 68 | // float Ts = 0.05f; // ??? sample time of main loop, 20 Hz |
| pmic | 0:03153e3cb89f | 69 | |
| pmic | 0:03153e3cb89f | 70 | // IIR_filter pt1(0.2f, Ts, 1.0f); |
| pmic | 0:03153e3cb89f | 71 | // float distf = 0.0f; |
| pmic | 0:03153e3cb89f | 72 | // float strengthf = 0.0f; |
| pmic | 0:03153e3cb89f | 73 | |
| pmic | 0:03153e3cb89f | 74 | // main program and control loop |
| pmic | 0:03153e3cb89f | 75 | // ----------------------------------------------------------------------------- |
| pmic | 0:03153e3cb89f | 76 | int main() |
| pmic | 0:03153e3cb89f | 77 | { |
| pmic | 0:03153e3cb89f | 78 | pc.baud(115200); // for serial comm. to pc |
| pmic | 0:03153e3cb89f | 79 | TFmini.baud(115200); // for serial comm. from TFmini |
| pmic | 0:03153e3cb89f | 80 | k = 0; |
| pmic | 1:ce38967a0d22 | 81 | was_readable = false; |
| pmic | 0:03153e3cb89f | 82 | TFmini.attach(&onCharReceived, Serial::RxIrq); |
| pmic | 0:03153e3cb89f | 83 | // was_readable = false; |
| pmic | 0:03153e3cb89f | 84 | |
| pmic | 0:03153e3cb89f | 85 | //pt1.reset(0.0f); |
| pmic | 0:03153e3cb89f | 86 | twhile.start(); // timer for time measurement (usage in while(1), without timer attached) |
| pmic | 0:03153e3cb89f | 87 | while(1) { |
| pmic | 1:ce38967a0d22 | 88 | |
| pmic | 1:ce38967a0d22 | 89 | /* |
| pmic | 0:03153e3cb89f | 90 | if (TFmini.readable()) { //check if serial port has data input |
| pmic | 0:03153e3cb89f | 91 | was_readable = true; |
| pmic | 1:ce38967a0d22 | 92 | if(TFmini.getc() == HEADER) { //assess data package frame header 0x59 |
| pmic | 0:03153e3cb89f | 93 | uart[0]=HEADER; |
| pmic | 0:03153e3cb89f | 94 | if (TFmini.getc() == HEADER) { //assess data package frame header 0x59 |
| pmic | 0:03153e3cb89f | 95 | uart[1] = HEADER; |
| pmic | 0:03153e3cb89f | 96 | for (i = 2; i < 9; i++) { //save data in array |
| pmic | 0:03153e3cb89f | 97 | uart[i] = TFmini.getc(); |
| pmic | 0:03153e3cb89f | 98 | } |
| pmic | 0:03153e3cb89f | 99 | check = uart[0] + uart[1] + uart[2] + uart[3] + uart[4] + uart[5] + uart[6] + uart[7]; |
| pmic | 0:03153e3cb89f | 100 | if (uart[8] == (check & 0xff)) { //verify the received data as per protocol |
| pmic | 0:03153e3cb89f | 101 | dist = uart[2] + uart[3] * 256; //calculate distance value |
| pmic | 0:03153e3cb89f | 102 | strength = uart[4] + uart[5] * 256; //calculate signal strength value |
| pmic | 0:03153e3cb89f | 103 | } |
| pmic | 0:03153e3cb89f | 104 | } |
| pmic | 1:ce38967a0d22 | 105 | } |
| pmic | 0:03153e3cb89f | 106 | } else { |
| pmic | 0:03153e3cb89f | 107 | was_readable = false; |
| pmic | 0:03153e3cb89f | 108 | } |
| pmic | 1:ce38967a0d22 | 109 | */ |
| pmic | 0:03153e3cb89f | 110 | |
| pmic | 0:03153e3cb89f | 111 | // distf = pt1((float)dist); |
| pmic | 1:ce38967a0d22 | 112 | // k++; |
| pmic | 0:03153e3cb89f | 113 | // if(was_readable) pc.printf("%10i was readable\r\n", k); |
| pmic | 0:03153e3cb89f | 114 | // else pc.printf("%10i was not readable\r\n", k); |
| pmic | 0:03153e3cb89f | 115 | // if( TFmini.readable()) pc.printf("%10i %10i\r\n", k, TFmini.getc()); |
| pmic | 1:ce38967a0d22 | 116 | if( was_readable) { |
| pmic | 1:ce38967a0d22 | 117 | pc.printf("%10.6e %10i %10i \r\n", dt, dist, strength); |
| pmic | 1:ce38967a0d22 | 118 | was_readable = false; |
| pmic | 1:ce38967a0d22 | 119 | } |
| pmic | 0:03153e3cb89f | 120 | //pc.printf("%10i %10.6e %10i\r\n", k, twhile.read(), dist); |
| pmic | 0:03153e3cb89f | 121 | //wait_ms(100); |
| pmic | 0:03153e3cb89f | 122 | } |
| pmic | 0:03153e3cb89f | 123 | } |