【Arduino】TOF250(IIC)基于UNO板的运用

该教程详细介绍了如何通过ArduinoUNO开发板读取TOF250(IIC接口)测距传感器的数据。内容包括硬件准备、软件安装、硬件接线、例程源码、烧录说明及结果输出。同时,还提供了多台传感器组网的参考代码,但未经实际测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、前言

此片文章主要介绍如果通过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.youkuaiyun.com/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.youkuaiyun.com/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");
}
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值