Страница 1 из 1

Баг программы или руки-крюки?

Добавлено: 18 мар 2020, 22:49
Arkan
При компиляции скетча не работает проект. Имеются два пользовательских блока лазерного датчика VL53LOX. Создал простенький проект. Вроде, как компилируются оба датчика. Но по факту, работает только один. Такое впечатление, что висят они на одном адресе, хотя перед компиляцией я прописал адреса для каждого из датчиков. После обесточивания снова устанавливается один дефолт на двух датчиках. Я не программист. Не могу понять как присвоить адреса в программе двум одинаковым блокам. Пробовал подключать датчики и без, и с XSHUT. Заранее благодарю за помощь!
С уважением, Аркадий

Код: Выделить всё






[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));}
  }

[/code]ресе на I2C. Адреса я прописывал для каждого датчика. (29) и (31). После обесточивания возвращается 29 для обоих.

Баг программы или руки-крюки?

Добавлено: 19 мар 2020, 08:19
Ingwar
Arkan писал(а): 18 мар 2020, 22:49 После обесточивания возвращается 29 для обоих.
Здесь вроде написано, что при обесточивании нужно заново прописывать адрес...

Баг программы или руки-крюки?

Добавлено: 19 мар 2020, 16:40
Arkan
Ingwar писал(а): 19 мар 2020, 08:19
Arkan писал(а): 18 мар 2020, 22:49 После обесточивания возвращается 29 для обоих.
Здесь вроде написано, что при обесточивании нужно заново прописывать адрес...
Спасибо большое! Как-то пропустил это описание. Но сегодня ночью все же решил проблему. Вернее две проблемы сразу. Если посмотрите на выложенный мной первый код загрузчика, вы увидите, что блоки датчика имеют одно и то же имя. с разницей в метке. 1 и 2. Если тупо поменять адреса датчиков, ничего не меняется для работы блоков. Воспроизводится работа только дефолтного датчика. Я нашел на сайте arduino.ru пост от 2012 года участника с ником Araris, написавшего программу для работы двух датчиков. Программа рабочая. Но не адаптированная под FlProg. Кроме того, главная беда это то, что при пропадании питания, необходимо заново компилировать загрузчик, т.к. назначенные адреса пропадают и возвращается для обоих датчиков один дефолтный. Решение: вначале нужно добиться от блока Vl53LOX назначения разных имен для двух датчиков. Пееред написанием проекта, я установил разные адреса для обоих датчиков. после установил блоки VL53LOX в программе и скомпелировал. Убедившись, что каждому блоку присвоено свое имя, можно переходить дальше. Нужно агрузить свой проект в arduino IDE. В программе внести изменения, как в скетче. Загрузить в МК. Вы должны увидеть оба датчика. В скетче я специально оставил пины и имя своего датчика, чтобы, кто особо не разбирается, мог заменить на свой. Теперь можете обесточить и снова подать питание на МК. Датчики будут работать! Надеюсь, кому-то пригодится.
С уважением, Аркадий

#include <VL53L0X.h>
#define VL53L0X_XSHUT1_PIN D6 // Пин XSHUT второго датчика датчика
#define VL53L0X_XSHUT2_PIN D5 // Пин XSHUT дефолтного датчика
#define VL53L0X1_ADDRESS 41 //дефолтный адрес VL53L0X.
#define VL53L0X2_ADDRESS 42 //новый адрес VL53L0Xдля второго датчика

void setup()
{

/////////// Гасим пины обоих датчиков

pinMode(VL53L0X_XSHUT1_PIN, OUTPUT);
pinMode(VL53L0X_XSHUT2_PIN, OUTPUT);

Serial.begin(9600, SERIAL_8N1);

Wire.begin();

/////////// Меняем адрес второго датчика и "поднимаем" оба
pinMode(VL53L0X_XSHUT2_PIN, INPUT); // Подъем датчиков
delay(10);
sensor_187242782_1.setAddress(VL53L0X2_ADDRESS); //Запускаем второй датчика
pinMode(VL53L0X_XSHUT1_PIN, INPUT);
delay(10);

}
void loop()
{

}

