mirror of
https://github.com/letscontrolit/ESPEasy.git
synced 2026-09-14 10:35:30 +00:00
[lib/VL53L1X] Include missing files from SparkFun_VL53L1X library
License and properties file are also an important part of a library.
This commit is contained in:
+112
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
Reading distance from the laser based VL53L1X
|
||||
By: Armin Joachimsmeyer
|
||||
for SparkFun Electronics
|
||||
Date: February 20th, 2020
|
||||
License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
|
||||
|
||||
SparkFun labored with love to create this code. Feel like supporting open source hardware?
|
||||
Buy a board from SparkFun! https://www.sparkfun.com/products/14667
|
||||
|
||||
This example prints the distance to an object to the Arduino Serial Plotter and generates a tone depending on distance.
|
||||
|
||||
Are you getting weird readings? Be sure the vacuum tape has been removed from the sensor.
|
||||
*/
|
||||
|
||||
#include <Wire.h>
|
||||
#include "SparkFun_VL53L1X.h" //Click here to get the library: http://librarymanager/All#SparkFun_VL53L1X
|
||||
|
||||
//Optional interrupt and shutdown pins.
|
||||
#define SHUTDOWN_PIN 2
|
||||
#define INTERRUPT_PIN 3
|
||||
#define TONE_PIN 11
|
||||
|
||||
SFEVL53L1X distanceSensor;
|
||||
//Uncomment the following line to use the optional shutdown and interrupt pins.
|
||||
//SFEVL53L1X distanceSensor(Wire, SHUTDOWN_PIN, INTERRUPT_PIN);
|
||||
|
||||
void setup(void)
|
||||
{
|
||||
Wire.begin();
|
||||
|
||||
// initialize the digital pin as an output.
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
Serial.begin(115200);
|
||||
while (!Serial)
|
||||
; //delay for Leonardo
|
||||
// Just to know which program is running on my Arduino
|
||||
Serial.println(F("START " __FILE__));
|
||||
|
||||
#if !defined(ESP32) && !defined(ARDUINO_SAM_DUE) && !defined(__SAM3X8E__)
|
||||
// test beep for the connected speaker
|
||||
tone(TONE_PIN, 1000, 100);
|
||||
delay(200);
|
||||
#endif
|
||||
|
||||
if (distanceSensor.begin() != 0) //Begin returns 0 on a good init
|
||||
{
|
||||
Serial.println("Sensor failed to begin. Please check wiring. Freezing...");
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
Serial.println("Sensor online!");
|
||||
|
||||
// Short mode max distance is limited to 1.3 m but has a better ambient immunity.
|
||||
// Above 1.3 meter error 4 is thrown (wrap around).
|
||||
distanceSensor.setDistanceModeShort();
|
||||
//distanceSensor.setDistanceModeLong(); // default
|
||||
|
||||
// Print Legend
|
||||
Serial.println("Distance Signal-Rate/100 Ambient-Rate/100");
|
||||
|
||||
/*
|
||||
* The minimum timing budget is 20 ms for the short distance mode and 33 ms for the medium and long distance modes.
|
||||
* Predefined values = 15, 20, 33, 50, 100(default), 200, 500.
|
||||
* This function must be called after SetDistanceMode.
|
||||
*/
|
||||
distanceSensor.setTimingBudgetInMs(50);
|
||||
|
||||
// measure periodically. Intermeasurement period must be >/= timing budget.
|
||||
distanceSensor.setIntermeasurementPeriod(100);
|
||||
distanceSensor.startRanging(); // Start once
|
||||
}
|
||||
|
||||
void loop(void)
|
||||
{
|
||||
while (!distanceSensor.checkForDataReady())
|
||||
{
|
||||
delay(1);
|
||||
}
|
||||
byte rangeStatus = distanceSensor.getRangeStatus();
|
||||
unsigned int distance = distanceSensor.getDistance(); //Get the result of the measurement from the sensor
|
||||
distanceSensor.clearInterrupt();
|
||||
|
||||
/*
|
||||
* With signed int we get overflow at short distances.
|
||||
* With unsigned we get an overflow below around 2.5 cm.
|
||||
*/
|
||||
unsigned int tSignalRate = distanceSensor.getSignalRate();
|
||||
unsigned int tAmbientRate = distanceSensor.getAmbientRate();
|
||||
|
||||
if (rangeStatus == 0)
|
||||
{
|
||||
#if !defined(ESP32) && !defined(ARDUINO_SAM_DUE) && !defined(__SAM3X8E__)
|
||||
tone(11, distance + 500);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
// if tAmbientRate > tSignalRate we likely get a signal fail error condition
|
||||
// in Distance mode short we get error 4 (out of bounds) or 7 (wrap around) if the distance is greater than 1.3 meter.
|
||||
distance = rangeStatus;
|
||||
#if !defined(ESP32) && !defined(ARDUINO_SAM_DUE) && !defined(__SAM3X8E__)
|
||||
noTone(11);
|
||||
#endif
|
||||
}
|
||||
|
||||
Serial.print(distance);
|
||||
Serial.print(' ');
|
||||
Serial.print(tSignalRate / 100);
|
||||
Serial.print(' ');
|
||||
Serial.println(tAmbientRate / 100);
|
||||
}
|
||||
Reference in New Issue
Block a user