#include "Adafruit_VL53L0X.h"
#define LOX1_ADDRESS 0x30
#define LOX2_ADDRESS 0x31
#define LOX3_ADDRESS 0x32
#define LOX4_ADDRESS 0x33
int sensor1, sensor2, sensor3, sensor4;
// set the pins to shutdown
#define SHT_LOX1 26
#define SHT_LOX2 27
#define SHT_LOX3 28
#define SHT_LOX4 29
// objects for the vl53l0x
Adafruit_VL53L0X lox1 = Adafruit_VL53L0X();
Adafruit_VL53L0X lox2 = Adafruit_VL53L0X();
Adafruit_VL53L0X lox3 = Adafruit_VL53L0X();
Adafruit_VL53L0X lox4 = Adafruit_VL53L0X();
// this holds the measurement
VL53L0X_RangingMeasurementData_t measure1;
VL53L0X_RangingMeasurementData_t measure2;
VL53L0X_RangingMeasurementData_t measure3;
VL53L0X_RangingMeasurementData_t measure4;
void setID() {
// all reset
digitalWrite(SHT_LOX1, LOW);
digitalWrite(SHT_LOX2, LOW);
digitalWrite(SHT_LOX3, LOW);
digitalWrite(SHT_LOX4, LOW);
delay(10);
// all unreset
digitalWrite(SHT_LOX1, HIGH);
digitalWrite(SHT_LOX2, HIGH);
digitalWrite(SHT_LOX3, HIGH);
digitalWrite(SHT_LOX4, HIGH);
delay(10);
// activating LOX1 and resetting LOX2, LOX3, LOX4
digitalWrite(SHT_LOX1, HIGH);
digitalWrite(SHT_LOX2, LOW);
digitalWrite(SHT_LOX3, LOW);
digitalWrite(SHT_LOX4, LOW);
// initing LOX1
if (!lox1.begin(LOX1_ADDRESS)) {
Serial.println(F("Failed to boot first VL53L0X"));
while (1);
}
delay(10);
// activating LOX2
digitalWrite(SHT_LOX2, HIGH);
delay(10);
// initing LOX2
if (!lox2.begin(LOX2_ADDRESS)) {
Serial.println(F("Failed to boot second VL53L0X"));
while (1);
}
// activating LOX3
digitalWrite(SHT_LOX3, HIGH);
delay(10);
// initing LOX3
if (!lox3.begin(LOX3_ADDRESS)) {
Serial.println(F("Failed to boot third VL53L0X"));
while (1);
}
// activating LOX4
digitalWrite(SHT_LOX4, HIGH);
delay(10);
// initing LOX4
if (!lox4.begin(LOX4_ADDRESS)) {
Serial.println(F("Failed to boot fourth VL53L0X"));
while (1);
}
}
void read_quad_sensors() {
lox1.rangingTest(&measure1, false);
lox2.rangingTest(&measure2, false);
lox3.rangingTest(&measure3, false);
lox4.rangingTest(&measure4, false);
// print sensor readings
Serial.print("1: ");
if (measure1.RangeStatus != 4) { // if not out of range
sensor1 = measure1.RangeMilliMeter;
Serial.print(sensor1);
Serial.print("mm");
} else {
Serial.print("Out of range");
}
Serial.print(" ");
Serial.print("2: ");
if (measure2.RangeStatus != 4) {
sensor2 = measure2.RangeMilliMeter;
Serial.print(sensor2);
Serial.print("mm");
} else {
Serial.print("Out of range");
}
Serial.print(" ");
Serial.print("3: ");
if (measure3.RangeStatus != 4) {
sensor3 = measure3.RangeMilliMeter;
Serial.print(sensor3);
Serial.print("mm");
} else {
Serial.print("Out of range");
}
Serial.print(" ");
Serial.print("4: ");
if (measure4.RangeStatus != 4) {
sensor4 = measure4.RangeMilliMeter;
Serial.print(sensor4);
Serial.print("mm");
} else {
Serial.print("Out of range");
}
Serial.println();
}
void setup() {
Serial.begin(115200);
// wait until serial port opens for native USB devices
while (! Serial) { delay(1); }
pinMode(SHT_LOX1, OUTPUT);
pinMode(SHT_LOX2, OUTPUT);
pinMode(SHT_LOX3, OUTPUT);
pinMode(SHT_LOX4, OUTPUT);
Serial.println("Shutdown pins inited...");
digitalWrite(SHT_LOX1, LOW);
digitalWrite(SHT_LOX2, LOW);
digitalWrite(SHT_LOX3, LOW);
digitalWrite(SHT_LOX4, LOW);
Serial.println("All sensors in reset mode (pins are low)");
Serial.println("Starting...");
setID();
}
void loop() {
read_quad_sensors();
delay(100);
}