Arduino и панель Baron-58 — «Железные» кокпиты

Привет всем,

> ra4pvj — да, плагин должен быть в списке и показывать статус соединения в окне «About». Zip файл просто распаковывается в целиком в папку плагинов. (для ХПл 10)
———————————
> Пельмнь, Насчет инструкций — все делается потихоньку, время летит…, примеры применения есть в пакете с библиотекой, примеры конкретных машин тоже будут, тут просто списки управления нужны.. Если имеется ввиду ARDref  библиотека/плагин — то все варианты ввода видны на странице формирования входного файла.

———————————

Т.е. есть две реализации проекта.
 
1. Вариант ARDRef library/plugin. Библиотека в паре с плагином. Не требуется практически ничего делать в ардуино, только сконфигурировать файлы со списком и типом входов/выходов для плагина. http://ardref.svglobe.com

2. Вариант —  XPData library. (версия 3.2)  http://arduino.svglobe.com/
Библиотека для «прямого» ввода-вывода, т.е. используется встроенный в Xplane UDP протокол. Но  с версии XPData 3.2
включена возможность выбора для приема данных — или через «XPlane Data Output»  или используя ARDref плагин.
Для управления вводом нужно только задать функцию для каждого конкретного входа с нужной командой или датарефом в качестве аргумента.

