FrSky Taranis - Максимум возможностей за минимальные деньги.
Всем привет! После продолжительных исследований программирования наконец-то готов и мой вариант переключателя. Программа написана на баскоме, т.е. с нуля. В устройстве используется графический дисплей OLED 128*64.
Немного внутренностей:
Отверстие в корпусе пульта и панелька из оргстекла делались на самопальном чпу-станке.
Трепанация Тараниса
А тут как это работает:
Менюшку с выбором типа летательного аппарата сделал просто так, может пригодится, когда начну осваивать самолёты и полётные режимы будут другими. Пока у меня только коптер, поэтому после выбора того или другого программа попадает в коптерный список режимов. Это опционально и всегда можно удалить.
Также есть вариант программы под символьный дисплей 16*2, но встроенного решения с ним уж точно не получится))
сразу же взгляд со стороны:
гораздо удобнее было бы, если бы при переключении нужный режим подсвечивался бы инверсией, а не как сейчас, надпись по центру… её хрен прочитаешь…
а по моему было бы гораздо информативнее…
После продолжительных исследований программирования наконец-то готов и мой вариант переключателя.
то есть весь этот труд и красота - всего лишь дискретный переключатель? т.е. на каком-то канале меняется значение с заданным шагом?
сразу же взгляд со стороны:
гораздо удобнее было бы, если бы при переключении нужный режим подсвечивался бы инверсией, а не как сейчас, надпись по центру… её хрен прочитаешь…
а по моему было бы гораздо информативнее…
да, возможно в этом что то есть, как то не думал над таким вариантом отображения инфы, а если ещё и шрифт увеличить, то совсем должно быть хорошо
то есть весь этот труд и красота - всего лишь дискретный переключатель? т.е. на каком-то канале меняется значение с заданным шагом?
именно всего лишь переключатель;), и да, на одном канале меняется шим, значения каждого из шести режимов выставлены по центрам диапазонов Mission Planner
понемногу разбираюсь с 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 }
еще вопрос
при использовании 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 разряда целой части числа произнести как сотые части, а он хоть и берет два разряда но округляет их до десятой
У меня точка взлета практически всегда одна и та же с заданными координатами. На дроне стоит GPS-сенсор FrSky. Можно ли в аппе считать расстояние от точки взлета до дрона? Может кто-то уже решал такую задачу?
с документацией по 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, но это уже не координаты начала текста, а координаты конца текста (что, согласитесь, странно)
т.е. фактически все приходится проверять методом тыка 😦 (еще пример не соответствия несколькими постами выше с функцией проговаривания текста)
и что самое главное - не понятно, это баги прошивки и не верная работа движка скриптов или не точная документация
Всем привет пришел мне таранис . хочу на него русский голос поставить подскажете как ?
Звуковые сообщения на различных языках
rcsearch.ru/wiki/FrSky_TARANIS
Пытаюсь совместить контроллер naze 32 SP racer F3 и x4rsb. Ситуация такова все подключил, но приемник еще не биндил с передатчиком. В клинфлае все пашет на передатчике красный диод мигает. Пытаюсь за биндить x4r sb с передатчиком пропадает питание на коптере все гаснет, тухнут диоды на контроллере , и тухнет диод на приемнике . Отключаю акум , выключаю пульт . Включаю акум , все диоды светятся , включаю пульт все гаснет. Куда копать что смотреть.
Пытаюсь совместить контроллер naze 32 SP racer F3 и x4rsb. Ситуация такова все подключил, но приемник еще не биндил с передатчиком. В клинфлае все пашет на передатчике красный диод мигает. Пытаюсь за биндить x4r sb с передатчиком пропадает питание на коптере все гаснет, тухнут диоды на контроллере , и тухнет диод на приемнике . Отключаю акум , выключаю пульт . Включаю акум , все диоды светятся , включаю пульт все гаснет. Куда копать что смотреть.
Упростите свою схему. Подайте с регулятора с беком, если есть, либо с контроллера питание и только. Привяжите приемник к аппе. Проверьте что все работает используя серву в один из первых четырех каналов, ну или если с отдельным регом, то его в, как правило, 3 канал и к нему двигатель. Ну а потом по своей схеме, там уж в cleanflight все еще раз проверите.
Упростил от бека тоже как пульт включаю диод на приемнике гаснет и все
Упростил от бека тоже как пульт включаю диод на приемнике гаснет и все
Мн-да, ну если все по инструкции делаете, то получается проблема в приёмнике (. Хотя такого в любом случае быть не должно. Насколько понимаю, в первом случае, у вас контроллер питание берет с приёмника и при включении передатчика на приёмнике что-то происходит и питание отрубается?
Контролер берет питание с бека и питает передатчик.
В приемник что-то включено, помимо питания (разъемы, джамперы)? Вы его как-то модифицировали? Например, “раздевали”, выпаивали пины и т.д.
Почему спрашиваю, описанное выглядит как-то фантастически, я это пока разумно объяснить не могу.
Нет ни чего не включено
Итак попытаюсь описать свою ситуацию подробней и надеюсь понятней. (извиняюсь за косноязычность “Чукча не читатель, чукча писатель”)
Есть у меня пульт Таранис и два приемника к нему
1-й это X8R работает сейчас в паре с флип 32 по s.bus , благодаря умным людям обошелся без инвектора (Спасибо тебе Григорий).
2-й это X4R SB должен работать с Naze32 SP racer F3, но не знаю то ли от моих кривых рук или еще чего не работает. Этот приемник до сих пор в заводской упаковке.
В пульте все настройки как у X8R, только выбран приемник 2 а не 1 и на другой моделе.
Как проявляется не работоспособность :
Подключаю приемник к питанию + и - без сигнального провода , начинает мигать красный светодиод. Включаю пульт , пульт говорит что найдена телеметрия , загорается на приемнике зеленый диод , через секунду диод гаснет, пульт говорит телеметрия потеряна и и на этом все.
Какие танцы с бубном применить или что я делаю не так? Уж очень не хочется новый покупать приемник.
1-й это X8R работает сейчас в паре с флип 32 по s.bus , благодаря умным людям обошелся без инвектора (Спасибо тебе Григорий).
попрошу рассказать или указать как сделать
сигнальный провод вот так,питание как обычно
Какие танцы с бубном применить или что я делаю не так? Уж очень не хочется новый покупать приемник.
попробую сделать предположение
-
Если вырубается питание приемника сразу после обнаружения передатчика значит где-то замыкание в момент появления сигналов на серво выходах или каких либо других сигналов на STM32, которая там на плате. Как это может быть - хз. Как вариант пока режим FS приемник держит выхода в Z состоянии, как только приходит первый пакет, приемник конфигурит выхода как “выхода” и что-то тут же коротит шину 3,3В, приемник ребутается
-
Стаб на приемнике не держит ток
-
Если запитка от регуля, то возможно регуль отрубает 5В после появления PWM сигнала с приемника