Arduino vl53l0x 传感器
Arduino vl53l0x sensor
我正在尝试使用 vl53l0x 传感器制作马桶感应触发器,但当我的手在传感器前面 5 秒或所以,虽然我尝试了不同版本的 blinkwithoutdelay 草图,以及在网上找到的其他方法,但在我拉动传感器的手后,所有这些都触发了 5 秒,这不是我想要的。在此先感谢,我将我的草图贴到了我目前所得到的。提前致谢!
// Library for TOF SENSOR
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
// Time calculation
unsigned long startTime;
unsigned long endTime; // store end time here
unsigned long duration; // duration stored
byte timerRunning;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
// Start continuous back-to-back mode (take readings as
// fast as possible). To use continuous timed mode
// instead, provide a desired inter-measurement period in
// ms (e.g. sensor.startContinuous(100)).
sensor.startContinuous();
}
void loop() {
// put your main code here, to run repeatedly:
delay(1000);
int tofdata = sensor.readRangeContinuousMillimeters();
int distance = tofdata / 10; // convert mm to cm
Serial.print( distance ); // print new converted data
Serial.println( " cm" );
// Code for presence detection
if ( timerRunning == 0 && distance <= 20 ){
startTime = millis() / 1000;
Serial.println("time started, starting count");
timerRunning = 1;
}
if ( timerRunning == 1 && distance >= 20 ){
endTime = millis() / 1000;
timerRunning = 0;
duration = endTime - startTime;
Serial.println ("Presence detected for seconds: ");
Serial.print(duration);
}
}
如果想让它在手放在传感器前面 5 秒后触发,试试这个:
void loop() {
// Get distance
delay(1000);
int tofdata = sensor.readRangeContinuousMillimeters();
int distance = tofdata / 10; // convert mm to cm
// Code for presence detection
if (distance <= 20 ) {
// Object is close, check if timer is running
if (!timerRunning) {
// Timer not running. Start timer
startTime = millis();
Serial.println("time started, starting count");
timerRunning = 1;
}
else {
// Has 5 seconds passed?
uint32_t elapsed_time = millis() - startTime ;
if (elapsed_time >= 5000) {
// YES. DO SOMETHING HERE
// and reset
timerRunning = 0;
}
}
}
else {
// Object is not close.
timerRunning = 0;
}
我正在尝试使用 vl53l0x 传感器制作马桶感应触发器,但当我的手在传感器前面 5 秒或所以,虽然我尝试了不同版本的 blinkwithoutdelay 草图,以及在网上找到的其他方法,但在我拉动传感器的手后,所有这些都触发了 5 秒,这不是我想要的。在此先感谢,我将我的草图贴到了我目前所得到的。提前致谢!
// Library for TOF SENSOR
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
// Time calculation
unsigned long startTime;
unsigned long endTime; // store end time here
unsigned long duration; // duration stored
byte timerRunning;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
// Start continuous back-to-back mode (take readings as
// fast as possible). To use continuous timed mode
// instead, provide a desired inter-measurement period in
// ms (e.g. sensor.startContinuous(100)).
sensor.startContinuous();
}
void loop() {
// put your main code here, to run repeatedly:
delay(1000);
int tofdata = sensor.readRangeContinuousMillimeters();
int distance = tofdata / 10; // convert mm to cm
Serial.print( distance ); // print new converted data
Serial.println( " cm" );
// Code for presence detection
if ( timerRunning == 0 && distance <= 20 ){
startTime = millis() / 1000;
Serial.println("time started, starting count");
timerRunning = 1;
}
if ( timerRunning == 1 && distance >= 20 ){
endTime = millis() / 1000;
timerRunning = 0;
duration = endTime - startTime;
Serial.println ("Presence detected for seconds: ");
Serial.print(duration);
}
}
如果想让它在手放在传感器前面 5 秒后触发,试试这个:
void loop() {
// Get distance
delay(1000);
int tofdata = sensor.readRangeContinuousMillimeters();
int distance = tofdata / 10; // convert mm to cm
// Code for presence detection
if (distance <= 20 ) {
// Object is close, check if timer is running
if (!timerRunning) {
// Timer not running. Start timer
startTime = millis();
Serial.println("time started, starting count");
timerRunning = 1;
}
else {
// Has 5 seconds passed?
uint32_t elapsed_time = millis() - startTime ;
if (elapsed_time >= 5000) {
// YES. DO SOMETHING HERE
// and reset
timerRunning = 0;
}
}
}
else {
// Object is not close.
timerRunning = 0;
}