Здесь список функций библиотеки:
Типы входов:
1. Кнопка (для команды или датарефа, «одномоментная» или с повтором (Repeat())
2. Тумблер (две команды или датареф с двумя значениями)
3. Энкодер (две команды или датареф со значением инкремента)
4. Многопозиционный переключатель для аналогово входа.
5. Кнопка Mode() — просто проверка состояния входа ( для выбора режимов энкодеров и т.п.)
6. Аналоговый датчик (задается диаппазон изменения датарефа и точность (от 2 до 1000)

Взможность расширения количества входов (для самодельной 128-входовой платы расширения, см. сайт) — используются все те-же функции, только номера входов начинаются с 100 до 227.

Функции для  платы расширения выходов ( 24-LED):
1. Подключение платы (в setup) — инициализация
2. «Прямое» управление выходом (светодиодом) — функция LED24 (номер, On/Off );
3. «Авто-управление» — привязка к любому из 24 выходов (светодиодов) конкретного датарефа простой функцией

Функции получения данных из XPlane (на выбор):
1. GetData(группа, индекс) — для X-Plane Data Output
2. ReadData(номер)  — для ARDref плагина.
 

——————————

Ардуино производительности хватает с избытком, весь цикл опроса всех входов для программы Барона занимает порядка одной мс.( пересылка данных активируется только по наличию изменений), включая аналоговые входы. (Это сейчас, в последних версиях все летает, а  в первых экспериментах цикл был и по 20 мс, что уже неприемлемо для энкодеров.)

 

Успехов
 

Привет всем,

> ra4pvj — да, плагин должен быть в списке и показывать статус соединения в окне «About». Zip файл просто распаковывается в целиком в папку плагинов. (для ХПл 10)
———————————
> Пельмнь, Насчет инструкций — все делается потихоньку, время летит…, примеры применения есть в пакете с библиотекой, примеры конкретных машин тоже будут, тут просто списки управления нужны.. Если имеется ввиду ARDref  библиотека/плагин — то все варианты ввода видны на странице формирования входного файла.

———————————

Т.е. есть две реализации проекта.
 
1. Вариант ARDRef library/plugin. Библиотека в паре с плагином. Не требуется практически ничего делать в ардуино, только сконфигурировать файлы со списком и типом входов/выходов для плагина. http://ardref.svglobe.com

2. Вариант —  XPData library. (версия 3.2)  http://arduino.svglobe.com/
Библиотека для «прямого» ввода-вывода, т.е. используется встроенный в Xplane UDP протокол. Но  с версии XPData 3.2
включена возможность выбора для приема данных — или через «XPlane Data Output»  или используя ARDref плагин.
Для управления вводом нужно только задать функцию для каждого конкретного входа с нужной командой или датарефом в качестве аргумента.

Здесь список функций библиотеки:
Типы входов:
1. Кнопка (для команды или датарефа, «одномоментная» или с повтором (Repeat())
2. Тумблер (две команды или датареф с двумя значениями)
3. Энкодер (две команды или датареф со значением инкремента)
4. Многопозиционный переключатель для аналогово входа.
5. Кнопка Mode() — просто проверка состояния входа ( для выбора режимов энкодеров и т.п.)
6. Аналоговый датчик (задается диаппазон изменения датарефа и точность (от 2 до 1000)

Взможность расширения количества входов (для самодельной 128-входовой платы расширения, см. сайт) — используются все те-же функции, только номера входов начинаются с 100 до 227.

Функции для  платы расширения выходов ( 24-LED):
1. Подключение платы (в setup) — инициализация
2. «Прямое» управление выходом (светодиодом) — функция LED24 (номер, On/Off );
3. «Авто-управление» — привязка к любому из 24 выходов (светодиодов) конкретного датарефа простой функцией

Функции получения данных из XPlane (на выбор):
1. GetData(группа, индекс) — для X-Plane Data Output
2. ReadData(номер)  — для ARDref плагина.
 

——————————

Ардуино производительности хватает с избытком, весь цикл опроса всех входов для программы Барона занимает порядка одной мс.( пересылка данных активируется только по наличию изменений), включая аналоговые входы. (Это сейчас, в последних версиях все летает, а  в первых экспериментах цикл был и по 20 мс, что уже неприемлемо для энкодеров.)

 

Успехов
 

Сообщение отредактировано VladSim: 27 February 2015 — 16:46

можно небольшой ликбез по синтаксису ARDref?

 

допустим мне надо получить значение частоты COM1

 

в конфигураторе у меня так: 

1

Com1 Frequency

Int
 

 

я так понимаю что мне надо применить 

OUT.Dget [P]

 

вместо P соответственно 1

 

OUT.Dget [1];

как будет выглядеть текст программы  дальше?

не могу понять как присвоить полученное значение переменной например int COM1

не могу понять как присвоить полученное значение переменной например int COM1

Если речь о библиотеке ARDref с плагином:

 

1. задаем переменную ( в разделе переменных)

int Com1_freq;

2. где надо в программе считываем (номер в квадр. скобках — номер переменной из списка  в файле «out_1,cfg»):

Com1_freq = OUT.Dget[1];

Дальше используем как надо…  (пока в этой библиотеке нет функций для 7-сегм, жк… ) 

(кстати, чтобы не исполнять «выводную» часть кода постоянно, перед считыванием  можно проверять булевую переменную  if (OUT.isNew[1]) …

которая показвает изменился ли данный параметр, и выполнять по условию «=1» дальнейшие операции. )

 

——————-

Если используем библиотеку XPData:

1. «напрямую»   из Xplane — ReadData ( Group, Index );   — номер группы . номер позиции переменной в Xplane DataOutput

2.  из плагина —    ReadData ( 0, Index );      — первый аргумент не имеет значения, второй — номер переменной из списка  в файле «out_1,cfg»)   

 

(для булевых параметров можно напрямую назначать  вывод датарефа на номер вывода (светодиод))… 

можно небольшой ликбез по синтаксису ARDref?

 

допустим мне надо получить значение частоты COM1

 

в конфигураторе у меня так: 

1

Com1 Frequency

Int
 

 

я так понимаю что мне надо применить 

OUT.Dget [P]

 

вместо P соответственно 1

 

OUT.Dget [1];

как будет выглядеть текст программы  дальше?

не могу понять как присвоить полученное значение переменной например int COM1

… в догонку к предыдущему.

 

OUT.Dget[n] — это не функция, а массив переменных,  и сейчас в библиотеке для считывания нужного параметра есть функция  GetData (n):

Com1_freq = GetData (1);

то что надо, спасибо. 

Добрый вечер.

Не могу разобраться с плагином ARDref.

Моя система — Mac OS 10.6.8, X-Plane 10.35, ARDref plugin 1.26.

Arduino 1.5.6-r2 и плата UNO подсоеденена через свитч.

 

Если в config.ini стоит «IP_ADDRESS = auto»,  то адрес плагин определяет как «255.127.0.0».

 

Как описано здесь http://forums.x-plan…e=6#entry874766

 

Плагин сканирует диапазон адресов 255.127.0.0-255, я вижу это в сетевой активности, но arduino не находит.

Если указать свой ip в файле (IP_ADDRESS = 10.10.10.10), то в X-Plane плагин показывает правильный ip, но не связывается с arduino и не проявляет никакой сетевой активности.

Я менял адрес на более стандартный (192.168.1.10), но безрезультатно.

В arduino заливал тестовый скетч «Read_RPM_Plugin».

 

 

Плата рабочая, без плагина данные считывает. Проверял тестовым скетчем «Read_RPM_XPlane».

Если в config.ini стоит «IP_ADDRESS = auto»,  то адрес плагин определяет как «255.127.0.0».

Как-то подозрительно этот адрес выглядит

    1) Arduino 1.5.6-r2 и плата UNO подсоеденена через свитч.
    2) Если в config.ini стоит «IP_ADDRESS = auto»,  то адрес плагин определяет как «255.127.0.0».
    Плагин сканирует диапазон адресов 255.127.0.0-255, я вижу это в сетевой активности, но arduino не находит.
    3) Если указать свой ip в файле (IP_ADDRESS = 10.10.10.10), то в X-Plane плагин показывает правильный ip, но не связывается с arduino и не проявляет никакой сетевой активности.

 

