Benewake(北醒) TFmini-S\TFmini Plus\TF-Luna\TF02-Pro 串口版本雷达在Arduino Nano上的例程

本文主要是介绍Benewake(北醒) TFmini-S\TFmini Plus\TF-Luna\TF02-Pro 串口版本雷达在Arduino Nano上的例程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • TFLidar_Arduino_HardwareSerial_Polling
    • 接线定义
    • 代码
    • 输出
  • TFLidar_Arduino_HardwareSerial_Interrupt
    • 接线定义
    • 代码
    • 输出
  • TFLidar_Arduino_SoftwareSerial
    • 接线定义
    • 代码
    • 输出
  • TFLidar_Arduino_SoftwareSerial_Multiple
    • 接线定义
    • 代码
    • 输出
  • TFLidar_Arduino_SoftwareSerial_Multiple_Frequency
    • 接线定义
    • 代码
    • 输出

本文介绍了北醒单点系列雷达在Arduino上的一些例子,并使用Nano板连接TFmini-S测试
例程下载:
链接: https://pan.baidu.com/s/1_Xb-k6ygCmWTFEEwkDEwXw
提取码: 6yw6 在这里插入图片描述
在这里插入图片描述

TFLidar_Arduino_HardwareSerial_Polling

接线定义

TFminiArduino
5V(红)5V
GND(黑)GND
TX(绿)D0(RX)

使用硬件串口、采用轮询方式
注:使用硬件串口时,烧录程序过程中雷达绿色线不要插入Nano板D0

代码

typedef struct {int distance;int strength;int temp;boolean receiveComplete;
} TF;
TF Lidar = {0, 0, 0, false};void getLidarData(TF* lidar) 
{static char i = 0;char j = 0;int checksum = 0;static int rx[9];if (Serial.available()) {rx[i] = Serial.read();if (rx[0] != 0x59) {i = 0;} else if (i == 1 && rx[1] != 0x59) {i = 0;} else if (i == 8) {for (j = 0; j < 8; j++) {checksum += rx[j];}if (rx[8] == (checksum % 256)) {lidar->distance = rx[2] + rx[3] * 256;lidar->strength = rx[4] + rx[5] * 256;lidar->temp = (rx[6] + rx[7] * 256) / 8 - 256;lidar->receiveComplete = true;}i = 0;} else {i++;}}
}/*首先将雷达输出的9位数据按顺序存放入‘rx[]’数组中,随后计算输出的距离、信号强度、温度*/void setup() {Serial.begin(115200);
}void loop() 
{getLidarData(&Lidar);if (Lidar.receiveComplete) {Lidar.receiveComplete = false;Serial.print("Distance: ");Serial.print(Lidar.distance);Serial.print("cm\t");Serial.print("Strength: ");Serial.print(Lidar.strength);Serial.print("\t");Serial.print("Temp: ");Serial.println(Lidar.temp);}
}

输出

点击“工具-串口监视器”即可观察输出结果
在这里插入图片描述

在这里插入图片描述

TFLidar_Arduino_HardwareSerial_Interrupt

接线定义

TFminiArduino
5V(红)5V
GND(黑)GND
TX(绿)D0(RX)

使用硬件串口、采用中断方式
注:使用硬件串口时,烧录程序过程中雷达绿色线不要插入Nano板D0

代码

typedef struct {int distance;int strength;int temp;boolean receiveComplete;
} TF;
TF Lidar = {0, 0, 0, false};void getLidarData(TF* lidar) {static char i = 0;char j = 0;int checksum = 0;static int rx[9];if (Serial.available()) {rx[i] = Serial.read();if (rx[0] != 0x59) {i = 0;} else if (i == 1 && rx[1] != 0x59) {i = 0;} else if (i == 8) {for (j = 0; j < 8; j++) {checksum += rx[j];}if (rx[8] == (checksum % 256)) {lidar->distance = rx[2] + rx[3] * 256;lidar->strength = rx[4] + rx[5] * 256;lidar->temp = (rx[6] + rx[7] * 256) / 8 - 256;lidar->receiveComplete = true;}i = 0;} else {i++;}}
}void setup() {Serial.begin(115200);
}void loop() {if (Lidar.receiveComplete) {Lidar.receiveComplete = false;Serial.print("Distance: ");Serial.print(Lidar.distance);Serial.print("cm\t");Serial.print("Strength: ");Serial.print(Lidar.strength);Serial.print("\t");Serial.print("Temp: ");Serial.println(Lidar.temp);}
}void serialEvent() {getLidarData(&Lidar);
}

