一、前言
此片文章主要介绍如果通过Arduino UNO开发板来读取TOF250(IIC接口)数据的教程
提示:以下的案例仅供参考学习使用
二、硬件准备
-
TOF250 :测距传感器
-
Arduino UNO:Arduino公司下的开发板
详细资料可以参考:Arduino 官网
- 电脑 :Windows 7/10/11
- USB线:USB-B接头连接线(一般UNO板带有)
- 杜邦线:一头公一头母(若干)
- TOF250尾线:购买时自带有一根尾线
二、软件准备
- Arduino IDE:参考官网下载安装教程
三、硬件接线图
四、例程源码
#include <Wire.h> //包含IIC库
/**************************************************************
//技术论坛:https://blog.csdn.net/HCJ_Application/article/details/124058266
//修改日期:2022/4/9
//版本:V1.0
//深圳市弘成基科技有限公司
***************************************************************/
/**************************************************************
*TOF250 IIC通讯:
*地址 : 0x52(82)
*距离高8位 : 0x00
*距离低8位 : 0x01
****************************************************************/
#define REG_00H 0x00
#define REG_01L 0x00
int TOF250_Address = 82;
unsigned int TOF250_Dist = 0; //定义存放TOF250距离值的变量
void setup() {
Wire.begin(); // 加入IIC总线协议(IIC主机方式)
Serial.begin(115200); // 开启硬件串口,用来打印TOF250数据
delay(100);
}
void loop() {
Get_LidarDatafromIIC(TOF250_Address);
Serial_PrintResult();
delay(100);
}
void Get_LidarDatafromIIC(int address) {
char i = 0;
byte rx_buf[2] = {0};
Wire.beginTransmission(address);
Wire.write(REG_00H); //向TOF250 00H地址开始要求获取数据
Wire.endTransmission();
Wire.requestFrom(address, 2); //读取2个byte长度的数据
while ( Wire.available())
{
rx_buf[i] = Wire.read(); //每次接收一个byte的数据
i++;
if (i >= 2)
{
i = 0;
TOF250_Dist = rx_buf[0] * 256 + rx_buf[1]; //高8位数据
}
}
}
//定义使用硬件串口打印结果的格式
void Serial_PrintResult()
{
Serial.print("距离 = ");
Serial.print(TOF250_Dist);
Serial.println(" CM");
}
五、烧录说明
六、结果输出
通过Arduino IDE自带的串口软件打印结果
提示:注意选择对应的波特率,此次测试使用波特率为115200
回复多台组网需求(未经测试,仅参考)
#include <Wire.h> //包含IIC库
/**************************************************************
//技术论坛:https://blog.csdn.net/HCJ_Application/article/details/124058266
//修改日期:2022/7/13
//版本:V1.0
//深圳市弘成基科技有限公司
***************************************************************/
/**************************************************************
*TOF250 IIC通讯:
*地址 : 0x52(82)
*距离高8位 : 0x00
*距离低8位 : 0x01
****************************************************************/
#define REG_00H 0x00
#define REG_01L 0x00
typedef struct {
int Address;
unsigned int Dist;
} TOF;
TOF TOF250_1 = {82,0};
TOF TOF250_2 = {83,0};
void setup() {
Wire.begin(); // 加入IIC总线协议(IIC主机方式)
Serial.begin(115200); // 开启硬件串口,用来打印TOF250数据
delay(100);
}
void loop() {
Get_LidarDatafromIIC(TOF250_1.Address);
Serial.print("TOF_1距离 = ");
Serial_PrintResult(TOF250_1.Dist);
Serial.println("CM");
delay(100);
Get_LidarDatafromIIC(TOF250_2.Address);
Serial.print("TOF_2距离 = ");
Serial_PrintResult(TOF250_2.Dist);
Serial.println("CM");
delay(100);
}
void Get_LidarDatafromIIC(TOF* TOF250) {
char i = 0;
byte rx_buf[2] = {0};
Wire.beginTransmission(TOF250->Address);
Wire.write(REG_00H); //向TOF250 00H地址开始要求获取数据
Wire.endTransmission();
Wire.requestFrom(TOF250->Address, 2); //读取2个byte长度的数据
while ( Wire.available())
{
rx_buf[i] = Wire.read(); //每次接收一个byte的数据
i++;
if (i >= 2)
{
i = 0;
TOF250->Dist = rx_buf[0] * 256 + rx_buf[1]; //高8位数据
}
}
}
//定义使用硬件串口打印结果的格式
void Serial_PrintResult(TOF* TOF250)
{
// Serial.print("距离 = ");
Serial.print(TOF250->Dist);
//Serial.println(" CM");
}