Добрый день,

1) если подключение не через роутер а через свитч (без DHCP) — надо указывать адрес принудительно в коде Ардуино
2) плагин сканирует  диапазон адресов  той сети  (первые три числа) на котором сидит комп с X-Plan-ом
3) указывать свой адрес для Ардуино надо  в этой-же сети  (только последнее число поменять на свободный адрес)
— т.е. если адрес компа с х-плейном например 192.168.1.1  — выбираем свободный для Ардуино 192.168.1.10  и т.п.

 

… поправка:  — выше — это про адрес для Ардуино, но и для config.ini, если он определяет неправильно, тоже тогда следует указать просто адрес компа с х-плейном. (а не какой-то случайный)

2) плагин сканирует  диапазон адресов  той сети  (первые три числа) на котором сидит комп с X-Plan-ом

Маленький нюанс, сеть — это не три первых числа, а то, что масочкой отрезано

Добрый день.

Видимо мой ip ввел в заблуждение.

Локальный IP компа с X-Plane 10.10.10.10 подсеть 10.10.10.0/24.

Плагин автоматом не опеределяет его правильно.

Потому прописываю в config.ini:

IP_ADDRESS = 10.10.10.10

На Ардуино — «byte IP[] = {10, 10, 10, 11};»

 

Купил еще один интернет шилд для проверки.

Поставил новый плагин (1,27) и библиотеку (3,4).

 

Плагин находит ардуино если сначала запустить ардуино, а потом X-Plane. И с первым и со вторым шилдом.

Если нажать «Reconnect», плагин теряет ардуино и не находит больше до перезапуска X-Plane.

Если перезапустить ардуино, то соединение восстанавливается.

 

В итоге у меня почему-то не работает «Reconnect» у плагина. Возможно это связано с моим компом (Вначале у меня в X-Plane вообще не работали плагины. Оказалось, что X-Plane не понравилось то, что у меня названия папок написаны хироганой).

 

А так даные считываются.

Теперь буду делать FCU для A320.

 

Спасибо за замечательный проект с огромными возможностями.

 

P.S. Будет ли матрица кнопок? Увидел, будет в ArdSim library.

 

Update.

Считываю обороты:

out_1.cfg:

…

8 -1 sim/cockpit2/engine/indicators/prop_speed_rpm 1
 

Arduino:

…

RPM = ReadData(0, 8);
Serial.println(RPM);
delay(300);

…

 

Резко меняю обороты до максимума и обратно.

В ардуино вывод оборотов сильно отстает.

Без delay задержка меньше, но все равно есть.

 

На сколько я понял плагин шлет пакеты при изменениях:

 

Plugin reads all changes in the X-Plane datarefs assigned in the outputs config file and sends their values to Arduino

Но в случае с оборотами изменения происходят очень часто, а Ардуино обрабатывает все подряд и не успевает.

 

Как с этим бороться?

8 -1 sim/cockpit2/engine/indicators/prop_speed_rpm 1

 

Arduino:

…

