zwei VL53L0X Time-of-Flight Sensoren

Hallo,

ich versuche 2 VL53L0X von Pololu gleichzeitig auszulesen:

Jedoch funktioniert es nicht...
ich weiss nur, dass ich bei der Initialisierung die i2c-Adresse ändern muss.
Habe bereits schon das Internet durchforstet, finde jedoch keinen Tipp, der mir weiterhilft.
Wenn nur ein Sensor angeschlossen ist, funktioniert es super...bringt mir aber nichts, da ich in Zukunft mind. 5 VL53L0X nutzen möchte.

Hier mal mein Code:

#include <Wire.h>
#include <Servo.h>
#include <VL53L0X.h>

VL53L0X dist1;
VL53L0X dist2;
void setup() {
  // put your setup code here, to run once:
 Wire.begin();
 Serial.begin(9600);
  //Pins für XSHUT
 pinMode(51,OUTPUT);
 pinMode(53,OUTPUT);
  // einen Sensor aktiv setzen
 digitalWrite(51,HIGH);
 digitalWrite(53,LOW);
  // erster Sensor 
 dist1.init();
 dist1.setTimeout(500);
 dist1.setAddress(0x39);
 dist1.startContinuous();

   // erster Sensor 
 digitalWrite(51,LOW);
 digitalWrite(53,HIGH);
 dist2.init();
 dist2.setAddress(0x29);
 dist2.setTimeout(500);
 dist2.startContinuous();
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("Distance: ");
  Serial.print(dist1.readRangeContinuousMillimeters());
  Serial.print(", ");
  Serial.print(dist1.getAddress());
   Serial.print(", ");
  Serial.print(dist2.readRangeContinuousMillimeters());
   Serial.print(", ");
  Serial.println(dist2.getAddress());
}

Schon mal DANKE für Tipps :smiley:

– Put all devices under reset
– Enable VL53L0X one after the other and set their I2C address through

 digitalWrite(51,HIGH);
 digitalWrite(53,LOW);
...
 digitalWrite(51,LOW);
 digitalWrite(53,HIGH);

Fehlt da nicht was? Ich vermute, LOW entspricht Reset?

 digitalWrite(51,LOW);
 digitalWrite(53,LOW);
...
 digitalWrite(51,HIGH);
 digitalWrite(53,LOW);
...
 digitalWrite(51,LOW);
 digitalWrite(53,HIGH);
...
 digitalWrite(51,HIGH);
 digitalWrite(53,HIGH);

Ob die ersten LOWs notwendig sind, mußt Du probieren.

Hallo,

ich habe gerade auch das gleiche Problem, möchte 4 von den Sensoren benutzen, und habe Problem mit dem Adressenänderung.

hast du eine Lösung für das Problem gefunden??

wenn ja, das kann mir echt weiterhelfen.

Dankeschön im Voraus

Hallo,

ich habe gerade das gleiche versucht (mit dem Code von oben) und bekomme es immerhin schonmal zum Laufen:

Und zwar klappt es, wenn man den XSHUT des bereits geänderten Sensors nicht wieder auf LOW setzt, sondern auf HIGH belässt.

#include <Wire.h>
#include <VL53L0X.h>

#define XSHUT1 11
#define XSHUT2 12

VL53L0X dist1;
VL53L0X dist2;

void setup() {
 Wire.begin();
 Serial.begin(9600);
 
 pinMode(XSHUT1,OUTPUT);
 pinMode(XSHUT2,OUTPUT);
 
  // einen Sensor aktiv setzen
 digitalWrite(XSHUT1,HIGH);
 digitalWrite(XSHUT2,LOW);
 
  // erster Sensor 
 dist1.init();
 dist1.setTimeout(500);
 dist1.setAddress(0x39);
 dist1.startContinuous();

  // zweiter Sensor 
 //digitalWrite(XSHUT1,LOW);  <-- 1. Sensor aktiviert lassen!
 digitalWrite(XSHUT2,HIGH);
 dist2.init();
 dist2.setAddress(0x29);
 dist2.setTimeout(500);
 dist2.startContinuous();
}

void loop() {
  Serial.print("Distance: ");
  Serial.print(dist1.readRangeContinuousMillimeters());
  Serial.print(", ");
  Serial.print(dist1.getAddress(), HEX);
  Serial.print(", ");
  Serial.print(dist2.readRangeContinuousMillimeters());
  Serial.print(", ");
  Serial.println(dist2.getAddress(), HEX);
}