diff --git a/Source/BSP/Inc/lidar.h b/Source/BSP/Inc/lidar.h index b7ffb15..40c4e8e 100644 --- a/Source/BSP/Inc/lidar.h +++ b/Source/BSP/Inc/lidar.h @@ -7,6 +7,8 @@ #define USART3_START_BYTE 0x59 #define USART3_FRAME_SIZE 9 +#define LIDAR_MIN_DIST 0.01f +#define LIDAR_MAX_DIST 40.0f typedef struct { @@ -21,7 +23,14 @@ typedef struct uint8_t checksum; } lidar_data_buf; +typedef struct +{ + uint16_t distance; // meters + uint16_t strength; + uint16_t temperature; +} lidar_data; + void lidar_init(); -void lidar_update(); +void lidar_update(lidar_data* lidar); #endif \ No newline at end of file diff --git a/Source/BSP/Src/lidar.c b/Source/BSP/Src/lidar.c index 4a9242a..231cd7c 100644 --- a/Source/BSP/Src/lidar.c +++ b/Source/BSP/Src/lidar.c @@ -75,17 +75,25 @@ void USART3_IRQHandler() if (usart3_index == USART3_FRAME_SIZE) { - for (uint8_t i = 0; i < USART3_FRAME_SIZE; ++i) usart3_checksum += buff_data[i]; - if (buffer.checksum == usart3_checksum) - { - usart3_index = 0; - usart3_frame_ready = 1; - } - else - { - usart3_index = 0; - usart3_frame_ready = 0; - } + usart3_index = 0; + usart3_frame_ready = 1; } } +} + +void lidar_update(lidar_data* lidar) +{ + if (!usart3_frame_ready) + return; + + usart3_frame_ready = 0; + + for (uint8_t i = 0; i < USART3_FRAME_SIZE; ++i) usart3_checksum += buff_data[i]; + + if (buffer.checksum != usart3_checksum) + return; + + lidar->distance = buffer.distance_l | (buffer.distance_h << 8); + lidar->strength = buffer.strength_l | (buffer.strength_h << 8); + lidar->temperature = buffer.temp_l | (buffer.temp_h << 8); } \ No newline at end of file