Ambient Light Sensor [SOLVED]

Hello,

I have a BH1750FVI Digital Light intensity Sensor Module, which I have connected to my Arduino UNO board.

I have used the following sketch which functions well,

/*
 Sample code for the BH1750 Light sensor
 Version 0.1
 website:www.DFRobot.com
 
 Connection:
 
 VCC-5v
 GND-GND
 SCL-SCL(analog pin 5)
 SDA-SDA(analog pin 4)
 ADD-NC
 */


#include <Wire.h> //BH1750 IIC Mode 
#include <math.h> 
int BH1750address = 0x23; //setting i2c address

byte buff[2];
void setup()
{
  Wire.begin();
  Serial.begin(57600);//init Serail band rate
}

void loop()
{
  int i;
  uint16_t val=0;
  BH1750_Init(BH1750address);
  delay(200);

  if(2==BH1750_Read(BH1750address))
  {
    val=((buff[0]<<8)|buff[1])/1.2;
    Serial.print(val,DEC);     
    Serial.println("[lx]"); 
  }
  delay(150);
}

int BH1750_Read(int address) //
{
  int i=0;
  Wire.beginTransmission(address);
  Wire.requestFrom(address, 2);
  while(Wire.available()) //
  {
    buff[i] = Wire.read();  // receive one byte
    i++;
  }
  Wire.endTransmission();  
  return i;
}

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

What I want to do is use the sensor to trigger a relay at a set light level,

however I do not understand which part of the code is the light level reading.

I have fiddled with the sketch using val and a number but it wont do what I am trying to achieve.

Any help would be appreciated.

Ant.

This line of code converts the received bytes into a number:

val=((buff[0]<<8)|buff[1])/1.2;

After this line, val contains the light sensor value. You could then do something like:

if (val > HighThresholdNumber) {
   TurnOnRelay();
 } else if (val < LowThresholdNumber) {
  TurnOffRelay();
}

Thanks Fll-freak,

that makes sense to me now, I will play with it as soon as I get a chance.

Regards Ant.