ESP32 und VL53L0X ein- und ausschalten

Hallo,

ich versuche mich gerade an dem tof Sensor und bekomme es einfach nicht hin, ihn ein- und auszuschalten über den XSHUT Port.

Sobald ich das hier verwende im Setup funktioniert der Sensor nicht mehr und gibt mir immer nur den gleichen Wert von "Reading a measurement... Distance (mm): 256". Sobald ich die Zeile wieder auskommentiere funktioniert er.

  pinMode(xShut, OUTPUT); //Wenn ich das auskommentiere funktioniert er
  digitalWrite(xShut, LOW); //Egal ob LOW oder HIGH

Hier ist mal mein ganzer Code. Ich möchte ihn gerne über Serial ein- und ausschalten.

#include "Adafruit_VL53L0X.h"
#define xShut 14
Adafruit_VL53L0X lox = Adafruit_VL53L0X();

void setup() {
  Serial.begin(115200);

  // wait until serial port opens for native USB devices
  while (! Serial) {
    delay(1);
  }
  
  Serial.println("Adafruit VL53L0X test");
  if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
  // power 
  Serial.println(F("VL53L0X API Simple Ranging example\n\n")); 

  pinMode(xShut, OUTPUT); 
  digitalWrite(xShut, LOW);
  delay(100);
}


void loop() {
  if (Serial.available() > 0)  // Daten werden empfangen
  {
    String inString = Serial.readStringUntil('\n'); // Zeichen vom Seriellen Port in inByte ablegen
    inString.trim();
    if (inString.equals("tofOn")) {
      digitalWrite(xShut, HIGH);
      Serial.println("Sensor on");
    } else if (inString.equals("tofOff")) {
      digitalWrite(xShut, LOW);
      Serial.println("Sensor off");
    }
  }
  
  VL53L0X_RangingMeasurementData_t measure;
    
  Serial.print("Reading a measurement... ");
  lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!

  if (measure.RangeStatus != 4) {  // phase failures have incorrect data
    Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
  } else {
    Serial.println(" out of range ");
  }
   
  delay(100);
}

Hier ist noch meine Verkabelung. Ich benutze die abgebildeten Boards.

1 Like

Das hat mir weitergeholfen, danke! Ich hab übersehen, dass nach jedem shutdown wieder ein lox.begin(); stattfinden muss. Hier mein funktionierendes Beispiel.

#include "Adafruit_VL53L0X.h"
#define xShut 14
Adafruit_VL53L0X lox = Adafruit_VL53L0X();

void setup() {
  Serial.begin(115200);
  
  // wait until serial port opens for native USB devices
  while (! Serial) {
    delay(1);
  }

  Serial.println("Adafruit VL53L0X test");
  if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
  // power 
  Serial.println(F("VL53L0X API Simple Ranging example\n\n")); 
  delay(100);
  pinMode(xShut, OUTPUT); 
  digitalWrite(xShut, LOW);
}

void loop() {
  if (Serial.available() > 0)  // Daten werden empfangen
  {
    String inString = Serial.readStringUntil('\n'); // Zeichen vom Seriellen Port in inByte ablegen
    inString.trim();
    if (inString.equals("tofOn")) {
      digitalWrite(xShut, HIGH);
      Serial.println("Sensor on");
      lox.begin();
      delay(10);
    } else if (inString.equals("tofOff")) {
      digitalWrite(xShut, LOW);
      delay(10);
      Serial.println("Sensor off");
    }
  }
  
  VL53L0X_RangingMeasurementData_t measure;
    
  Serial.print("Reading a measurement... ");
  lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!

  if (measure.RangeStatus != 4) {  // phase failures have incorrect data
    Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
  } else {
    Serial.println(" out of range ");
  }
   
  delay(100);
}

LG Daniel

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.