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
Diff: main.cpp
- 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