From 16357f29e92bc9ee83851eea2e735a0c6e50443c Mon Sep 17 00:00:00 2001 From: pascallanger Date: Tue, 8 Dec 2020 16:48:04 +0100 Subject: [PATCH] Add files via upload --- Lua_scripts/pidDsm.lua | 127 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 Lua_scripts/pidDsm.lua diff --git a/Lua_scripts/pidDsm.lua b/Lua_scripts/pidDsm.lua new file mode 100644 index 0000000..8d2b89b --- /dev/null +++ b/Lua_scripts/pidDsm.lua @@ -0,0 +1,127 @@ +-- +-- 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 }