光强度计 用于测量室内光线强度 在强光下出负值 求解!!
光强度计在强光下出负值 求解!!
使用模块 GY-30
https://item.taobao.com/item.htm?id=529418647596
#include <LiquidCrystal.h>
#include <Wire.h>
#include <math.h>
int BH1750address = 0x23;//BH1750 I2C地址
byte buff;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);//设置接口
void setup()
{
Wire.begin();
Serial.begin(9600);
lcd.begin(16,2);
lcd.clear(); //清屏
delay(1000); //延时1000ms
}
void loop ()
{
Serial.print( BH1750() );
Serial.println("");
lcd.setCursor(0, 0) ; //设置光标位置为第1行第1个位置
lcd.print("LUX:"); //使屏幕显示文字
lcd.setCursor(6, 0) ;
lcd.print(BH1750()); //使屏幕显示文字Button OFF
//-------------------------------
if(int(BH1750())<20)
{
lcd.setCursor(0, 1) ;
lcd.print("Low ");
}
else if(int(BH1750())<100)
{
lcd.setCursor(0, 1) ;
lcd.print("Corridor ");
}
else if(int(BH1750())<150)
{
lcd.setCursor(0, 1) ;
lcd.print("Living room ");
}
else if(int(BH1750())<200)
{
lcd.setCursor(0, 1) ;
lcd.print("Restaurant ");
}
else if(int(BH1750())<300)
{
lcd.setCursor(0, 1) ;
lcd.print("Waiting room ");
}
else if(int(BH1750())<500)
{
lcd.setCursor(0, 1) ;
lcd.print("Office ");
}
else if(int(BH1750())<1000)
{
lcd.setCursor(0, 1) ;
lcd.print("Blackboard ");
}
else if(int(BH1750())<3000)
{
lcd.setCursor(0, 1) ;
lcd.print("Sun ");
}
else if(int(BH1750())<10000)
{
lcd.setCursor(0, 1) ;
lcd.print("Overflow ");
}
}
double BH1750() //BH1750设备操作
{
int i=0;
doubleval=0;
//开始I2C读写操作
Wire.beginTransmission(BH1750address);
Wire.write(0x10);//1lx reolution 120ms//发送命令
Wire.endTransmission();
delay(200);
//读取数据
Wire.beginTransmission(BH1750address);
Wire.requestFrom(BH1750address, 2);
while(Wire.available()) //
{
buff = Wire.read();// receive one byte
i++;
}
Wire.endTransmission();
if(2==i)
{
val=((buff<<8)|buff)/1.2;
}
return val;
}
光强太高出界么?直接问问卖家吧 这么改 试试 将buff = Wire.read(); 改成 buff = Wire.read();// receive one byte
出负数通常数据有溢出.val做除法了是否需要换成浮点? 溢出了,这个传感器精度不高,范围有限,光照太强是会溢出的,只适合室内测量
我之前也用过类似的,强光或太阳下都是负数 几种可能,变量溢出,传感器错误输出,或者其他什么的
页:
[1]