Skip to content
Snippets Groups Projects
Commit 272343ed authored by Orhan-Timo Altan's avatar Orhan-Timo Altan
Browse files

Struktur der Bibliothek verändert.

parent b7d6a1b6
No related branches found
No related tags found
No related merge requests found
/*
* Klasse: BITsTimeOfFlight
*
* Zur erzeugung eines Arrays gefüllt mit Objekten für die Ansteuerung von mehreren VL53L0X Time of Flight Sensoren
*
* O.-T. Altan, Januar 2022
*
*/
#ifndef BITsTOF_H
#define BITsTOF_H
#include "Adafruit_VL53L0X.h"
// #define DEBUG
#ifdef DEBUG
#define _println_(x) Serial.println(x)
#define _print_(x) Serial.print(x)
#else
#define _println_(x)
#define _print_(x)
#endif
const int ToFs = 5; // Anzahl der zu Verwendenden Time of Flight Sensoren
const int ToF_XShuts[ToFs] = {0, 9, 11, 31, A10}; // XShut Pins der einzelnen Time of Flight Sensoren
const int ToF_Addresses[ToFs] = {0x30, 0x31, 0x32, 0x33, 0x34}; // Adresse der einzelnen Time of Flight Sensoren
class BITsTimeOfFlight {
public:
void init() {
for (int i = 0; i < COUNT_SENSORS; i++) {
pinMode(sensors[i].shutdown_pin, OUTPUT);
digitalWrite(sensors[i].shutdown_pin, LOW);
}
bool found_any_sensors = false;
for (int i = 0; i < COUNT_SENSORS; i++)
digitalWrite(sensors[i].shutdown_pin, LOW);
delay(10);
for (int i = 0; i < COUNT_SENSORS; i++) {
digitalWrite(sensors[i].shutdown_pin, HIGH);
delay(100);
if (sensors[i].psensor->begin(sensors[i].id, false, sensors[i].pwire,
sensors[i].sensor_config)) {
found_any_sensors = true;
} else {
_print_(i);
_print_(F(": failed to start\n"));
}
}
if (!found_any_sensors) {
_println_("No valid sensors found");
while (1)
;
}
};
int get_distance(int i){
VL53L0X_RangingMeasurementData_t measure;
sensors[i].psensor->rangingTest(&measure, false); // 'true' um debug Informationen auszugeben
if (measure.RangeStatus != 4) { // phase failures have incorrect data
tof_dist = measure.RangeMilliMeter/10;
_print_(i);
_print_(" Sensor Entfernung (cm): ");
_println_(tof_dist);
} else {
_println_(" Ausserhalb des Messbereichs ");
tof_dist = 200;
}
return tof_dist;
};
private:
int tof_dist;
typedef struct {
Adafruit_VL53L0X *psensor; // Zeiger zum Objekt
TwoWire *pwire;
int id; // Adresse des Sensors
int shutdown_pin; // XShut Pin des Sensors
Adafruit_VL53L0X::VL53L0X_Sense_config_t
sensor_config; // Option wie der Sensor verwendet werden soll
uint16_t range; // Wertebereich für den continuous mode
uint8_t sensor_status;
} sensorList_t;
Adafruit_VL53L0X tof1;
Adafruit_VL53L0X tof2;
Adafruit_VL53L0X tof3;
Adafruit_VL53L0X tof4;
Adafruit_VL53L0X tof5;
sensorList_t sensors[ToFs] =
{
{&tof1, &Wire, ToF_Addresses[0], ToF_XShuts[0], Adafruit_VL53L0X::VL53L0X_SENSE_LONG_RANGE, 0, 0},
{&tof2, &Wire, ToF_Addresses[1], ToF_XShuts[1], Adafruit_VL53L0X::VL53L0X_SENSE_HIGH_SPEED, 0, 0},
{&tof3, &Wire, ToF_Addresses[2], ToF_XShuts[2], Adafruit_VL53L0X::VL53L0X_SENSE_HIGH_SPEED, 0, 0},
{&tof4, &Wire, ToF_Addresses[3], ToF_XShuts[3], Adafruit_VL53L0X::VL53L0X_SENSE_HIGH_SPEED, 0, 0},
{&tof5, &Wire, ToF_Addresses[4], ToF_XShuts[4], Adafruit_VL53L0X::VL53L0X_SENSE_HIGH_SPEED, 0, 0}
};
const int COUNT_SENSORS = sizeof(sensors) / sizeof(sensors[0]);
};
#endif
\ No newline at end of file
# **Time of flight array**
# **BITs Time of flight array**
Diese Bibliothek verwendet die Adafruit_VL53L0X Bibliothek um einen Array mit mehreren Time of Flight Objekten zu erstellen. Da die VL53L0X Time of Flight Sensoren alle die selbe Adresse besitzen, müssen diese nacheinander aktiviert und initialisiert werden. Dies soll mit dieser Bibliothek automatisch geschehen.
......@@ -17,13 +17,13 @@ Getestet mit:
Um diese Bibliothek verwenden zu können, muss dieses Repository geklont und in das Library-Verzeichnis der Arduino-IDE kopiert werden.<br />
<br />
Um die Anzahl der Time of Flight Sensoren, die zugehörigen XShut Pin Belegungen, sowie die Adressen der Sensoren anzupassen, müssen in der tof_array.h Datei folgende Parameter verändert werden:
Um die Anzahl der Time of Flight Sensoren, die zugehörigen XShut Pin Belegungen, sowie die Adressen der Sensoren anzupassen, müssen in der BITs_tof_array.h Datei folgende Parameter angepasst werden:
- ToFs: Anzahl der zu Verwendenden Time of Flight Sensoren.
- ToF_XShuts: Pinbelegungen der XShut Pins von den einzelnen Sensoren.
- ToF_Addresses: Adressen der einzelnen Sensoren.
Möchte man mehr als 5 Time of Flight Sensoren verwenden, so müssen ebenfalls anpassungen an der Liste `sensors[]` gemacht werden.<br />
Möchte man mehr als 5 Time of Flight Sensoren verwenden, so müssen ebenfalls anpassungen an der Liste `sensors[]` gemacht, so wie weitere *Adafruit_VL53L0X* Objekte instanziiert werden.<br />
<br />
## **Anwendung**:<br />
......
#include "tof_array.h"
#include "BITs_tof_array.h"
BITsTimeOfFlight tof_array;
void setup() {
Serial.begin(115200);
Wire.begin();
tof_init();
tof_array.init();
}
void loop() {
int test = get_tof_distance(0);
int test2 = get_tof_distance(1);
int test3 = get_tof_distance(2);
int test4 = get_tof_distance(3);
int test5 = get_tof_distance(4);
int test = tof_array.get_distance(0);
int test2 = tof_array.get_distance(1);
int test3 = tof_array.get_distance(2);
int test4 = tof_array.get_distance(3);
int test5 = tof_array.get_distance(4);
Serial.print(test);
Serial.print(" ");
Serial.print(test2);
......
/*
*
* Zur erzeugung eines Arrays gefüllt mit Objekten für die Ansteuerung von VL53L0X Time of Flight Sensoren
*
* O.-T. Altan, Januar 2022
*
*/
#ifndef TOF_H
#define TOF_H
#include "Adafruit_VL53L0X.h"
const int ToFs = 5; // Anzahl der zu Verwendenden Time of Flight Sensoren
const int ToF_XShuts[ToFs] = {NULL, 9, 11, 31, A10}; // XShut Pins der einzelnen Time of Flight Sensoren
const int ToF_Addresses[ToFs] = {0x30, 0x31, 0x32, 0x33, 0x34}; // Adresse der einzelnen Time of Flight Sensoren
int tof_dist;
// #define DEBUG
#ifdef DEBUG
#define _println_(x) Serial.println(x)
#define _print_(x) Serial.print(x)
#else
#define _println_(x)
#define _print_(x)
#endif
typedef struct {
Adafruit_VL53L0X *psensor; // Zeiger zum Objekt
TwoWire *pwire;
int id; // Adresse des Sensors
int shutdown_pin; // XShut Pin des Sensors
Adafruit_VL53L0X::VL53L0X_Sense_config_t
sensor_config; // Option wie der Sensor verwendet werden soll
uint16_t range; // Wertebereich für den continuous mode
uint8_t sensor_status;
} sensorList_t;
Adafruit_VL53L0X tof1;
Adafruit_VL53L0X tof2;
Adafruit_VL53L0X tof3;
Adafruit_VL53L0X tof4;
Adafruit_VL53L0X tof5;
sensorList_t sensors[] =
{
{&tof1, &Wire, ToF_Addresses[0], ToF_XShuts[0], Adafruit_VL53L0X::VL53L0X_SENSE_LONG_RANGE, 0, 0},
{&tof2, &Wire, ToF_Addresses[1], ToF_XShuts[1], Adafruit_VL53L0X::VL53L0X_SENSE_HIGH_SPEED, 0, 0},
{&tof3, &Wire, ToF_Addresses[2], ToF_XShuts[2], Adafruit_VL53L0X::VL53L0X_SENSE_HIGH_SPEED, 0, 0},
{&tof4, &Wire, ToF_Addresses[3], ToF_XShuts[3], Adafruit_VL53L0X::VL53L0X_SENSE_HIGH_SPEED, 0, 0},
{&tof5, &Wire, ToF_Addresses[4], ToF_XShuts[4], Adafruit_VL53L0X::VL53L0X_SENSE_HIGH_SPEED, 0, 0}
};
const int COUNT_SENSORS = sizeof(sensors) / sizeof(sensors[0]);
void tof_init() {
for (int i = 0; i < COUNT_SENSORS; i++) {
pinMode(sensors[i].shutdown_pin, OUTPUT);
digitalWrite(sensors[i].shutdown_pin, LOW);
}
bool found_any_sensors = false;
for (int i = 0; i < COUNT_SENSORS; i++)
digitalWrite(sensors[i].shutdown_pin, LOW);
delay(10);
for (int i = 0; i < COUNT_SENSORS; i++) {
digitalWrite(sensors[i].shutdown_pin, HIGH);
delay(100);
if (sensors[i].psensor->begin(sensors[i].id, false, sensors[i].pwire,
sensors[i].sensor_config)) {
found_any_sensors = true;
} else {
_print_(i);
_print_(F(": failed to start\n"));
}
}
if (!found_any_sensors) {
_println_("No valid sensors found");
while (1)
;
}
}
int get_tof_distance(int i){
VL53L0X_RangingMeasurementData_t measure;
sensors[i].psensor->rangingTest(&measure, false); // 'true' um debug Informationen auszugeben
if (measure.RangeStatus != 4) { // phase failures have incorrect data
tof_dist = measure.RangeMilliMeter/10;
_print_(i);
_print_(" Sensor Entfernung (cm): ");
_println_(tof_dist);
} else {
_println_(" Ausserhalb des Messbereichs ");
tof_dist = 200;
}
return tof_dist;
}
#endif
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment