датчик VL53L0X срабатывание реле по уставкам

andrewkik
Offline
Зарегистрирован: 09.11.2018

Всем привет.

ищу помощи.

есть датчик VL53L0X и ардуино нано. надо чтобы выход D12 активировался по расстоянию от 0 до 100 см.

поправил скетч ардуиновский, но не работает.

где косяк? кто поправит правильно?

/* This example shows how to get single-shot range
 measurements from the VL53L0X. The sensor can optionally be
 configured with different ranging profiles, as described in
 the VL53L0X API user manual, to get better performance for
 a certain application. This code is based on the four
 "SingleRanging" examples in the VL53L0X API.

 The range readings are in units of mm. */

#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;

const int alarmPin = 12;
long duration, cm;

// Uncomment this line to use long range mode. This
// increases the sensitivity of the sensor and extends its
// potential range, but increases the likelihood of getting
// an inaccurate reading because of reflections from objects
// other than the intended target. It works best in dark
// conditions.

#define LONG_RANGE


// Uncomment ONE of these two lines to get
// - higher speed at the cost of lower accuracy OR
// - higher accuracy at the cost of lower speed

//#define HIGH_SPEED
#define HIGH_ACCURACY


void setup()
{
  Serial.begin(9600);
  Wire.begin();

  sensor.init();
  sensor.setTimeout(500);
  pinMode(alarmPin, OUTPUT);

#if defined LONG_RANGE
  // lower the return signal rate limit (default is 0.25 MCPS)
  sensor.setSignalRateLimit(0.1);
  // increase laser pulse periods (defaults are 14 and 10 PCLKs)
  sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
  sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
#endif

#if defined HIGH_SPEED
  // reduce timing budget to 20 ms (default is about 33 ms)
  sensor.setMeasurementTimingBudget(20000);
#elif defined HIGH_ACCURACY
  // increase timing budget to 200 ms
  sensor.setMeasurementTimingBudget(200000);
#endif
}

void loop()
{
  Serial.print(sensor.readRangeSingleMillimeters());
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();
  duration = sensor.init();
  cm = duration;
  if(cm > 0 && cm < 100){digitalWrite(alarmPin,LOW );
  }else{digitalWrite(alarmPin, HIGH);}
}

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А, простите, где Вы взяли этот "скетч ардуиновский"? А, вижу - "сам поправил".

andrewkik пишет:

где косяк? 

Косяк в подходе к делу. Вы "правите" методом тыка, не понимая ни единой буквы.

В строках №№ 68-69 написан чистый, рафинированый бред, уж простите мой французский. Начнём с того, что init возвращает тип bool, ну и так далее. Вы бы хоть свою cm в монитор порта вывели и посмотрели бы на неё!

andrewkik пишет:

кто поправит правильно?

Запостите в профильном разделе. Там найдётся кто-нибудь.

andrewkik
Offline
Зарегистрирован: 09.11.2018

спасибо за подсказку.!