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

После компиляции МК видит только один датчик из двух

Вопросы по взаимодействию FLProg и Arduino IDE
Ответить
Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

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

#1

Сообщение Arkan » 18.03.2020{, 22:49}

При компиляции скетча не работает проект. Имеются два пользовательских блока лазерного датчика 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 для обоих.
Вложения
Тест для форума.jpg
Test for forum.flp
(238.16 КБ) 81 скачивание

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

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

#2

Сообщение Ingwar » 19.03.2020{, 08:19}

Arkan писал(а):
18.03.2020{, 22:49}
После обесточивания возвращается 29 для обоих.
Здесь вроде написано, что при обесточивании нужно заново прописывать адрес...
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

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

#3

Сообщение Arkan » 19.03.2020{, 16:40}

Ingwar писал(а):
19.03.2020{, 08:19}
Arkan писал(а):
18.03.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()
{

}

RRGG
Рядовой
Сообщения: 5
Зарегистрирован: 18.03.2020{, 21:15}
Репутация: 1
Откуда: LT
Имя: Rolandas

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

#4

Сообщение RRGG » 19.03.2020{, 23:20}

VL53L0X, где я могу найти уже готовый пользовательский блок FlProg? очень ясно показывает, как создать его самостоятельно, но только для продвинутых. А для «чайника» все правильно оформить отнимет много времени. Спосибо :smile37: :smile198:

RRGG
Рядовой
Сообщения: 5
Зарегистрирован: 18.03.2020{, 21:15}
Репутация: 1
Откуда: LT
Имя: Rolandas

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

#5

Сообщение RRGG » 02.04.2020{, 12:31}

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

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

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

#6

Сообщение edyapd » 02.04.2020{, 13:59}

RRGG, посмотрите в настройках, где у вас сохраняются пользовательские блоки. И проверьте, что у пользователя, из под которого запускается программа, есть права на запись в эту папку.
СпойлерПоказать
111.jpg

RRGG
Рядовой
Сообщения: 5
Зарегистрирован: 18.03.2020{, 21:15}
Репутация: 1
Откуда: LT
Имя: Rolandas

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

#7

Сообщение RRGG » 02.04.2020{, 18:05}

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

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

Отправлено спустя 8 минут 44 секунды:
Ничего не видно. Надеюсь сейчас лучше видно.
Вложения
33.png
3FOTO
22.png
2 FOTO
33.png
2 FOTO
22.png
3FOTO
11.png

RRGG
Рядовой
Сообщения: 5
Зарегистрирован: 18.03.2020{, 21:15}
Репутация: 1
Откуда: LT
Имя: Rolandas

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

#8

Сообщение RRGG » 02.04.2020{, 19:32}

Может быть, проблема в том, что здесь нет "Code"?? В таком случае где искать?
Вложения
44.png
4 FOTO

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#9

Сообщение aidar_i » 02.04.2020{, 19:49}

Здесь и не должно быть его

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

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

#10

Сообщение edyapd » 02.04.2020{, 19:58}

RRGG, есть несколько решений для вашей проблемы.
Можно попытаться запускать программу от Администратора.
Можно в папках назначить сохранять по "Системный путь ...."
Можете скачать Portable версию 6.3.1 и расположить её на любом диске кроме системного.
Возможно кто-то ещё чего может подсказать.

RRGG
Рядовой
Сообщения: 5
Зарегистрирован: 18.03.2020{, 21:15}
Репутация: 1
Откуда: LT
Имя: Rolandas

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

#11

Сообщение RRGG » 02.04.2020{, 20:14}

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

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

MaksVish
Рядовой
Сообщения: 91
Зарегистрирован: 14.07.2018{, 19:09}
Репутация: 1
Имя: Максим

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

#12

Сообщение MaksVish » 14.02.2021{, 23:06}

RRGG писал(а):
19.03.2020{, 23:20}
VL53L0X, где я могу найти уже готовый пользовательский блок FlProg? очень ясно показывает, как создать его самостоятельно, но только для продвинутых. А для «чайника» все правильно оформить отнимет много времени. Спосибо :smile37: :smile198:
Подскажите как при создании блока определить куда на какие контакты будут подключены датчики!? Или контакты контроллера которые буду определены входами или выходами!?

Ответить

Вернуться в «FLProg и Arduino IDE»