hallo Freunde,
ich beschäftige mich seit Kurzem mit LUA und habe gleich mal ein Anfängerproblem.
Laut Beschreibung startet man einen Script auf dem Schirm "12/13 Custom" kann ich leider
auf meinem Taranis 2.2.4 (ich weis es gibt schon die Version 3) nicht finden.
Den Script habe ich auf die SD gespielt.
Was mache ich falsch?
lg
hansp
LUA Script starten (bekomme es nicht hin)
- Snurfer
- Drohnenkommandant
- Wohnort:: Taunus
- Kopter & Zubehör: 5" + 3" Freestyle Quads
Tiny Whoops, Toothpicks, Cinewhoops
Jumper T16, Jumper T-Lite - Hat sich bedankt: 55 Mal
- Danksagung erhalten: 34 Mal
Beitrag
Re: LUA Script starten (bekomme es nicht hin)
Ist ein bißchen her mit der Taranis bei mir. Normalerweise gehst du in den Ordner, in dem dein Skript liegt. Den Knopf am Stell Rad drücken, dann müsste die Option execute da sein. So kenne ich das zumindest beim Crossfire lua Skript.
- hansp
- Newbie
- Wohnort:: Wien
- Kopter & Zubehör: Taranis X9d+
- Hat sich bedankt: 0
- Danksagung erhalten: 1 Mal
Beitrag
Re: LUA Script starten (bekomme es nicht hin)
Danke für die Antworten.
Ich werde mal ein wenig ausholen.
Ich mache für einen Freund eine Hardware und SW Entwicklung. Ich habe auf einem PIC24 Prozessor folgendes Realisiert. Für das Ganze habe ich nur 10x14 mm Platz.
Einlesen von 2 QAnalogwerten und 12 Digitalwerten (Schalter) diese daten habe ich in den 4 byte Nutzdaten des S-Port untergebracht (2 Analogwerte zu 10 Bit und 12 Bit für die Schalter) und diese werden zum Sender übertragen. Diese Daten sind nicht direkt darstellbar und könen vom Sender nicht verarbeitet werden. . Nun brauche ich im Sender ein Script das diese daten in Globale variable und logische Schalter überträgt damit man sie weiterverwenden kann. In dem Script von mir sieht man wie ich die Daten aus dem telegramm extrahiere.
Was habe ich gemacht:
Im Menü "Spezail Funktionen" habe ich in der ersten Zeile folgendes eingetragen:
SF1 !Tele LuaScript NamedesScriptes
Im Sensor habe ich die ID 0x10 und die logical ID 1000. Das wird vom Sender auch erkannt und unter den Sensoren dargestellt (aber nattürlich kann er mit dem Telegramm nichts anfangen).
Hier der Script:
-- Define used variables as local to all the script
local sensorID,frameID,dataID,payload
local channel1, channel2 -- Analogwerte 10 Bit
local switch[12]
local function bgfunc()
-- Prepare to extract SPort data
while true do
sensorID,frameID,dataID,payload = sportTelemetryPop()
if dataID~=nil do
-- unpack 0x1000 packet
if dataID == 0x1000 then
channel2 = bit32.extract(payload,22,31)
channel1 = bit32.extract(payload,12,21)
switch[11] = bit32.extract(payload,11,11)
switch[10] = bit32.extract(payload,10,10)
switch[09] = bit32.extract(payload,09,09)
switch[08] = bit32.extract(payload,08,08)
switch[07] = bit32.extract(payload,07,07)
switch[06] = bit32.extract(payload,06,06)
switch[05] = bit32.extract(payload,05,05)
switch[04] = bit32.extract(payload,04,04)
switch[03] = bit32.extract(payload,03,03)
switch[02] = bit32.extract(payload,02,02)
switch[01] = bit32.extract(payload,01,01)
switch[00] = bit32.extract(payload,00,00)
model.setGlobalVariable(0, 0, channel1)
model.setGlobalVariable(1, 0, channel2)
end
end
end
local function run(e)
-- Call the background function when the script is on the main screen
bgfunc()
end
return{run=run background=bgfunc}
Ich werde mal ein wenig ausholen.
Ich mache für einen Freund eine Hardware und SW Entwicklung. Ich habe auf einem PIC24 Prozessor folgendes Realisiert. Für das Ganze habe ich nur 10x14 mm Platz.
Einlesen von 2 QAnalogwerten und 12 Digitalwerten (Schalter) diese daten habe ich in den 4 byte Nutzdaten des S-Port untergebracht (2 Analogwerte zu 10 Bit und 12 Bit für die Schalter) und diese werden zum Sender übertragen. Diese Daten sind nicht direkt darstellbar und könen vom Sender nicht verarbeitet werden. . Nun brauche ich im Sender ein Script das diese daten in Globale variable und logische Schalter überträgt damit man sie weiterverwenden kann. In dem Script von mir sieht man wie ich die Daten aus dem telegramm extrahiere.
Was habe ich gemacht:
Im Menü "Spezail Funktionen" habe ich in der ersten Zeile folgendes eingetragen:
SF1 !Tele LuaScript NamedesScriptes
Im Sensor habe ich die ID 0x10 und die logical ID 1000. Das wird vom Sender auch erkannt und unter den Sensoren dargestellt (aber nattürlich kann er mit dem Telegramm nichts anfangen).
Hier der Script:
-- Define used variables as local to all the script
local sensorID,frameID,dataID,payload
local channel1, channel2 -- Analogwerte 10 Bit
local switch[12]
local function bgfunc()
-- Prepare to extract SPort data
while true do
sensorID,frameID,dataID,payload = sportTelemetryPop()
if dataID~=nil do
-- unpack 0x1000 packet
if dataID == 0x1000 then
channel2 = bit32.extract(payload,22,31)
channel1 = bit32.extract(payload,12,21)
switch[11] = bit32.extract(payload,11,11)
switch[10] = bit32.extract(payload,10,10)
switch[09] = bit32.extract(payload,09,09)
switch[08] = bit32.extract(payload,08,08)
switch[07] = bit32.extract(payload,07,07)
switch[06] = bit32.extract(payload,06,06)
switch[05] = bit32.extract(payload,05,05)
switch[04] = bit32.extract(payload,04,04)
switch[03] = bit32.extract(payload,03,03)
switch[02] = bit32.extract(payload,02,02)
switch[01] = bit32.extract(payload,01,01)
switch[00] = bit32.extract(payload,00,00)
model.setGlobalVariable(0, 0, channel1)
model.setGlobalVariable(1, 0, channel2)
end
end
end
local function run(e)
-- Call the background function when the script is on the main screen
bgfunc()
end
return{run=run background=bgfunc}
Beitrag
Re: LUA Script starten (bekomme es nicht hin)
Wenn der Sender dir die Daten schon einmal richtig anzeigt, heißt dies ja schon einmal : Das Script läuft.
Damit wäre das Anfangsproblem ja scheinbar gelöst
Hast du weitere Hindernisse zu bekämpfen?
Damit wäre das Anfangsproblem ja scheinbar gelöst
Hast du weitere Hindernisse zu bekämpfen?
Gruß Dirk
- hansp
- Newbie
- Wohnort:: Wien
- Kopter & Zubehör: Taranis X9d+
- Hat sich bedankt: 0
- Danksagung erhalten: 1 Mal
Beitrag
Re: LUA Script starten (bekomme es nicht hin)
Nei der Script lauft nicht, der Sender Zeigt die daten wewnn ich die Sensor Suche einschalte. Die Daten sind aber in den 4 Nutzbytes kompakt zusammengestellt. darum muss ich sie zuerst rausziehen und dann in Globale variable bzw. logische Schalter umspeichern.
Das Script lauft gar nicht und ich weis nicht weiter.
Ich habe die Hoffnung das ein Wissender sich das Script mal anschaut und ausbessert.
LG
hansp
Das Script lauft gar nicht und ich weis nicht weiter.
Ich habe die Hoffnung das ein Wissender sich das Script mal anschaut und ausbessert.
LG
hansp
- hansp
- Newbie
- Wohnort:: Wien
- Kopter & Zubehör: Taranis X9d+
- Hat sich bedankt: 0
- Danksagung erhalten: 1 Mal
Beitrag
Re: LUA Script starten (bekomme es nicht hin)
NAchdem ich jetzt mal die Beschreibungen durchgeschaut habe habe ich folgede Version erstellt:
-- Define used variables as local to all the script
local sensorID,frameID,dataID,payload
local channel1, channel2 -- Analogwerte 10 Bit
local switch[12]
local function init_func()
channel1 = 512;
channel2 = 512;
end
local function run_func()
-- Prepare to extract SPort data
sensorID,frameID,dataID,payload = sportTelemetryPop()
if dataID~=nil do
-- unpack 0x1000 packet
if dataID == 0x1000 then
channel2 = bit32.extract(payload,22,31)
channel1 = bit32.extract(payload,12,21)
switch[11] = bit32.extract(payload,11,11)
switch[10] = bit32.extract(payload,10,10)
switch[09] = bit32.extract(payload,09,09)
switch[08] = bit32.extract(payload,08,08)
switch[07] = bit32.extract(payload,07,07)
switch[06] = bit32.extract(payload,06,06)
switch[05] = bit32.extract(payload,05,05)
switch[04] = bit32.extract(payload,04,04)
switch[03] = bit32.extract(payload,03,03)
switch[02] = bit32.extract(payload,02,02)
switch[01] = bit32.extract(payload,01,01)
switch[00] = bit32.extract(payload,00,00)
model.setGlobalVariable(0, 0, channel1)
model.setGlobalVariable(1, 0, channel2)
end
end
return{run=run_func init=init_func}
Am Abend werde ich das mal versuchen.
lg
hansp
-- Define used variables as local to all the script
local sensorID,frameID,dataID,payload
local channel1, channel2 -- Analogwerte 10 Bit
local switch[12]
local function init_func()
channel1 = 512;
channel2 = 512;
end
local function run_func()
-- Prepare to extract SPort data
sensorID,frameID,dataID,payload = sportTelemetryPop()
if dataID~=nil do
-- unpack 0x1000 packet
if dataID == 0x1000 then
channel2 = bit32.extract(payload,22,31)
channel1 = bit32.extract(payload,12,21)
switch[11] = bit32.extract(payload,11,11)
switch[10] = bit32.extract(payload,10,10)
switch[09] = bit32.extract(payload,09,09)
switch[08] = bit32.extract(payload,08,08)
switch[07] = bit32.extract(payload,07,07)
switch[06] = bit32.extract(payload,06,06)
switch[05] = bit32.extract(payload,05,05)
switch[04] = bit32.extract(payload,04,04)
switch[03] = bit32.extract(payload,03,03)
switch[02] = bit32.extract(payload,02,02)
switch[01] = bit32.extract(payload,01,01)
switch[00] = bit32.extract(payload,00,00)
model.setGlobalVariable(0, 0, channel1)
model.setGlobalVariable(1, 0, channel2)
end
end
return{run=run_func init=init_func}
Am Abend werde ich das mal versuchen.
lg
hansp
- Folgende Benutzer bedankten sich beim Autor hansp für den Beitrag:
- Wolle Can Fly (22:00 ,Di 3. Mär 2020,)
- Bewertung: 5%
- hansp
- Newbie
- Wohnort:: Wien
- Kopter & Zubehör: Taranis X9d+
- Hat sich bedankt: 0
- Danksagung erhalten: 1 Mal
Beitrag
Re: LUA Script starten (bekomme es nicht hin)
Das ist der ganze Script. Aber bitte beachten ich bin hier totaler Anfänger (auch wenn ich schon viel programmiert habe in meinem Leben) und für Hilfe wirklich Dankbar.
Zum Starten habe ich in "spezielle Funktionen" folgendes eingestellt:
SF1 luacript Namedesscripters
Nun hoffe ich das ich in der Anzeige "Globale Variable" etwas sehe. Oder liege ich ganz falsch?
Habe mich auch schoin durch diverse beschreibungen gewühlt.
In diesem Sript will ich vorerst nur die 2 10 Bit Analogwerte aud den empfangenen Daten rausziehen und in Globale variable umspeichern.
Der Sensor (vorerst auf einem PIC Eval Board realisiert) legt die Daten mit Sicherheit richtig ab, das sehe ich im Emulator bzw auf dem Oszi, ich arbeite bei einem Automobil Zulieferer
in der Elektronik Entwicklungsabteilung was den PIC betrifft bin ich fitt aber bei der LUA Thematik gibt es noch viel zu lernen.
LG
hansp
Zum Starten habe ich in "spezielle Funktionen" folgendes eingestellt:
SF1 luacript Namedesscripters
Nun hoffe ich das ich in der Anzeige "Globale Variable" etwas sehe. Oder liege ich ganz falsch?
Habe mich auch schoin durch diverse beschreibungen gewühlt.
In diesem Sript will ich vorerst nur die 2 10 Bit Analogwerte aud den empfangenen Daten rausziehen und in Globale variable umspeichern.
Der Sensor (vorerst auf einem PIC Eval Board realisiert) legt die Daten mit Sicherheit richtig ab, das sehe ich im Emulator bzw auf dem Oszi, ich arbeite bei einem Automobil Zulieferer
in der Elektronik Entwicklungsabteilung was den PIC betrifft bin ich fitt aber bei der LUA Thematik gibt es noch viel zu lernen.
LG
hansp
Beitrag
Re: LUA Script starten (bekomme es nicht hin)
Ich weiß ja nicht, ob sich in der Zwischenzeit der Syntax geändert hat, aber meine Schliefe schaut so aus:
Die init liegt bei mir direkt über der geposteten "run".
Dort sind auch lokale Variablen definiert.
Sind deine Variablen global, welche du fütterst und abfragen willst?
Lokale Variablen werden zerstört sobald der Loop , der Sie einschließt und wo Sie definiert werden, beendet ist.
Doe Routine wo Du decodierst würde ich als "local function background ()" definieren.
Kennst Du diese Seite hier?
https://github.com/opentx/opentx/wiki/L ... -in-OpenTX
Code: Alles auswählen
-- ###################### INIT ##########################
local function init()
....
pilotlon = 0
sinCorr = 0
cosCorr = 0
offsetX = 0
....
end
-- ####################### Run #########################
local function run(event)
-- Clear necessary
lcd.clear()
-- update current GPS
background()
-- Grid
buildGrid(widgetDefinition)
end
return{init=init,run=run,background=background}
Dort sind auch lokale Variablen definiert.
Sind deine Variablen global, welche du fütterst und abfragen willst?
Lokale Variablen werden zerstört sobald der Loop , der Sie einschließt und wo Sie definiert werden, beendet ist.
Doe Routine wo Du decodierst würde ich als "local function background ()" definieren.
Kennst Du diese Seite hier?
https://github.com/opentx/opentx/wiki/L ... -in-OpenTX
Gruß Dirk
Beitrag
Re: LUA Script starten (bekomme es nicht hin)
Ist zwar schon etwas älter, sollte aber noch gültig sein:
Open TX Reference Guide
https://legacy.gitbook.com/book/opentx/ ... de/details
Open TX Reference Guide
https://legacy.gitbook.com/book/opentx/ ... de/details
Gruß Dirk
- hansp
- Newbie
- Wohnort:: Wien
- Kopter & Zubehör: Taranis X9d+
- Hat sich bedankt: 0
- Danksagung erhalten: 1 Mal
Beitrag
Re: LUA Script starten (bekomme es nicht hin) / gelöst
hallo Freunde,
so ich habe das Ding am Laufen.
gestartet über "Spezielle Funktionen" lauft es immer im Hintergrund (bzw. wird immer aufgerufen).
Dieses Script fragt den Sensor mit der ID 0x5000 ab und speicher 2 Analogwerte in Globale Variable und Schalter nach Logische Schalter ab.
Die LAufzeit von Schalter EIN am Sensor bis zu einer Aktion am Modell (über Mixer) ist ~120 ms.
Hier der Script:
local function run(event)
local sensorID, frameID, dataID, payload
local channel1
local channel2 -- Analogwerte 10 Bit
local switch1
local switch2
local switch3
local switch4
local switch5
-- für alt/neu Vergleich
local switch1_aw
local switch2_aw
local switch3_aw
local switch4_aw
local switch5_aw
sensorID,frameID,dataID,payload = sportTelemetryPop()
-- unpack 0x5000 packet
while dataID~=nil do
if dataID == 0x5000 then
channel2 = bit32.extract(payload,22,10)
channel1 = bit32.extract(payload,12,10)
switch1 = bit32.extract(payload,00,01)
switch2 = bit32.extract(payload,01,01)
switch3 = bit32.extract(payload,02,01)
model.setGlobalVariable(0, 0, channel1)
model.setGlobalVariable(1, 0, channel2)
if switch1 ~= switch1_aw then
switch1_aw = switch1
if switch1 == 0 then
model.setLogicalSwitch(3,{func=9})
else
model.setLogicalSwitch(3,{func=10})
end
end
if switch2 ~= switch2_aw then
switch2_aw = switch2
if switch2 == 0 then
model.setLogicalSwitch(4,{func=9})
else
model.setLogicalSwitch(4,{func=10})
end
end
if switch3 ~= switch3_aw then
switch3_aw = switch3
if switch3 == 0 then
model.setLogicalSwitch(5,{func=9})
else
model.setLogicalSwitch(5,{func=10})
end
end
end
sensorID,frameID,dataID,payload = sportTelemetryPop()
end
so ich habe das Ding am Laufen.
gestartet über "Spezielle Funktionen" lauft es immer im Hintergrund (bzw. wird immer aufgerufen).
Dieses Script fragt den Sensor mit der ID 0x5000 ab und speicher 2 Analogwerte in Globale Variable und Schalter nach Logische Schalter ab.
Die LAufzeit von Schalter EIN am Sensor bis zu einer Aktion am Modell (über Mixer) ist ~120 ms.
Hier der Script:
local function run(event)
local sensorID, frameID, dataID, payload
local channel1
local channel2 -- Analogwerte 10 Bit
local switch1
local switch2
local switch3
local switch4
local switch5
-- für alt/neu Vergleich
local switch1_aw
local switch2_aw
local switch3_aw
local switch4_aw
local switch5_aw
sensorID,frameID,dataID,payload = sportTelemetryPop()
-- unpack 0x5000 packet
while dataID~=nil do
if dataID == 0x5000 then
channel2 = bit32.extract(payload,22,10)
channel1 = bit32.extract(payload,12,10)
switch1 = bit32.extract(payload,00,01)
switch2 = bit32.extract(payload,01,01)
switch3 = bit32.extract(payload,02,01)
model.setGlobalVariable(0, 0, channel1)
model.setGlobalVariable(1, 0, channel2)
if switch1 ~= switch1_aw then
switch1_aw = switch1
if switch1 == 0 then
model.setLogicalSwitch(3,{func=9})
else
model.setLogicalSwitch(3,{func=10})
end
end
if switch2 ~= switch2_aw then
switch2_aw = switch2
if switch2 == 0 then
model.setLogicalSwitch(4,{func=9})
else
model.setLogicalSwitch(4,{func=10})
end
end
if switch3 ~= switch3_aw then
switch3_aw = switch3
if switch3 == 0 then
model.setLogicalSwitch(5,{func=9})
else
model.setLogicalSwitch(5,{func=10})
end
end
end
sensorID,frameID,dataID,payload = sportTelemetryPop()
end
Beitrag
Re: LUA Script starten (bekomme es nicht hin)
Prima
Freut mich für dich, das es nun endlich geklappt hat.
Wie ich es richtig sehe, fütterst du nun Funkeninterne Variablen mit dem entsprechenden Namespace.
Freut mich für dich, das es nun endlich geklappt hat.
Wie ich es richtig sehe, fütterst du nun Funkeninterne Variablen mit dem entsprechenden Namespace.
Gruß Dirk