光照传感器bh1750(arduino实现)、以及ros和arduino通信

目录

bh1750模块在Arduino上的使用

实现效果

 详细说明

代码

 ros和arduino通信


硬件:电脑、bh1750、Arduino

bh1750模块在Arduino上的使用

实现效果

 详细说明

使用的BH1750有五个引脚,分别是VCC,GND,SCL,SDA和ADDR。五个引脚分别接上Arduino UNO的3.3V,GND,A5与A4接口,ADDR引脚悬空不接。

在使用IDE烧录程序之后,要先进入设备管理器查看UNO板的串口,那么我自己的两台设备都默认为串口COM3.,要先选择串口,然后打开工具中的串口监视器,检查设备运行情况。

代码

#include <Wire.h> //IIC
 
#include <math.h> 
 
int BH1750address = 0x23; 
 
byte buff[2];
 
void setup()
 
{
 
  Wire.begin();
 
  Serial.begin(9600);
 
}
 
void loop()
 
{
 
 int i;
 
 uint16_t val=0;
 
 BH1750_Init(BH1750address);
 
 delay(1000);
 
 if(2==BH1750_Read(BH1750address))
 
  {
 
   val=((buff[0]<<8)|buff[1])/1.2;
 
   Serial.print(val,DEC);     
 
   Serial.println("[lx]"); 
 
  }
 
 delay(150);
 
} 
 
int BH1750_Read(int address) //
 
{
 
  int i=0;
 
  Wire.beginTransmission(address);
 
  Wire.requestFrom(address, 2);
 
  while(Wire.available()) //
 
  {
 
    buff[i] = Wire.read();  // receive one byte
 
    i++;
 
  }
 
  Wire.endTransmission();  
 
  return i;
 
}
 
void BH1750_Init(int address) 
 
{
 
  Wire.beginTransmission(address);
 
  Wire.write(0x10);
  //1lx reolution 120ms
 
  Wire.endTransmission();
 
}

 ros和arduino通信

#include<ros.h>
#include <std_msgs/UInt16.h>
std_msgs::UInt16 temp_msg;
ros::Publisher light("light", &temp_msg);
ros::NodeHandle nh;
#include <Wire.h> //IIC

#include <math.h> 
int BH1750address = 0x23; 
byte buff[2];

void setup()

{

  Wire.begin();
  Serial.begin(57600);
  nh.initNode();
  nh.advertise(light);
}

void loop()

{

  int i;

  uint16_t val=0;

  BH1750_Init(BH1750address);

  delay(1000);

  if(2==BH1750_Read(BH1750address))

  {

    val=((buff[0]<<8)|buff[1])/1.2;

    Serial.print(val,DEC);
     
    Serial.println("[lx]");

  }
  temp_msg.data=val;
  
  light.publish(&temp_msg);
  nh.spinOnce();
  delay(150);


}

int BH1750_Read(int address) //

{

  int i=0;

  Wire.beginTransmission(address);

  Wire.requestFrom(address, 2);

  while(Wire.available()) //

  {

    buff[i] = Wire.read();  // receive one byte

    i++;

  }

  Wire.endTransmission();  

  return i;

}


void BH1750_Init(int address) 

{

  Wire.beginTransmission(address);

  Wire.write(0x10);
  //1lx reolution 120ms

  Wire.endTransmission();

}

程序下载和运行

首先:roscore

其次:rosrun rosserial_python serial_node.py /dev/ttyACM0

/dev/ttyACM0  这个是自己的端口号

最后:rostopic echo light

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clark-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值