极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18192|回复: 5

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

[复制链接]
发表于 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[2];

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("[lx]");


     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;
  double  val=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[0]<<8)|buff[1])/1.2;
  }
  return val;
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2016-4-8 11:11:29 | 显示全部楼层
光强太高出界么?直接问问卖家吧
回复 支持 反对

使用道具 举报

发表于 2016-4-8 15:41:50 | 显示全部楼层
这么改 试试 将buff = Wire.read(); 改成 buff[i] = Wire.read();  // receive one byte
回复 支持 反对

使用道具 举报

发表于 2016-4-8 16:37:39 | 显示全部楼层
出负数通常数据有溢出.val做除法了是否需要换成浮点?
回复 支持 反对

使用道具 举报

发表于 2016-4-8 20:59:40 | 显示全部楼层
溢出了,这个传感器精度不高,范围有限,光照太强是会溢出的,只适合室内测量

我之前也用过类似的,强光或太阳下都是负数
回复 支持 反对

使用道具 举报

发表于 2016-4-11 09:52:23 | 显示全部楼层
几种可能,变量溢出,传感器错误输出,或者其他什么的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 17:24 , Processed in 0.072962 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表