altb_pmic / Mbed 2 deprecated Grove-TF_Mini_LiDAR

Dependencies:   mbed

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?

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