RPM = ReadData(0, 8);
Serial.println(RPM);
delay(300);

…

 

Резко меняю обороты до максимума и обратно.

В ардуино вывод оборотов сильно отстает.

Без delay задержка меньше, но все равно есть.

 

Добрый день,

Бороться  просто :)  —  я это указывал  (см. страницу с энкодерами) — про тайминг при использовании Serial.print(0)  — эта функция вам обычно нужна только для проверки, видеть данные на терминале.  Но  надо принимать во внимание, что Serial сообщения могут занять гораздо больше времени, чем весь код.   То есть если выводите на терминал даже небольшие сообщения  — они ​​занимают от нескольких мс до сотни мсек,   что приводит и к пропуску  шагов энкодеров  и при выводе на терминал получаете такой эффект запаздывания.  Поэтому, не оставляйте в окончательной программе строки с Serial.print ()!

 

У вас вывод сериал делается в каждом цикле, а цикл всего десятые доли мс. И delay() не помогает тут а усугубляет.

Чтобы посмотреть вывод на терминал при отладке я обычно делаю сам вывод более редким :

 

if  (millis() — t > 100 )    { Serial.println(RPM);  t=millis();   }

 

Вставьте эту строку вместо Serial.println(RPM);  ( задайте в начале перменную » unsigned long  t; » ) — сразу увидите разницу, будет комфортный вывд на терминал с частотой 10 раз в секунду а не 1000)

 

А так, весь программный цикл занимает даже при максимальном количестве входов от 1 до 3 мс. (редкие одиночные циклы в которых произходят изменения и отправка воманд — до 10-20 мс. )

Т.е. частота обработки (реакции) — огромная для сима, (я ее для аналоговых входов даже снижаю примерно до 40 в секуду.)

Да, и плагин и программа посылают данные только при изменении, поэтому весь цикл опроса/ожидания 1-3 мс (или сотни раз в сек).

 

 

Пример вывода оборотов  на микроамперметр

 

Да, и забыл упомянуть (в личке вроде добавил), что  убрана проблема автоопределения айпишника в Маке, можно не вписывать свой IP  в «config.ini» а, оставлять «auto» ).

Замените два маковских файла в папках 32/64 из последнего вчерашнего релиза (версия та-же 1.27)

 

Успеха

Добрый вечер.

 

Вообще delay() — зло. Выводил данные на lcd 20×4, а цифры мерцали сильно, и я пошел по ленивому пути.

 

Сделал вывод на экран правильно, как Вы написали:

if  (millis() - t > 100 )
    {
      to_display(); //вынес обновления экрана в отдельную функцию
      t=millis();
    }

И все прекрасно работает. Спасибо.

 

Я сначала не правильно понимал работу «плагин-ардуино», думал, что идет запрос от ардуино, потом ответ от плагина.

Тогда длина цикла не важна, но можно пропустить некоторые данные.

И только сейчас понял всю силу Вашего проекта: с одной стороны плагин посылает все изменения контролируемых параметров, с другой стороны ардуино посылает также только изменения состояния входов. Данные посылаются только когда надо и ни чего не потеряется.

Есть доспуп ко всем параметрам X-Plane с одной стороны, и простая и доступная платформа ардуино для реализации «железа» с другой стороны.

А кто-нибудь победил вывод данных на семисегментные индикаторы? Очень хочется на этом проекте сделать радиостек для боинга или аирбаса.

А кто-нибудь победил вывод данных на семисегментные индикаторы? Очень хочется на этом проекте сделать радиостек для боинга или аирбаса.

 

Встроенная поддержка 7-сегментников будет добавлена в библиотеку ArdSim, в скором времени…

 

А пока можете использовать любую из доступных ардуино библиотек для семисегм. и выводить данные полученные

через функцию ArdSim   «GeatData()»:

 if (NewData(dref1)) {  Com1 = GetData(dref1); 
         // здесь код для вывода на 7-сегм значения dref1
  }

(dref1 — номер датарефа в конфиг-файле,  функция NewData проверяет, изменились данные с последнего цикла)

 

Подробнее:   http://arduino.svglo…ardsim_dat.html

это очень радостная новость.

