altb_pmic / Mbed 2 deprecated Grove-TF_Mini_LiDAR

Dependencies:   mbed

Revision:
2:41ff1808bdf2
Parent:
1:ce38967a0d22
Child:
3:57de536c4759
--- a/main.cpp	Tue Aug 13 18:48:33 2019 +0000
+++ b/main.cpp	Wed Aug 14 15:41:47 2019 +0000
@@ -1,5 +1,4 @@
 #include "mbed.h"
-#include "IIR_filter.h"
 
 /*  Notes pmic 13.08.2019:
   -
@@ -7,69 +6,25 @@
 
 // nt baudrate = 115200;
 Serial pc(SERIAL_TX, SERIAL_RX);  // serial connection via USB - programmer
-Timer t;                          // timer to analyse Button
 Timer twhile;                     // timer for time measurement (usage in while(1), without timer attached)
 
-
 Serial TFmini(PC_10, PC_11);  // TX, RX
+void onCharReceived();
 int dist;               //actual distance measurements of LiDAR
 int strength;           //signal strength of LiDAR
 int check;              //save check value
-int i;
-volatile int uart[9];    //save data measured by LiDAR
-const int HEADER=0x59;  //frame header of data package
-
-volatile char c0;
-volatile char c1;
-volatile char c2;
-volatile char c;
-
-float dt = 0.0f;
-
-int k;
+uint8_t uart[9];    //save data measured by LiDAR
 volatile bool was_readable;
+const uint8_t HEADER=0x59;  //frame header of data package
 
-void onCharReceived()
-{
-    /*
-    twhile.reset();
-    if( TFmini.readable() ) {
-        uart[0] = TFmini.getc();
-        uart[1] = TFmini.getc();
-        uart[2] = TFmini.getc();
-        was_readable = true;
-        dt = twhile.read()*1000.0f;
-        twhile.reset(); // 7.0312e-04
-    }
-    */
-    
-    if (TFmini.readable()) {  //check if serial port has data input
-        if(TFmini.getc() == HEADER) {  //assess data package frame header 0x59
-            uart[0]=HEADER;
-            if (TFmini.getc() == HEADER) { //assess data package frame header 0x59
-                uart[1] = HEADER;
-                for (i = 2; i < 9; i++) { //save data in array
-                    uart[i] = TFmini.getc();
-                }
-                check = uart[0] + uart[1] + uart[2] + uart[3] + uart[4] + uart[5] + uart[6] + uart[7];
-                if (uart[8] == (check & 0xff)){ //verify the received data as per protocol
-                    dist = uart[2] + uart[3] * 256;     //calculate distance value
-                    strength = uart[4] + uart[5] * 256; //calculate signal strength value
-                }
-            }
-        }
-        was_readable = true;
-        dt = twhile.read()*1000.0f;
-        twhile.reset(); // 7.0312e-04
-    }
-    
-}
+const uint8_t enter_config_buf[8] = {0x42, 0x57, 0x02, 0x00, 0x00, 0x00, 0x01, 0x02}; // 42 57 02 00 00 00 01 02
+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)
+// 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)
+// 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)
+const uint8_t exit_config_buf[8]  = {0x42, 0x57, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02}; // 42 57 02 00 00 00 00 02
 
-// float Ts = 0.05f;                 // ??? sample time of main loop, 20 Hz
-
-// IIR_filter pt1(0.2f, Ts, 1.0f);
-// float distf = 0.0f;
-// float strengthf = 0.0f;
+// float dt = 0.0f;
+int cnt = 0;
 
 // main program and control loop
 // -----------------------------------------------------------------------------
@@ -77,13 +32,39 @@
 {
     pc.baud(115200);                   // for serial comm. to pc
     TFmini.baud(115200);               // for serial comm. from TFmini
-    k = 0;
     was_readable = false;
     TFmini.attach(&onCharReceived, Serial::RxIrq);
-    // was_readable = false;
-
-    //pt1.reset(0.0f);
-    twhile.start(); // timer for time measurement (usage in while(1), without timer attached)
+    
+    wait_ms(1000);
+    
+    ///*
+    for(int i = 0; i<8; i++) {
+        // pc.printf("%X ", enter_config_buf[i]);
+        while( !TFmini.writable() )
+        TFmini.putc(enter_config_buf[i]);
+        wait_ms(10);
+    }
+    // pc.printf("\r\n");
+    wait_ms(100);
+    for(int i = 0; i<8; i++) {
+        // pc.printf("%X ", config_buf[i]);
+        while( !TFmini.writable() )
+        TFmini.putc(config_buf[i]);
+        wait_ms(10);
+    }
+    // pc.printf("\r\n");
+    wait_ms(100);
+    for(int i = 0; i<8; i++) {
+        // pc.printf("%X ", exit_config_buf[i]);
+        while( !TFmini.writable() )
+        TFmini.putc(exit_config_buf[i]);
+        wait_ms(10);
+    }
+    // pc.printf("\r\n");
+    wait_ms(100);
+    //*/
+    
+    // twhile.start(); // timer for time measurement (usage in while(1), without timer attached)
     while(1) {
 
         /*
@@ -113,11 +94,48 @@
         // if(was_readable) pc.printf("%10i was readable\r\n", k);
         // else pc.printf("%10i was not readable\r\n", k);
         // if( TFmini.readable()) pc.printf("%10i %10i\r\n", k, TFmini.getc());
-        if( was_readable) {
-            pc.printf("%10.6e %10i %10i \r\n", dt, dist, strength);
+        if( was_readable ) {
+            pc.printf("%i \r\n", uart[2] + uart[3] * 256);
+            // pc.printf("%10.6e %10i %10i \r\n", dt, dist, strength);
             was_readable = false;
         }
-        //pc.printf("%10i %10.6e %10i\r\n", k, twhile.read(), dist);
-        //wait_ms(100);
+    }
+}
+
+void onCharReceived()
+{
+    ///*
+    if( TFmini.readable() ) {
+        uart[cnt++] = TFmini.getc();
+        
+        if(cnt == 9) {
+            was_readable = true;
+            cnt = 0;
+        }
+        // dt = twhile.read()*1000.0f;
+        // twhile.reset(); // 7.0312e-04
     }
+    //*/
+    
+    /*
+    if (TFmini.readable()) {  //check if serial port has data input
+        if(TFmini.getc() == HEADER) {  //assess data package frame header 0x59
+            uart[0]=HEADER;
+            if (TFmini.getc() == HEADER) { //assess data package frame header 0x59
+                uart[1] = HEADER;
+                for (i = 2; i < 9; i++) { //save data in array
+                    uart[i] = TFmini.getc();
+                }
+                check = uart[0] + uart[1] + uart[2] + uart[3] + uart[4] + uart[5] + uart[6] + uart[7];
+                if (uart[8] == (check & 0xff)){ //verify the received data as per protocol
+                    dist = uart[2] + uart[3] * 256;     //calculate distance value
+                    strength = uart[4] + uart[5] * 256; //calculate signal strength value
+                }
+            }
+        }
+        was_readable = true;
+        dt = twhile.read()*1000.0f;
+        twhile.reset(); // 7.0312e-04
+    }
+    */
 }
\ No newline at end of file