输出

在这里插入图片描述

TFLidar_Arduino_SoftwareSerial

接线定义

TFminiArduino
5V(红)5V
GND(黑)GND
TX(绿)D2(RX)

使用软件件串口、采用轮询方式

代码

#include <SoftwareSerial.h>  //header file of software serial portSoftwareSerial Serial1(2, 3); //define software serial port name as Serial1 and define pin2 as RX and pin3 as TXtypedef struct {int distance;int strength;int temp;boolean receiveComplete;
} TF;
TF Lidar = {0, 0, 0, false};void setup() {Serial.begin(115200);	//set bit rate of serial port connecting Arduino with computerSerial1.begin(115200);	//set bit rate of serial port connecting LiDAR with Arduino
}void loop() {getLidarData(&Lidar);if (Lidar.receiveComplete) {Lidar.receiveComplete = false;Serial.print("Distance: ");Serial.print(Lidar.distance);Serial.print("cm\t");Serial.print("Strength: ");Serial.print(Lidar.strength);Serial.print("\t");Serial.print("Temp: ");Serial.println(Lidar.temp);}
}void getLidarData(TF* lidar) {static char i = 0;char j = 0;int checksum = 0;static int rx[9];if (Serial1.available()) {rx[i] = Serial1.read();if (rx[0] != 0x59) {i = 0;} else if (i == 1 && rx[1] != 0x59) {i = 0;} else if (i == 8) {for (j = 0; j < 8; j++) {checksum += rx[j];}if (rx[8] == (checksum % 256)) {lidar->distance = rx[2] + rx[3] * 256;lidar->strength = rx[4] + rx[5] * 256;lidar->temp = (rx[6] + rx[7] * 256) / 8 - 256;lidar->receiveComplete = true;}i = 0;} else {i++;}}
}

输出

在这里插入图片描述

TFLidar_Arduino_SoftwareSerial_Multiple

接线定义

TFminiArduino
5V(红)5V
GND(黑)GND
LIDAR1 TX(绿)D2(RX)
LIDAR2TX(绿)D3(RX)

使用软件件串口、采用轮询方式

代码

#include <SoftwareSerial.h>//SoftwareSerial port(TX, RX);
SoftwareSerial portOne(2, 2);
SoftwareSerial portTwo(3, 3);typedef struct {int distance;int strength;int temp;boolean receiveComplete;
} TF;
TF Lidar1 = {0, 0, 0, false};
TF Lidar2 = {0, 0, 0, false};void getLidarData(SoftwareSerial* port, TF* Lidar) {static char i = 0;char j = 0;int checksum = 0;static int rx[9];port->listen();if (port->available()) {rx[i] = port->read();if (rx[0] != 0x59) {i = 0;} else if (i == 1 && rx[1] != 0x59) {i = 0;} else if (i == 8) {for (j = 0; j < 8; j++) {checksum += rx[j];}if (rx[8] == (checksum % 256)) {Lidar->distance = rx[2] + rx[3] * 256;Lidar->strength = rx[4] + rx[5] * 256;Lidar->temp = (rx[6] + rx[7] * 256) / 8 - 256;Lidar->receiveComplete = true;}i = 0;} else {i++;}}
}void setup() {Serial.begin(115200);portOne.begin(115200);portTwo.begin(115200);
}void loop() {while (!Lidar1.receiveComplete) {getLidarData(&portOne, &Lidar1);if (Lidar1.receiveComplete) {Serial.print("Lidar1 Mesure: ");Serial.print("Distance: ");Serial.print(Lidar1.distance);Serial.print("cm\t");Serial.print("Strength: ");Serial.print(Lidar1.strength);Serial.print("\t");Serial.print("Temp: ");Serial.println(Lidar1.temp);}}Lidar1.receiveComplete = false;while (!Lidar2.receiveComplete) {getLidarData(&portTwo, &Lidar2);if (Lidar2.receiveComplete) {Serial.print("Lidar2 Mesure: ");Serial.print("Distance: ");Serial.print(Lidar2.distance);Serial.print("cm\t");Serial.print("Strength: ");Serial.print(Lidar2.strength);Serial.print("\t");Serial.print("Temp: ");Serial.println(Lidar2.temp);}}Lidar2.receiveComplete = false;
}

