FrSky Taranis - Максимум возможностей за минимальные деньги.

AlexandrCNH

Да, как выкрутится - это я понимаю, но это все равно кастыль.

kudra

Хочу купить приёмник XSR такой : www.aliexpress.com/item/…/32605970187.html
Есть выбор вариантов : «US FCC Version» и «EU 2016 LBT Version».
Есть предупреждение : The LBT version of XSR receiver only works with FrSky D16-LBT Mode.
У меня Taranis самой первой версии, куплен в мае 2014года.
Стоит внешний модуль XJT такой : alofthobbies.com/frsky-xjt-jr-graupner-type-16ch-d… т.к. встроенный ВЧ сгорел.
Какой из вариантов приёмника мне выбрать- US или EU?
Как узнать какая из версий лежит на Бангуде? banggood.com/FrSky-XSR-2_4GHz-16CH-ACCST-Receiver-…
И ещё. Для этого приёмника заявлено «CPPM output». Правильно ли я понимаю, что его одним проводом можно подключить к контроллеру полёта в котором есть «PPM Sum» (это «Ikon» FBL вертолёта)?

korvin8
AlexandrCNH:

Да, как выкрутится - это я понимаю, но это все равно кастыль.

да почему же костыль? если такое использование Duration и Delay правильное - значит нужно его принять и пользоваться им 😃

AlexandrCNH
korvin8:

да почему же костыль? если такое использование Duration и Delay правильное - значит нужно его принять и пользоваться им

Да, потому что все время было так как было, а теперь поменяли на противоположное значение. И вместо одного числа вводить две строки и это для каждого использования задержки!!!

zaic3k

Хотел обновить прошивку приемника X6R через S.Port по инструкции.
Не уделил достаточное внимание схеме распиновки - подключил SmartPort приемника к контактам отсека для внешних ВЧ-модулей обычным S.Port-кабелем. При попытке прошивки произошла видимо переполюсовка и приемник начал пахнуть горелым лаком. Приемник не подает признаков жизни при подачи питания. Есть ли вариант вернуть приемник к жизни или забыть/забить? Плата приемника визуально без повреждений.

Plohish
AlexandrCNH:

А должно работать так: свич должен выключаться через “Duration > 0” ПОСЛЕ того, как условие перестало выполняться. А не как сейчас - выключается через “Duration > 0” после того как условие НАЧАЛО выполняться. И не важно после этого выполняется условие или нет - все равно свитч выключен. Это пипец.

Саш, ты что то путаешь… Сижу на прошивке 2.0.19

AlexandrCNH
Plohish:

Саш, ты что то путаешь… Сижу на прошивке 2.0.19

2.0.19 новая прошивка. Там легко могли это поправить вместет с 2.1.
Я на выходных подниму архив своих настроек моделей за 2014й год и проверю.

Если я путаю (что я не исключаю), то мне реально пора в нереальный отпуск. 😁

zaic3k:

Не уделил достаточное внимание схеме распиновки - подключил SmartPort приемника к контактам отсека для внешних ВЧ-модулей обычным S.Port-кабелем. При попытке прошивки произошла видимо переполюсовка и приемник начал пахнуть горелым лаком.

Сочувствую. Спасибо, что выложил, другие будут внимательны при перепрошивке.

Plohish
zaic3k:

Плата приемника визуально без повреждений.

если воняет горелым, плата не может быть без повреждений… смотри внимательнее…

AlexandrCNH:

2.0.19 новая прошивка. Там легко могли это поправить вместет с 2.1.

поставил компашку 2.0.3
результат тот же…

иди в отпуск 😃

AlexandrCNH

😃

Посыпаю голову пеплом…
До встречи на Гаваях!!! 😁

Хотя погодите…

Выдержка из русской инструкции.

параметр длительности ‘Duration’ (минимальное время, в течение которого пользовательский
переключатель будет активным, даже если его условия на короткое время станут ложными)

Еще инструкция наглоязычная.

