mak4000 发表于 2016-4-8 08:39:49

光强度计 用于测量室内光线强度 在强光下出负值 求解!!


光强度计在强光下出负值 求解!!

使用模块 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;
}


zoologist 发表于 2016-4-8 11:11:29

光强太高出界么?直接问问卖家吧

janeasy 发表于 2016-4-8 15:41:50

这么改 试试 将buff = Wire.read(); 改成 buff = Wire.read();// receive one byte

林定祥 发表于 2016-4-8 16:37:39

出负数通常数据有溢出.val做除法了是否需要换成浮点?

lovezypj 发表于 2016-4-8 20:59:40

溢出了,这个传感器精度不高,范围有限,光照太强是会溢出的,只适合室内测量

我之前也用过类似的,强光或太阳下都是负数

迷你强 发表于 2016-4-11 09:52:23

几种可能,变量溢出,传感器错误输出,或者其他什么的
页: [1]
查看完整版本: 光强度计 用于测量室内光线强度 在强光下出负值 求解!!