altb_pmic / Mbed 2 deprecated Grove-TF_Mini_LiDAR

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }