Баг программы или руки-крюки?
Добавлено: 18 мар 2020, 22:49
При компиляции скетча не работает проект. Имеются два пользовательских блока лазерного датчика VL53LOX. Создал простенький проект. Вроде, как компилируются оба датчика. Но по факту, работает только один. Такое впечатление, что висят они на одном адресе, хотя перед компиляцией я прописал адреса для каждого из датчиков. После обесточивания снова устанавливается один дефолт на двух датчиках. Я не программист. Не могу понять как присвоить адреса в программе двум одинаковым блокам. Пробовал подключать датчики и без, и с XSHUT. Заранее благодарю за помощь!
С уважением, Аркадий
[/code]ресе на I2C. Адреса я прописывал для каждого датчика. (29) и (31). После обесточивания возвращается 29 для обоих.
С уважением, Аркадий
Код: Выделить всё
[code]
#include <Wire.h>
#include <VL53L0X.h>
extern "C" {
#include "user_interface.h";
}
bool en_99658143_1;
int period_99658143_1;
int dist_99658143_1;
VL53L0X sensor_99658143_1;
long previousMillis_99658143_1= 0; // храним время последнего переключения светодиода
bool en_99658143_2;
int period_99658143_2;
int dist_99658143_2;
VL53L0X sensor_99658143_2;
long previousMillis_99658143_2= 0; // храним время последнего переключения светодиода
void setup()
{
pinMode(16, OUTPUT);
digitalWrite(16, 0);
Wire.begin();
sensor_99658143_1.init();
sensor_99658143_1.setTimeout(500);
sensor_99658143_1.setSignalRateLimit(0.1);
sensor_99658143_1.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
sensor_99658143_1.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
Wire.begin();
sensor_99658143_2.init();
sensor_99658143_2.setTimeout(500);
sensor_99658143_2.setSignalRateLimit(0.1);
sensor_99658143_2.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
sensor_99658143_2.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
}
void loop()
{
//Плата:1
en_99658143_1 = 1;
period_99658143_1 = 10;
if (en_99658143_1==1)
{
long interval= period_99658143_1 ; // интервал между включение/выключением светодиода (1 секунда)
unsigned long currentMillis = millis();
//проверяем не прошел ли нужный интервал, если прошел то
if(currentMillis - previousMillis_99658143_1 > interval) {
// сохраняем время последнего переключения
previousMillis_99658143_1 = currentMillis;
dist_99658143_1=(sensor_99658143_1.readRangeSingleMillimeters());
}
}
en_99658143_2 = 1;
period_99658143_2 = 10;
if (en_99658143_2==1)
{
long interval= period_99658143_2 ; // интервал между включение/выключением светодиода (1 секунда)
unsigned long currentMillis = millis();
//проверяем не прошел ли нужный интервал, если прошел то
if(currentMillis - previousMillis_99658143_2 > interval) {
// сохраняем время последнего переключения
previousMillis_99658143_2 = currentMillis;
dist_99658143_2=(sensor_99658143_2.readRangeSingleMillimeters());
}
}
digitalWrite(16, !(( ((dist_99658143_1) < (300)) && ((dist_99658143_2) < (300)) )));
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}