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

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, но это уже не координаты начала текста, а координаты конца текста (что, согласитесь, странно)

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

Макс1980

Всем привет пришел мне таранис . хочу на него русский голос поставить подскажете как ?

Макс1980

Пытаюсь совместить контроллер naze 32 SP racer F3 и x4rsb. Ситуация такова все подключил, но приемник еще не биндил с передатчиком. В клинфлае все пашет на передатчике красный диод мигает. Пытаюсь за биндить x4r sb с передатчиком пропадает питание на коптере все гаснет, тухнут диоды на контроллере , и тухнет диод на приемнике . Отключаю акум , выключаю пульт . Включаю акум , все диоды светятся , включаю пульт все гаснет. Куда копать что смотреть.

Miklrav
Макс1980:

Пытаюсь совместить контроллер naze 32 SP racer F3 и x4rsb. Ситуация такова все подключил, но приемник еще не биндил с передатчиком. В клинфлае все пашет на передатчике красный диод мигает. Пытаюсь за биндить x4r sb с передатчиком пропадает питание на коптере все гаснет, тухнут диоды на контроллере , и тухнет диод на приемнике . Отключаю акум , выключаю пульт . Включаю акум , все диоды светятся , включаю пульт все гаснет. Куда копать что смотреть.

Упростите свою схему. Подайте с регулятора с беком, если есть, либо с контроллера питание и только. Привяжите приемник к аппе. Проверьте что все работает используя серву в один из первых четырех каналов, ну или если с отдельным регом, то его в, как правило, 3 канал и к нему двигатель. Ну а потом по своей схеме, там уж в cleanflight все еще раз проверите.

Макс1980

Упростил от бека тоже как пульт включаю диод на приемнике гаснет и все

Miklrav
Макс1980:

Упростил от бека тоже как пульт включаю диод на приемнике гаснет и все

Мн-да, ну если все по инструкции делаете, то получается проблема в приёмнике (. Хотя такого в любом случае быть не должно. Насколько понимаю, в первом случае, у вас контроллер питание берет с приёмника и при включении передатчика на приёмнике что-то происходит и питание отрубается?

Макс1980

Контролер берет питание с бека и питает передатчик.

PaulM

В приемник что-то включено, помимо питания (разъемы, джамперы)? Вы его как-то модифицировали? Например, “раздевали”, выпаивали пины и т.д.
Почему спрашиваю, описанное выглядит как-то фантастически, я это пока разумно объяснить не могу.

Макс1980

Итак попытаюсь описать свою ситуацию подробней и надеюсь понятней. (извиняюсь за косноязычность “Чукча не читатель, чукча писатель”)

Есть у меня пульт Таранис и два приемника к нему

1-й это X8R работает сейчас в паре с флип 32 по s.bus , благодаря умным людям обошелся без инвектора (Спасибо тебе Григорий).

2-й это X4R SB должен работать с Naze32 SP racer F3, но не знаю то ли от моих кривых рук или еще чего не работает. Этот приемник до сих пор в заводской упаковке.
В пульте все настройки как у X8R, только выбран приемник 2 а не 1 и на другой моделе.

Как проявляется не работоспособность :

Подключаю приемник к питанию + и - без сигнального провода , начинает мигать красный светодиод. Включаю пульт , пульт говорит что найдена телеметрия , загорается на приемнике зеленый диод , через секунду диод гаснет, пульт говорит телеметрия потеряна и и на этом все.

Какие танцы с бубном применить или что я делаю не так? Уж очень не хочется новый покупать приемник.

kostya1973
Макс1980:

1-й это X8R работает сейчас в паре с флип 32 по s.bus , благодаря умным людям обошелся без инвектора (Спасибо тебе Григорий).

попрошу рассказать или указать как сделать

Макс1980


сигнальный провод вот так,питание как обычно

AlexSneg
Макс1980:

Какие танцы с бубном применить или что я делаю не так? Уж очень не хочется новый покупать приемник.

попробую сделать предположение

  1. Если вырубается питание приемника сразу после обнаружения передатчика значит где-то замыкание в момент появления сигналов на серво выходах или каких либо других сигналов на STM32, которая там на плате. Как это может быть - хз. Как вариант пока режим FS приемник держит выхода в Z состоянии, как только приходит первый пакет, приемник конфигурит выхода как “выхода” и что-то тут же коротит шину 3,3В, приемник ребутается

  2. Стаб на приемнике не держит ток

  3. Если запитка от регуля, то возможно регуль отрубает 5В после появления PWM сигнала с приемника

pinco

LUA не владею((( Прошу помощи.
На основании имеющихся сторонних скриптов организовал пару экранов телеметрии.
Загвоздка стала за выводом GPS-координат (знаю что они есть на стоковых экранах, но хочу сделать более удобно на своем экране).
Может кто уже решил эту задачу?