a Duration parameter (the minimum time a custom switch will be active for even if its conditions become false instantly)

Так как она должна работать-то???
Вроде как весьма недвусмысленно описана работа функции.

AlexSneg
zaic3k:

Есть ли вариант вернуть приемник к жизни или забыть/забить? Плата приемника визуально без повреждений.

Если поврежден МК, то шансов нет. Никто фирменного загрузчика на приемник не имеет. А прошивка на приемник скремблирована. Без загрузчика ее не залить. А загрузчик производитель не даст, ибо сразу же появятся самодельные клоны приемников и передающие модули со всеми вытекающими…А зачем это производителю.

Plohish
AlexandrCNH:

параметр длительности ‘Duration’ (минимальное время, в течение которого пользовательский переключатель будет активным, даже если его условия на короткое время станут ложными)

именно так и работает, вне зависимости от активности…
в моём примере: сработало условие - свич активировался, условие дёргаю туда сюда а свич всё так же активен… по прошествии заданного времени (3 секунды) свич деактивируется…

korvin8
korvin8:

я только что настроил задержку выключения записи лога используя Delay

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


L1 a>x RSSI 0dB --- --- ---
L2 AND !L1  --- --- --- 10.0

SF1 !L2 SD Logs 0.3s

что-бы от этого избавиться - нужно добавить еще два свича 😦


L1 a>x RSSI 0dB --- --- ---
L2 AND !L1  --- --- --- 10.0
L3 AND ---  --- --- 4.0 ---
L4 AND !L2  !L3 --- --- ---

SF1 L4 SD Logs 0.3s

при включении аппы запись лога теперь не включается автоматически, но она и не сможет включится если наступит условие в L1 в течении 10 секунд 😮

в общем решил остаться на первом варианте настройки и забить 10 секундное на включение лога при включении аппы

но думаю что настал момент посмотреть как работают Lua скрипты, возможно всю эту логику можно будет задавать в виде кода, тогда это будет на много гибче и легче

Spy84

Добрый день.
Правильно понимаю,что ценника вкуснее,чем “первая покупка” на банггуд нет?

art_80

Всем привет! После продолжительных исследований программирования наконец-то готов и мой вариант переключателя. Программа написана на баскоме, т.е. с нуля. В устройстве используется графический дисплей OLED 128*64.
Немного внутренностей:

Отверстие в корпусе пульта и панелька из оргстекла делались на самопальном чпу-станке.
Трепанация Тараниса
А тут как это работает:

Менюшку с выбором типа летательного аппарата сделал просто так, может пригодится, когда начну осваивать самолёты и полётные режимы будут другими. Пока у меня только коптер, поэтому после выбора того или другого программа попадает в коптерный список режимов. Это опционально и всегда можно удалить.
Также есть вариант программы под символьный дисплей 16*2, но встроенного решения с ним уж точно не получится))

Plohish

сразу же взгляд со стороны:
гораздо удобнее было бы, если бы при переключении нужный режим подсвечивался бы инверсией, а не как сейчас, надпись по центру… её хрен прочитаешь…
а по моему было бы гораздо информативнее…

korvin8
art_80:

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

то есть весь этот труд и красота - всего лишь дискретный переключатель? т.е. на каком-то канале меняется значение с заданным шагом?

art_80
Plohish:

сразу же взгляд со стороны:
гораздо удобнее было бы, если бы при переключении нужный режим подсвечивался бы инверсией, а не как сейчас, надпись по центру… её хрен прочитаешь…
а по моему было бы гораздо информативнее…

да, возможно в этом что то есть, как то не думал над таким вариантом отображения инфы, а если ещё и шрифт увеличить, то совсем должно быть хорошо

korvin8:

то есть весь этот труд и красота - всего лишь дискретный переключатель? т.е. на каком-то канале меняется значение с заданным шагом?

именно всего лишь переключатель;), и да, на одном канале меняется шим, значения каждого из шести режимов выставлены по центрам диапазонов Mission Planner

korvin8

