Датчик arduino vl53l0x

Я пытаюсь сделать сенсорный триггер унитаза с помощью датчика vl53l0x, у меня проблемы с запуском действия, пока моя рука находится перед датчиком в течение 5 секунд или около того, в то время как я пробовал другой версии blinkwithoutdelay sketches и другие методы, найденные в Интернете, все они запускают 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);
  }

}

person Negusoy    schedule 18.03.2019    source источник
comment
Если вы хотите, чтобы он стрелял, когда ваша рука находится впереди (менее 20 см), избавьтесь от таймера и сделайте что угодно if (distance < 20) { Serial.println ("Presence detected."); }   -  person Johnny Mopp    schedule 18.03.2019
comment
а как его запустить по прошествии 5 секунд?   -  person Negusoy    schedule 18.03.2019
comment
Итак, вы хотите, чтобы он выстрелил после того, как рука была перед датчиком в течение 5 секунд?   -  person Johnny Mopp    schedule 18.03.2019
comment
да, например, я кладу руку перед ним, держу руку там в течение 5 секунд, после этого что-то делаю, если меньше 5 секунд, ничего не делаю или что-то в этом роде   -  person Negusoy    schedule 18.03.2019


Ответы (1)


Если вы хотите, чтобы он выстрелил после того, как рука была перед датчиком в течение 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;      
}
person Johnny Mopp    schedule 18.03.2019
comment
Омг, ты не представляешь, сколько я пытался сделать эту работу, я бы хотел дать тебе настоящего пива :), могу ли я как-то добавить тебя в друзья? или что-нибудь, чтобы связаться с вами в будущем? Я пытался найти помощь на форумах Arduino, но люди там злые ... еще раз спасибо! - person Negusoy; 18.03.2019
comment
Когда кто-то ответит на ваш вопрос, вы можете проголосовать за него и принять его. См. stackoverflow.com/help/someone-answers. - person Johnny Mopp; 18.03.2019
comment
К сожалению, я не могу проголосовать, что-то говорит о репутации 15, вероятно, потому, что я только что зарегистрировался - person Negusoy; 18.03.2019
comment
Без проблем. Вы зарабатываете репутацию и привилегии, пользуясь сайтом. - person Johnny Mopp; 18.03.2019