|
我们 用的Arduino mega2560 相同时i2c 读两个GY-30
求助各位大神
程序如下
#include <Wire.h> //IIC库
#include <math.h>
int BH1750address1 = 0x23;//芯片地址为16位23
int BH1750address2 = 0x5c;
byte buff[2];
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
int ia;
int ib;
uint16_t vala=0;
uint16_t valb=0;
BH1750a_Init(BH1750address1);
BH1750b_Init(BH1750address2);
delay(1000);
if(2==BH1750a_Read(BH1750address1))
{
vala=((buff[0]<<8)|buff[1])/12-3;}
if(2==BH1750b_Read(BH1750address2))
{
valb=((buff[0]<<8)|buff[1])/12;}
delay(150);
Serial.print(vala,DEC);
Serial.print("/");
Serial.print(valb,DEC);
Serial.println("[lx]");
}
int BH1750a_Read(int address1) //
{
int ia=0;
Wire.beginTransmission(address1);
Wire.requestFrom(address1, 2);
while(Wire.available()) //
{
buff[ia] = Wire.read(); // read one byte
ia++;
}
Wire.endTransmission();
return ia;
}
int BH1750b_Read(int address2) //
{
int ib=0;
Wire.beginTransmission(address2);
Wire.requestFrom(address2, 2);
while(Wire.available()) //
{
buff[ib] = Wire.read(); // read one byte
ib++;
}
Wire.endTransmission();
return ib;
}
void BH1750a_Init(int address1)
{
Wire.beginTransmission(address1);
Wire.write(0x10);//1lx reolution 120ms
Wire.endTransmission();
}
void BH1750b_Init(int address2)
{
Wire.beginTransmission(address2);
Wire.write(0x10);//1lx reolution 120ms
Wire.endTransmission();
} |
|