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

相关文章

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b