mirror of
https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
synced 2025-02-04 18:48:11 +00:00
128 lines
3.4 KiB
Lua
128 lines
3.4 KiB
Lua
--
|
|
-- This telemetry script displays the Flight Log Gain
|
|
-- Parameters streamed from the Blade 150S Spektrum AR6335A
|
|
-- Flybarless Controller.
|
|
|
|
-- The script facilitates the setting of the FBL's
|
|
-- Gain Parameters including PID for both
|
|
-- cyclic and tail. It is similar to the Telemetry Based
|
|
-- Text Generator available on Spektrum transmitters.
|
|
|
|
-- Supporting similar Blade micros such as the Fusion 180
|
|
-- would possibly require minor modifications to this script.
|
|
|
|
-- This script reads telemetry data from the Spektrum
|
|
-- receiver and thus functionality relies on data being
|
|
-- captured by the OpenTX transmitter. A DSM
|
|
-- telemetry-ready module is required. Please see the
|
|
-- MULTI-Module project at https://www.multi-module.org/.
|
|
|
|
-- The only supported display is the Taranis'. It may work
|
|
-- with higher res screens.
|
|
--
|
|
|
|
|
|
-- Sensor names
|
|
local PSensor = "FdeA"
|
|
local ISensor = "FdeB"
|
|
local DSensor = "FdeL"
|
|
local RSensor = "FdeR"
|
|
local ActiveParamSensor = "Hold"
|
|
|
|
local tags = {"P", "I", "D"}
|
|
|
|
|
|
local function getPage(iParam)
|
|
-- get page from 0-based index
|
|
-- {0,1,2,3}: cyclic (1), {4,5,6,7}: tail (2)
|
|
local res = (math.floor(iParam/4)==0) and 1 or 2
|
|
return res
|
|
end
|
|
|
|
function round(v)
|
|
-- round float
|
|
local factor = 100
|
|
return math.floor(v * factor + 0.5) / factor
|
|
end
|
|
|
|
|
|
local function readValue(sensor)
|
|
-- read from sensor, round and return
|
|
local v = getValue(sensor)
|
|
v = round(v)
|
|
return v
|
|
end
|
|
|
|
local function readActiveParamValue(sensor)
|
|
-- read and return a validated active parameter value
|
|
local v = getValue(sensor)
|
|
if (v<1 or v>8) then
|
|
return nil
|
|
end
|
|
return v
|
|
end
|
|
|
|
local function readParameters()
|
|
-- read and return parameters
|
|
local p = readValue(PSensor)
|
|
local i = readValue(ISensor)
|
|
local d = readValue(DSensor)
|
|
local r = readValue(RSensor)
|
|
local a = readActiveParamValue(ActiveParamSensor)
|
|
return {p,i,d,r,a}
|
|
end
|
|
|
|
local function drawParameters()
|
|
-- draw labels and params on screen
|
|
local params = readParameters()
|
|
local activeParam = params[5]
|
|
|
|
-- if active gain does not validate then assume
|
|
-- Gain Adjustment Mode is disabled
|
|
if not activeParam then
|
|
lcd.clear()
|
|
lcd.drawText(20,30,"Please enter Gain Adjustment Mode")
|
|
return
|
|
end
|
|
|
|
local activePage = getPage(activeParam-1)
|
|
for iParam=0,7 do
|
|
-- highlight selected parameter
|
|
local attr = (activeParam==iParam+1) and 2 or 0
|
|
-- circular index (per page)
|
|
local perPageIndx = iParam % 4 + 1
|
|
-- check if displaying cyclic params.
|
|
local isCyclicPage = (getPage(iParam)==1)
|
|
-- set y draw coord
|
|
local y = perPageIndx*10+2
|
|
|
|
-- labels
|
|
local x = isCyclicPage and 6 or 120
|
|
-- labels are P,I,D for both pages except for last param
|
|
local val = iParam==3 and "Response" or
|
|
(iParam==7 and "Filtering" or tags[perPageIndx])
|
|
lcd.drawText (x, y, val, attr)
|
|
|
|
-- gains
|
|
-- set all params for non-active page to '--' rather than 'last value'
|
|
val = (getPage(iParam)==activePage) and params[perPageIndx] or '--'
|
|
x = isCyclicPage and 70 or 180
|
|
lcd.drawText (x, y, val, attr)
|
|
end
|
|
end
|
|
|
|
|
|
local function run_func(event)
|
|
-- TODO: calling clear() on every function call redrawing all labels is not ideal
|
|
lcd.clear()
|
|
lcd.drawText (8, 2, "Cyclic (0...200)")
|
|
lcd.drawText (114, 2, "Tail (0...200)")
|
|
drawParameters()
|
|
end
|
|
|
|
local function init_func() end
|
|
local function bg_func() end
|
|
|
|
|
|
return { run=run_func, background=bg_func, init=init_func }
|