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

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

《Mybatis从3.4.0版本到3.5.7版本的迭代方法实现》本文主要介绍了Mybatis从3.4.0版本到3.5.7版本的迭代方法实现,包括主要的功能增强、不兼容的更改和修复的错误,具有一定的参考... 目录一、3.4.01、主要的功能增强2、selectCursor example3、不兼容的更改二、

mybatis-plus分页无效问题解决

《mybatis-plus分页无效问题解决》本文主要介绍了mybatis-plus分页无效问题解决,原因是配置分页插件的版本问题,旧版本和新版本的MyBatis-Plus需要不同的分页配置,感兴趣的可... 昨天在做一www.chinasem.cn个新项目使用myBATis-plus分页一直失败,后来经过多方