Баг программы или руки-крюки?

Добавлено: 19 мар 2020, 23:20
RRGG
VL53L0X, где я могу найти уже готовый пользовательский блок FlProg? https://www.youtube.com/watch?v=r8S9w3xwyBY очень ясно показывает, как создать его самостоятельно, но только для продвинутых. А для «чайника» все правильно оформить отнимет много времени. Спосибо :smile37: :smile198:

Баг программы или руки-крюки?

Добавлено: 02 апр 2020, 12:31
RRGG
Я не знаю, почему новый пользовательский блок не сохраняется ?? Когда выключаеш и снова включаеш Flprog, созданный пользовательский блок исчезает. Так сложно созданный новый блок при копировании из Yotube и потерять его - это просто катастрофа. Создаваемый блок - это в коде (Code). Если кто знает, помогите. :smile390: :smile113: :( :(

Баг программы или руки-крюки?

Добавлено: 02 апр 2020, 13:59
edyapd
[ref]RRGG[/ref], посмотрите в настройках, где у вас сохраняются пользовательские блоки. И проверьте, что у пользователя, из под которого запускается программа, есть права на запись в эту папку.
[spoiler]
111.jpg
[/spoiler]

Баг программы или руки-крюки?

Добавлено: 02 апр 2020, 18:34
RRGG
:smile453: Я посмотрел, но у меня на одну уставку меньше. Хотя там не пишет о пользовательских блоках.

Отправлено спустя 20 минут 44 секунды:
Первая фотография для сохранения создаваемого пользовательского блока. Но после позволяет расширять блок дальше. Позже, когда выходиш из программы, снова начинает ругатся. Это видно на втором фото.
:smile390: :smile390: :smile113:

Отправлено спустя 8 минут 44 секунды:
Ничего не видно. Надеюсь сейчас лучше видно.

Баг программы или руки-крюки?

Добавлено: 02 апр 2020, 19:32
RRGG
Может быть, проблема в том, что здесь нет "Code"?? В таком случае где искать?

Баг программы или руки-крюки?

Добавлено: 02 апр 2020, 19:49
aidar_i
Здесь и не должно быть его

Баг программы или руки-крюки?

Добавлено: 02 апр 2020, 19:58
edyapd
[ref]RRGG[/ref], есть несколько решений для вашей проблемы.
Можно попытаться запускать программу от Администратора.
Можно в папках назначить сохранять по "Системный путь ...."
Можете скачать Portable версию 6.3.1 и расположить её на любом диске кроме системного.
Возможно кто-то ещё чего может подсказать.

Баг программы или руки-крюки?

Добавлено: 02 апр 2020, 22:22
RRGG
Спасибо. Я постараюсь. Для меня это темный лес .. Кое что попробую методом нучного втыка :smile427: :smile469:

Отправлено спустя 2 часа 8 минут 3 секунды:
Спасибо ардуинщикам. :smile9: :smile152: Сегодня все работает, с нетерпением буду ждать следующего дня. Может быть, хорошее слово не подведет, наконец. :smile38:

Баг программы или руки-крюки?

Добавлено: 14 фев 2021, 23:06
MaksVish
RRGG писал(а): 19 мар 2020, 23:20 VL53L0X, где я могу найти уже готовый пользовательский блок FlProg? https://www.youtube.com/watch?v=r8S9w3xwyBY очень ясно показывает, как создать его самостоятельно, но только для продвинутых. А для «чайника» все правильно оформить отнимет много времени. Спосибо :smile37: :smile198:
Подскажите как при создании блока определить куда на какие контакты будут подключены датчики!? Или контакты контроллера которые буду определены входами или выходами!?