输出

在这里插入图片描述

TFLidar_Arduino_SoftwareSerial_Multiple_Frequency

接线定义

TFminiArduino
5V(红)5V
GND(黑)GND
LIDAR1 TX(绿)D2(RX)
LIDAR2TX(绿)D3(RX)

使用软件件串口、采用轮询方式、添加频率显示

代码

#include <SoftwareSerial.h>
typedef struct {int distance;int strength;int temp;boolean receiveComplete;
} TF;
TF Lidar1 = {0, 0, 0, false};
TF Lidar2 = {0, 0, 0, false};//SoftwareSerial port(RX, TX);
SoftwareSerial portOne(2, 2);
SoftwareSerial portTwo(3, 3);void getLidarData(SoftwareSerial* port, TF* lidar) {port->listen();while (lidar->receiveComplete == false){static char i = 0;char j = 0;int checksum = 0;static int rx[9];if (port->available()) {rx[i] = port->read();if (rx[0] != 0x59) {i = 0;} else if (i == 1 && rx[1] != 0x59) {i = 0;} else if (i == 8) {for (j = 0; j < 8; j++) {checksum += rx[j];}if (rx[8] == (checksum % 256)) {lidar->distance = rx[2] + rx[3] * 256;lidar->strength = rx[4] + rx[5] * 256;lidar->temp = (rx[6] + rx[7] * 256) / 8 - 256;lidar->receiveComplete = true;}i = 0;} else {i++;}}}
}void setup() {Serial.begin(115200);portOne.begin(115200);portTwo.begin(115200);
}void loop() {static unsigned long lastTime = millis();static unsigned int count = 0;static unsigned int frequency = 0;getLidarData(&portOne, &Lidar1);getLidarData(&portTwo, &Lidar2);if (Lidar1.receiveComplete == true && Lidar2.receiveComplete == true) {++count;if (millis() - lastTime > 999) {lastTime = millis();frequency = count;count = 0;}Serial.print("Lidar1 Mesure: ");Serial.print("Distance: ");Serial.print(Lidar1.distance);Serial.print("cm\t");Serial.print("Strength: ");Serial.print(Lidar1.strength);Serial.print("\t");Serial.print("Temp: ");Serial.print(Lidar1.temp);Serial.print("\t");Serial.print("Lidar2 Mesure: ");Serial.print("Distance: ");Serial.print(Lidar2.distance);Serial.print("cm\t");Serial.print("Strength: ");Serial.print(Lidar2.strength);Serial.print("\t");Serial.print("Temp: ");Serial.print(Lidar2.temp);Serial.print("\t");Serial.print(frequency);  //40~70Hz, It maybe higher if we don't print other thing.Serial.println("Hz");Lidar1.receiveComplete = false;Lidar2.receiveComplete = false;}}

输出

在这里插入图片描述

这篇关于Benewake(北醒) TFmini-S\TFmini Plus\TF-Luna\TF02-Pro 串口版本雷达在Arduino Nano上的例程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394608

相关文章

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

升级至三频BE12000! 华硕ROG魔盒Pro路由器首发拆解评测

《升级至三频BE12000!华硕ROG魔盒Pro路由器首发拆解评测》华硕前两天推出新一代电竞无线路由器——ROG魔盒Pro(StrixGR7Pro),该产品在无线规格、硬件配置及功能设计上实现全... 作为路由器行业的T1梯队厂商,华硕近期发布了新旗舰华硕ROG魔盒Pro,除了保留DIY属性以外,高达120

三频BE12000国补到手2549元! ROG 魔盒Pro WIFI7电竞AI路由器上架

《三频BE12000国补到手2549元!ROG魔盒ProWIFI7电竞AI路由器上架》近日,华硕带来了ROG魔盒ProWIFI7电竞AI路由器(ROGSTRIXGR7Pro),目前新... 华硕推出了ROG 魔盒Pro WIFI7电竞AI路由器(ROG STRIX GR7 Phttp://www.cppcn

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6