Мне пока сложно самому разобраться, но я буду пытаться. А нет ли у кого чего-нибудь сделаного на семисегментниках? Так чтоб фотки были и краткое описание как и что делать? Ну вдруг? :-))

это очень радостная новость.

Мне пока сложно самому разобраться, но я буду пытаться. А нет ли у кого чего-нибудь сделаного на семисегментниках? Так чтоб фотки были и краткое описание как и что делать? Ну вдруг? :-))

Спрашивать надо известно у кого ;) Фоток, кодов и примеров там — как гуталину

Похоже это то что надо мне… но…. авторский сайт полностью англоязычный((

 

есть хоть какая то инструкция на русском? С ардуино немного знаком.

 

Может для таких нубов как я, на пальцах обьяснить, на примере хотя бы одного тумблера с лампочкой, по пунктам (1,2,3….), от начала до конца….. Благодарность моего предела не знала бы границ….

Может для таких нубов как я, на пальцах обьяснить, на примере хотя бы одного тумблера с лампочкой, по пунктам (1,2,3….), от начала до конца…..

 

Привет,  получил ваше сообщение на почту, ответил там.

 

( Некоторые примеры выше в этой теме неактульны, проект интерфейса претерпел ряд изменений, история — ARDref — > XPData — >ArdSim (активный) —> и ArdSimX )

 

Влад.

Влад, спасибо за ответы! Ждем выхода ArdSimX!))))))))))))))

Сделал MCP панель на базе ArdSim, в полете идет постоянное переподключение и из-за этого сбиваются настройки панели (самопроизвольно включаются и отключаются кнопки). В чем может быть проблема? Вопрос к автору.

Уже сам разобрался. Плата работает. Разбираюсь с кастомными датарефами (ТУ-154). Не могу разобраться с выводом индикации(светодиод,подсветка кнопки в нажатом положении). Дефолтные команды сима работают нормально, подсветка работает. не могу понять в чем моя ошибка….

 

Может датареф индикации не тот забиваете? Или его параметры. Сегодня буквально тестировал с иксегом индикаторы положения шасси, так вот их яркость меняется от освещения в кабине и если прописать условие на включение леда меньшее, чем текущее в датарефе, лед не зажжется. Ставьте плаг datarefeditor и смотрите чего там в индикации. 

Добрый день.

Отличная идея.

Пробую работать с ArdSimX. Кое что получается. Это радует.

Вопрос такой: Организую световые сигналы о включении обогрева ПВД.

Имеем два ПВД.

Имеем два тумблера и два сигнала «ПВД ВКЛ». — Здесь все хорошо, все работает.

Имеем один сигнал «Включи обогрев ПВД», который должен гаснуть при вкл. обоих тумблеров.

Работа описывается через LUA  с использованием Customs Data Ref.

Погасание индикатора в симуляторе описано без DataRef, то есть: если ПВД1 = вкл. и ПВД2 = вкл., то индикатор «не видим».

Вопрос: Возможно ли это условие организовать в data.cfg файле? если нет, то в каком файле это прописывать? 

 

@ ================= INFO =================
 
Board #1 — Arduino (USB) ——————————————————-
 
—- Digital pins: —-
51 — Pitot 1 — 2 — ON (Dark)
52 — Pitot 1 ON — TEST (Light)
53 — Pitot 2 ON — TEST (Light)
 
@ ================= CONFIG =================
 
*1-0U
[A]
[O]
52L  1 sim/cockpit2/ice/ice_pitot_heat_on_pilot 1  
52L  1 sim/custom/xap/Pitot_1_tst 1
53L  1 sim/cockpit2/ice/ice_pitot_heat_on_copilot 1
53L  1 sim/custom/xap/Pitot_2_tst 1

51 — сюда надо назначить индикатор » Включи обогрев ПВД», который должен гаснуть, когда на 52 и 53 есть еденица.

Может датареф индикации не тот забиваете? Или его параметры.

Да, именно так)) Спасибо за наводку. А ещё у меня Ардуинка полоскала мозги, после её испытаний по проекту Mmjoy2, после чего она глючила со страшной силой, подвешивала плейн и в итоге отбросила коньки))

Взял пока для испытаний UNO, полёт нормальный. Жду из Китая mega2560.
Строительство руд продолжается. И огромное спасибо Владу за его вклад в данную тему!!!