понемногу разбираюсь с lua скриптами, возник вопрос:
в микс скриптах dsbeach.gitbooks.io/…/mix.html выходные переменные (output) отображаются с одним знаком после запятой, а в экранах телеметрии - вообще без знака
т.е. если получить значение (например 15.73) и его же возвратить назад - результат будет 15.7 а на экране телеметрии вообще 15

а вот если писать скрипты телеметрии dsbeach.gitbooks.io/…/telemetry.html и выводить данные на свой экран телеметрии - данные выводятся в том же формате в котором был оригинал, т.е. 15.73 выводится как 15.73

кстати, немного допилил стандартную Змейку, теперь она управляется правым стиком, а стиком газа регулируется ее скорость (mode2)


--------------------------------------------------------------
-- Classic snake game
--
-- 2009 Led Lab @PUC-Rio 
-- Dado Sutter
-- Ives Negreiros
-- To Benjamin

-- modified by korvin8
-- 	chenge direction control: ail, ele
-- 	add speed control: thr
---------------------------------------------------------------
local speed = 0;
local xMax = math.floor( 212 / 6 ) - 1
local yMax = math.floor( 64 / 8 ) - 1
local game_map = {}

local Head = {}
local Tail = {}

local highscore = 0
local size = 3
Tail.x = 1
Tail.y = 1
Head.x = Tail.x + ( size - 1 )
Head.y = Tail.y

local Food = {}
Food.x = false
Food.y = false

Head.dx = 1
Head.dy = 0
Tail.dx = Head.dx
Tail.dy = Head.dy
local direction = "right"
local score = 0

local function create_food()
  Food.x, Food.y = math.random( xMax - 1), math.random( yMax - 1)
  while game_map[ Food.x ][ Food.y ] do
    Food.x, Food.y = math.random( xMax - 1 ), math.random( yMax - 1 )
  end
  game_map[ Food.x ][ Food.y ] = "food"
  lcd.drawText( Food.x * 6, Food.y * 8+2, "@", 0 )
end

local function eat_food()
  playFile("/SCRIPTS/snake.wav")
  lcd.drawText( Head.x * 6, Head.y * 8, " ", 0 )
  game_map[ Head.x ][ Head.y ] = nil
  create_food()
  score = score + 1
end

local function check_collision()
  if Head.x < 0 or Head.x > xMax then
    return true
  elseif Head.y < 0 or Head.y > yMax then
    return true
  elseif ( ( game_map[ Head.x ][ Head.y ] ) and ( game_map[ Head.x ][ Head.y ] ~= "food" ) ) then
    return true
  end
  return false
end

local function move()
  if game_map[ Tail.x ][ Tail.y ] == "right" then
    Tail.dx = 1
    Tail.dy = 0
  elseif game_map[ Tail.x ][ Tail.y ] == "left" then
    Tail.dx = -1
    Tail.dy = 0
  elseif game_map[ Tail.x ][ Tail.y ] == "up" then
    Tail.dx = 0
    Tail.dy = -1
  elseif game_map[ Tail.x ][ Tail.y ] == "down" then
    Tail.dx = 0
    Tail.dy = 1
  end

  game_map[ Head.x ][ Head.y ] = direction
  Head.x = Head.x + Head.dx
  Head.y = Head.y + Head.dy

  if Head.x < 0 or Head.x > xMax or Head.y < 0 or Head.y > yMax then
    return
  elseif game_map[ Head.x ][ Head.y ] == "food" then
    eat_food()
  else
    lcd.drawText(Tail.x * 6, Tail.y * 8, " ", 16)
    game_map[ Tail.x ][ Tail.y ] = nil
    Tail.x = Tail.x + Tail.dx
    Tail.y = Tail.y + Tail.dy
  end

  lcd.drawText(Head.x * 6, Head.y * 8, "*", 0)
end

