How to detect bh1750 light sensor not connected device or something wrong?)(solved)

I am using the bh1750 light sensor, which is based on i2c communication. There is a spark library for it.
whiich is here: https://github.com/davidegironi/spark-bh1750lib22

just have a question about the library, when the light sensor is not connected to the device, the output value from the library always give 54612, just wondering if there is a better way to detect the sensor is not connected right to the device or sensor is wrong in i2c communication.

Check this out and modify it to be simpler for your case :wink:

// --------------------------------------
// i2c_scanner
//
// http://playground.arduino.cc/Main/I2cScanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// 
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

#include <application.h>

//#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(9600);
  delay(10000);
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknow error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}
2 Likes

Thanks,@kennethlimcp, it works great.

1 Like

kennethlimcp,

I understand how the Scanner part of the is works to find the Hex Address but what is the Serial.println sending the results to if you use a Photon? Can you use the USB connector and use Terminal someway??

I’ve always wanted to use a Serial Monitor with my Photons for troubleshooting and such but I have no idea how or what to connect the Photons to.

Thanks in advance !!

Serial is via USB serial which means, you can use a terminal like Putty or Coolterm to connect and get data off the usb wire :wink:

kennethlimcp,

Thanks for the quick response.

I use a MacBook Air, it has Terminal, what commands would I use to find, or access the SSH address of the USB on Photon? Then, is there a command to open the “serial flow” ?

Thanks Lane

@laf0138,

It’s not SSH. More like a COM port. For mac, i would recommend using coolTerm.

If you want to use the terminal, you can do something like:

ls /dev/tty.* <-- list the possible serial port (look for usbmodemxxxx)
screen /dev/tty.xxxxxxx 9600 <--- connect to the com port

Make sure your firmware calls Serial.begin(9600) in the setup()

PERFECT - Just like watch’n a “Plumber” … you watch it once, and it’s a piece of cake.

You made it easy. Thanks

Kenneth,

I ran your I2C scanner but found no I2C device connected. Can you spot anything I did wrong on this connection?

Thanks for ALL your help.

Lane

You need to hook up to the SDA (D0) and SCL (D1) pins respectively.

Got it. I thought I had them connected correctly so I took out the two 10k resistors (I added jumpers in their place) and the scanner worked great.

I2C Scanner
Scanning...
I2C device found at address 0x23 !
I2C device found at address 0x5C !
done

1 Like