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-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

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

Ubuntu 24.04 LTS怎么关闭 Ubuntu Pro 更新提示弹窗?

《Ubuntu24.04LTS怎么关闭UbuntuPro更新提示弹窗?》Ubuntu每次开机都会弹窗提示安全更新,设置里最多只能取消自动下载,自动更新,但无法做到直接让自动更新的弹窗不出现,... 如果你正在使用 Ubuntu 24.04 LTS,可能会注意到——在使用「软件更新器」或运行 APT 命令时,

最便宜的8口2.5G网管交换机! 水星SE109 Pro拆机测评

《最便宜的8口2.5G网管交换机!水星SE109Pro拆机测评》水星SE109Pro价格很便宜,水星SE109Pro,外观、接口,和SE109一样,区别Pro是网管型的,下面我们就来看看详细拆... 听说水星SE109 Pro开卖了,PDD卖 220元,于是买回来javascript拆机看看。推荐阅读:水

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

arduino ide安装详细步骤

​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网