local function init()
  food = false
  lcd.lock()
  lcd.clear()
  size = 3
  score = 0
  Tail.x = 1
  Tail.y = 1
  Head.x = Tail.x + ( size - 1 )
  Head.y = Tail.y
  Head.dx = 1
  Head.dy = 0
  Tail.dx = Head.dx
  Tail.dy = Head.dy
  direction = "right"

  for i = 0, xMax, 1 do
    game_map[ i ] = {}
  end

  for i = 0, size - 1, 1 do
    game_map[ Tail.x + ( i * Tail.dx ) ][ Tail.y + ( i * Tail.dy ) ] = direction
    lcd.drawText( ( Tail.x + ( i * Tail.dx ) ) * 6, ( Tail.y + ( i * Tail.dy ) ) * 8, "*", 0 )
  end

  create_food()
end

local snakeCounter = 0

local function run(event)
  if event == nil then
    raise("Cannot be run as a model script!")
  end

  if event == EVT_EXIT_BREAK then
    return 2
  end

  lcd.lock()

  snakeCounter = snakeCounter + 1
  if snakeCounter < speed then
	  local dir = direction
	  if getValue('ail') > 20 and direction ~= "left" then
		dir = "right"
		Head.dx = 1
		Head.dy = 0
	  end
	  if getValue('ail') < -20 and direction ~= "right" then
		dir = "left"
		Head.dx = -1
		Head.dy = 0
	  end
	  if getValue('ele') > 20 and direction ~= "down" then
		dir = "up"
		Head.dx = 0
		Head.dy = -1
	  end
	  if getValue('ele') < -20 and direction ~= "up" then
		dir = "down"
		Head.dx = 0
		Head.dy = 1
	  end
	  direction = dir

    return 0
  end

  snakeCounter = 0

  speed = 30 - (getValue('thr') + 1024)/79

  move()

  if check_collision() then
    return 1
  end

  return 0
end

return { init=init, run=run }
korvin8

еще вопрос
при использовании playNumber() в спецификации сказано:
dsbeach.gitbooks.io/…/playNumber.html

0 or not present plays integral part of the number (for a number 123 it plays 123)
PREC1 plays a number with one decimal place (for a number 123 it plays 12.3)
PREC2 plays a number with two decimal places (for a number 123 it plays 1.23)

сделал пример для теста:


...
local batteryVoltage = 14.95
...
local batt100 = batteryVoltage * 100
playNumber(batt100, 1)
playNumber(batt100, 1, PREC1)
playNumber(batt100, 1, PREC2)

ожидаю:
тысяча четыреста девяносто пять
сто сорок девять точка пять
четырнадцать точка девяносто пять

получаю:
тысяча четыреста девяносто пять
сто сорок девять точка пять
четырнадцать точка девять

в чем может быть подвох? PREC2 должен последние 2 разряда целой части числа произнести как сотые части, а он хоть и берет два разряда но округляет их до десятой

pinco

У меня точка взлета практически всегда одна и та же с заданными координатами. На дроне стоит GPS-сенсор FrSky. Можно ли в аппе считать расстояние от точки взлета до дрона? Может кто-то уже решал такую задачу?

korvin8

с документацией по LUA как то все странно
единственный полный и актуальный документ, который я смог найти это dsbeach.gitbooks.io/…/content/

но и он не соответствует действительности

например, функция lcd.drawText(x, y, text [, flags]), в описании параметров сказано: x,y (positive numbers) starting coordinate dsbeach.gitbooks.io/…/drawText.html т.е. это координаты на экране с которых начинается вывод текста

а вот функция которая выводи числа lcd.drawNumber(x, y, value [, flags]) у которой тоже в описании сказано: x,y (positive numbers) starting coordinate dsbeach.gitbooks.io/…/drawNumber.html, но это уже не координаты начала текста, а координаты конца текста (что, согласитесь, странно)

т.е. фактически все приходится проверять методом тыка 😦 (еще пример не соответствия несколькими постами выше с функцией проговаривания текста)
и что самое главное - не понятно, это баги прошивки и не верная работа движка скриптов или не точная документация