2x BH1750 an I2C - aber nur einer wird ausgelesen-

Hallo,

ich habe ein kleines Problem mit zwei BH1750 Helligkeitssensoren an einem Uno.

Ich bekomm leider immer nur einen Wert ausgelesen. Möchte aber natürlich beide Werte haben.

Verkabelung passt soweit, also ein ADDR ist auf VCC der andere auf GND. Mit dem I2C Scanner werden auch beide Sensoren erkannt.
Als libary und Grundlagen-Code verwende ich den von http://www.instructables.com/id/BH1750-Digital-Light-Sensor/?ALLSTEPS.

Was muss ich jetzt noch einfügen, um auch den zweiten Wert/Sensor ausgelesen zu bekommen ?

Vielen Dank für die Hilfe.

/*
  This is a simple code to test BH1750FVI Light senosr
  communicate using I2C Protocol 
  this library enable 2 slave device address
  Main address  0x23 
  secondary address 0x5C 
  connect this sensor as following :
  VCC >>> 3.3V
  SDA >>> A4 
  SCL >>> A5
  addr >> A3
  Gnd >>>Gnd

  Written By : Mohannad Rawashdeh
  
 */
 
 // First define the library :

#include <Wire.h>
#include <BH1750FVI.h>


BH1750FVI LightSensor;


void setup() {   // put your setup code here, to run once:
   Serial.begin(9600);
  LightSensor.begin();
  /*
 Set the address for this sensor 
 you can use 2 different address
 Device_Address_H "0x5C"
 Device_Address_L "0x23"
 you must connect Addr pin to A3 .
 */
  LightSensor.SetAddress(Device_Address_H);//Address 0x5C
 // To adjust the slave on other address , uncomment this line
  //lightMeter.SetAddress(Device_Address_L); //Address 0x5C
 //-----------------------------------------------
  /*
   set the Working Mode for this sensor 
   Select the following Mode:
    Continuous_H_resolution_Mode
    Continuous_H_resolution_Mode2
    Continuous_L_resolution_Mode
    OneTime_H_resolution_Mode
    OneTime_H_resolution_Mode2
    OneTime_L_resolution_Mode
    
    The data sheet recommanded To use Continuous_H_resolution_Mode
  */

  LightSensor.SetMode(Continuous_H_resolution_Mode);
  
  Serial.println("Running...");
}


void loop() {
  // put your main code here, to run repeatedly: 
  uint16_t lux = LightSensor.GetLightIntensity();// Get Lux value
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lux");
  delay(100);
}

Hallo,

das habe ich schon versucht und mal die zweite Zeile noch hinzugefügt.

LightSensor.SetAddress(Device_Address_H);//Address 0x5C

// To adjust the slave on other address , uncomment this line

lightMeter.SetAddress(Device_Address_L); //Address 0x5C

dann folgt aber leider eine Fehlermeldung beim kompillieren:

BH1750_serial.ino: In function 'void setup()':
BH1750_serial:40: error: 'lightMeter' was not declared in this scope

  • lightMeter.SetAddress(Device_Address_L); //Address 0x5C*
  • ^*
    exit status 1
    'lightMeter' was not declared in this scope

Sorry, leider kenne ich den Sensor nicht gut genug....
(und leider nicht gesehen, dass du schon geantwortet hast, als ich mein vorheriges Posting gelöscht habe)

Ist denn in der Library kein Beispiel vorhanden, wie die jeweilige Adresse angesprochen wird ?
Die muss ja im Sketch geändert werden.

Da ist als Beispiel nur drin wie man beide umschaltet, aber leider nicht wie man beide gleichzeitig Adressen abrufen kann:

Ja, in dem Beispiel ist es doch schon beschrieben.
Du musst die entsprechend DeviceAdresse per Variable vorgeben und dann in der Loop auf die Variable abfragen und den Wert zur Anzeige bbringen.
Achja, gleichzeitig geht natürlich nicht, nur nacheinander.

okay, i will try.

Hier findest du einige Beispiele, wie man es lösen kann.