用ARDUINO读取四块G-302(BH1750FVI)的光照强度

   日期:2020-10-08     浏览:147    评论:0    
核心提示:用ARDUINO读取四块G-30(BH1750FVI)的光照强度G-302是一款常见的光照强度传感器。核心芯片是BH1750FVI,这个芯片是3.3V供电的。但G-302模块带有TTL转换芯片,可以直接用5V供电,同时可以直接和arduino或者5V的单片机直接连接。G-302引脚图[在这里插入图片描述](https://img-blog.该模块的I2C通信指令G-302模块虽然有I2C总线,但它只支持两个地址如下图,ADDR接地,地址为0x23;ADDR接高电平,地址为0x5C。如何

用ARDUINO读取四块G-30(BH1750FVI)的光照强度

G-302是一款常见的光照强度传感器。核心芯片是BH1750FVI,这个芯片是3.3V供电的。但G-302模块带有TTL转换芯片,可以直接用5V供电,同时可以直接和arduino或者5V的单片机直接连接。
G-302引脚图[在这里插入图片描述](https://img-blog.
该模块的I2C通信指令
G-302模块虽然有I2C总线,但它只支持两个地址如下图,ADDR接地,地址为0x23;ADDR接高电平,地址为0x5C。

如何只使用这两个地址,那么一条I2C总线只能接两个传感器。如果要在一条I2C总线上接4个传感器,我们可以把四个传感器ADDR分别接到arduino的I/O上。采用一个固定的地址。比如:选择地址为0x5C,我要想读取一个传感器的数据只需把该传感器的ADDR电平置高,剩下的置低。用这个方法依次读传感器的数据。分别遮挡传感器,串口读数如下:


#include <Wire.h> //IIC库
#include <math.h> 

#define B1 7 //定义BH1750 ADD口的控制脚
#define B2 9
#define B3 10
#define B4 11

byte buff[2];                 //i2c读数数据缓存
uint16_t val=0;               //读数变量

void setup()
{ 
  pinMode(B1,OUTPUT);        //设置ADD口的控制脚为输出模式
  pinMode(B2,OUTPUT);
  pinMode(B3,OUTPUT);
  pinMode(B4,OUTPUT);
  
  Wire.begin();
  Serial.begin(9600);

  digitalWrite(B1, LOW);    //初始化ADD口的控制脚为低电平
  digitalWrite(B2, LOW);
  digitalWrite(B3, LOW);
  digitalWrite(B4, LOW);
}

void loop()
{ 
  uint16_t bh1,bh2,bh3,bh4;

  Start_B1();       //读B1的数
  BH1750_Start();   //开始读数
  bh1 = val;
  delay(150);
  Serial.print("B1:");Serial.print(bh1,DEC); Serial.println("LX"); 
  delay(1000);
//
  Start_B2();        //读B4的数
  BH1750_Start();
  bh2 = val;
  delay(150);
  Serial.print("B2:");Serial.print(bh2,DEC); Serial.println("LX"); 
  delay(150);
  delay(1000);

  Start_B3();       //读B3的数
  BH1750_Start();   //开始读数
  bh3 = val;
  Serial.print("B3:");Serial.print(bh3,DEC); Serial.println("LX"); 
  delay(150);
  delay(1000);
//
  Start_B4();       //读B4的数
  BH1750_Start();   //开始读数
  bh4 = val;
  Serial.print("B4:");Serial.print(bh4,DEC); Serial.println("LX"); 
  delay(1000);
}

void Start_B1()
{ 
  digitalWrite(B1, HIGH);
  digitalWrite(B2, LOW);
  digitalWrite(B3, LOW);
  digitalWrite(B4, LOW);
}

void Start_B2()
{ 
  digitalWrite(B1, LOW);
  digitalWrite(B2, HIGH);
  digitalWrite(B3, LOW);
  digitalWrite(B4, LOW);
}
void Start_B3()
{ 
  digitalWrite(B1, LOW);
  digitalWrite(B2, LOW);
  digitalWrite(B3, HIGH);
  digitalWrite(B4, LOW);
}

void Start_B4()
{ 
  digitalWrite(B1, LOW);
  digitalWrite(B2, LOW);
  digitalWrite(B3, LOW);
  digitalWrite(B4, HIGH);
}

void BH1750_Start()     //BH1750启动函数
{ 
  BH1750_Init(0x5C);
  delay(200);
  if(2==BH1750_Read(0x5C)) { 
     val=((buff[0]<<8)|buff[1])/1.2;
  }
}

int BH1750_Read(int address)    //读数
{ 
  int i=0;
  Wire.beginTransmission(address);
  Wire.requestFrom(address, 2);
  while(Wire.available()) 

  { 
    buff[i] = Wire.read();     //读一位数
    i++;
  }
  Wire.endTransmission();  
  return i;

}

void BH1750_Init(int address) {      //配置传感器
  Wire.beginTransmission(address);
  Wire.write(0x10);//1lx reolution 120ms
  Wire.endTransmission();
}

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服