OTX LUA Scripts zum testen

coolchaos

Erfahrener Benutzer
Hi @JoeBuster

Ist doch recht einfach

Geht in 2 Schritten

Du musst im Mischer einen Timer auf einen Schalter oder Taster legen und z.B. auf einen
freien Hilfe-Kanal einen Wert setzen. (Ist gut Helles Doku beschrieben.)

Dann im "lua" den Wert des Hilfe-Kanals abfragen .... wenn der so ist wie Du Ihn gesetzt hast was Anzeigen wenn der Wert ein anderer ist (also Timer abgelaufen) nichts Anzeigen
 
Zuletzt bearbeitet:

JoeBuster

Erfahrener Benutzer
So Kameraden, Kameräder - ich schon wieder :D

Also ich hatte ja heute Vormittag schon einen meiner Screens gepostet.
In der Zwischenzeit habe ich ein wenig weiter "gebastelt" und habe mich dem rechten Teilstück angenommen.

Blöder Weise hänge ich jetzt seit Stunden fest, weil ich einfach nicht verstehe was ich falsch mache.

Hier nochmal der Screen von heute Vormittag, wo auf der rechten Seite die RSSI Balkengrafik völlig intakt ist.

Guckst Du:

telem1_0.jpg

Über einen dreifach Schalter sollen diese Balkendiagramme bei zwei von drei Schalterstellungen auf dem Display weg geschaltet werden. Dazu habe ich, wie bei den anderen Display Segementen auch, den Aufruf if (showvalue < 0) showvalue ist im übrigen mein selbst definierter "Wert" für den Schalter SA.

Diese Aufrufe habe ich nun vor die entsprechenden Balken Grafiken gesetzt, mit dem Ergebnis, das bei zwei von drei Schalterstellungen das Display auch leer ist - genauso wie gewünscht.

Leider wird mir aber seit dem mein "Main" Display nicht mehr richtig angezeigt - ich suche mir hier schon seit Stunden einen Wolf und weiß nicht was ich evtl. falsch gemacht habe.

Hat jemand eine Idee? Vielen Dank

telem1_4.jpg

telem1_5.jpg

telem1_3.jpg <------- Hier die zerschossene Balken Grafik.

..... und hier noch der Code:

-- ####################### RSSI Signal ################################

if (showvalue < 0) and RSSI > 80 then
lcd.drawFilledRectangle(205,7,5,48,0)
lcd.drawFilledRectangle(199,18,5,37,0)
lcd.drawFilledRectangle(193,28,5,27,0)
lcd.drawFilledRectangle(187,34,5,21,0)
lcd.drawFilledRectangle(181,40,5,15,0)
lcd.drawFilledRectangle(175,46,5,9,0)
lcd.drawFilledRectangle(169,52,5,3,0)
end

if (showvalue < 0) and RSSI >= 70 then
lcd.drawRectangle(205,7,5,48)
lcd.drawFilledRectangle(199,18,5,37,0)
lcd.drawFilledRectangle(193,28,5,27,0)
lcd.drawFilledRectangle(187,34,5,21,0)
lcd.drawFilledRectangle(181,40,5,15,0)
lcd.drawFilledRectangle(175,46,5,9,0)
lcd.drawFilledRectangle(169,52,5,3,0)
end

if (showvalue < 0) and RSSI >=60 then
lcd.drawRectangle(205,7,5,48)
lcd.drawRectangle(199,18,5,37)
lcd.drawFilledRectangle(193,28,5,27,0)
lcd.drawFilledRectangle(187,34,5,21,0)
lcd.drawFilledRectangle(181,40,5,15,0)
lcd.drawFilledRectangle(175,46,5,9,0)
lcd.drawFilledRectangle(169,52,5,3,0)
end

if (showvalue < 0) and RSSI >= 50 then
lcd.drawRectangle(205,7,5,48)
lcd.drawRectangle(199,18,5,37)
lcd.drawRectangle(193,28,5,27)
lcd.drawFilledRectangle(187,34,5,21,0)
lcd.drawFilledRectangle(181,40,5,15,0)
lcd.drawFilledRectangle(175,46,5,9,0)
lcd.drawFilledRectangle(169,52,5,3,0)
end

if (showvalue < 0) and RSSI >= 40 then
lcd.drawRectangle(205,7,5,48)
lcd.drawRectangle(199,18,5,37)
lcd.drawRectangle(193,28,5,27)
lcd.drawRectangle(187,34,5,21)
lcd.drawFilledRectangle(181,40,5,15,0)
lcd.drawFilledRectangle(175,46,5,9,0)
lcd.drawFilledRectangle(169,52,5,3,0)
end

if (showvalue < 0) and RSSI >= 30 then
lcd.drawRectangle(205,7,5,48)
lcd.drawRectangle(199,18,5,37)
lcd.drawRectangle(193,28,5,27)
lcd.drawRectangle(187,34,5,21)
lcd.drawRectangle(181,40,5,15)
lcd.drawFilledRectangle(175,46,5,9,0)
lcd.drawFilledRectangle(169,52,5,3,0)
end

if (showvalue < 0) and RSSI >= 20 then
lcd.drawRectangle(205,7,5,48)
lcd.drawRectangle(199,18,5,37)
lcd.drawRectangle(193,28,5,27)
lcd.drawRectangle(187,34,5,21)
lcd.drawRectangle(181,40,5,15)
lcd.drawRectangle(175,46,5,9)
lcd.drawFilledRectangle(169,52,5,3,0)
end

if (showvalue < 0) and RSSI <= 19 then
lcd.drawRectangle(205,7,5,48)
lcd.drawRectangle(199,18,5,37)
lcd.drawRectangle(193,28,5,27)
lcd.drawRectangle(187,34,5,21)
lcd.drawRectangle(181,40,5,15)
lcd.drawRectangle(175,46,5,9)
lcd.drawRectangle(169,52,5,3)
end

if (showvalue < 0) then
lcd.drawChannel(182, 56, 200, LEFT)
lcd.drawText(lcd.getLastPos(), 57, "dB", SMLSIZE)
end
 

cemizm

Erfahrener Benutzer
So wie es da steht kann es nicht funtionieren da ein dB Wert von z.b 42 größer ist als 20, als 30 und als 40. Daher übermalst du ständig alles.

Versuch es mal mit folgendem Code. Der ist einfacher zu pflegen und leichter zu lesen. Hab es aber nicht getestet...

if (showvalue < 0) then

if RSSI > 80 then lcd.drawFilledRectangle(205,7,5,48,0) else lcd.drawRectangle(205,7,5,48) end
if RSSI >= 70 then lcd.drawFilledRectangle(199,18,5,37,0) else lcd.drawRectangle(199,18,5,37) end
if RSSI >= 60 then lcd.drawFilledRectangle(193,28,5,27,0) else lcd.drawRectangle(193,28,5,27) end
if RSSI >= 50 then lcd.drawFilledRectangle(187,34,5,21,0) else lcd.drawRectangle(187,34,5,21) end
if RSSI >= 40 then lcd.drawFilledRectangle(181,40,5,15,0) else lcd.drawRectangle(181,40,5,15) end
if RSSI >= 30 then lcd.drawFilledRectangle(175,46,5,9,0) else lcd.drawRectangle(175,46,5,9) end
if RSSI >= 20 then lcd.drawFilledRectangle(169,52,5,3,0) else lcd.drawRectangle(169,52,5,3) end

lcd.drawChannel(182, 56, 200, LEFT)
lcd.drawText(lcd.getLastPos(), 57, "dB", SMLSIZE)

end
 

JoeBuster

Erfahrener Benutzer
@ cemizm - ICH BEDANKE MICH GANZ HERZLICH !!!!

Joo, der Code funktioniert. Dann kann ich ja eine Kanne Kaffee aufsetzen und weiter machen :D

Ne, im Ernst, ich hatte ja schon heute morgen geschrieben, das die Experten meine Codiererei wahrscheinlich ganz gruselig finden werden, aber ich bin froh das ich bei dem Telemetrie Screen schon so weit gekommen bin - auch wenn ich mir dann solche Eier selber gelegt habe.

Also nochmals Danke für die Unterstützung !!!!
 

cemizm

Erfahrener Benutzer
Kein Problem, deswegen sind wir ja hier...

Am ende profitieren ja alle von, wenn du dein fertiges Script hier bereitstellst :)

Gruß,
Cem
 

c2n

Erfahrener Benutzer
Hallo Gemeinde,

also ich möchte mir gerne ein eigenen Telemetriebildschirm zusammen stellen.

Ich habe den Unisens-E verbaut und würde gerne folgende Sachen haben:

Verbrauch mAh,
Volt Lipo,
Ampere,
Drehzahl
und Höhe.

Ich habe keinen Plan vom Programmieren und wollte deswegen fragen ob es da iwie vorgefertigte Codeschnipsel gibt.
Ich weiß ich habe es ja so auch im Telemetriebildschirm aber ich möchte es gerne anders gestalten.

Würde mich freuen wenn ich hier Hilfe bekomme.



Schönen Sonntag noch
 

kofferfisch

Erfahrener Benutzer
Frage an die Experten:
Kann man der Taranis an irgendeinem Wert die tatsächliche (horizontale) GPS-Entfernung entlocken?
Bei "distance" handelt es sich nach meinen letzten Beobachtungen um die tatsächliche "schräge" Luftlinie zum Startpunkt.
Flug direkt überm Startplatz in 90m Höhe ergibt dann eine "distance" von 90m...
 

Bussard

Erfahrener Benutzer
Wenn man eh ein Script hat, kann man dann auch den Satz des Pythagoras nutzen, um die Projektionsentfernung anzuzeigen (falls die angezeigte Entfernung wirklich die direkte Linie ist?).

Gruß
 
Hallo zusammen,

nachdem ich meine umgebaute Taranis wieder zum Leben erweckt habe (Display war defekt), habe ich mich mal ansatzweise mit dem LUA Script beschäftigt. Ich bin leider noch nicht sehr tief in die Thematik eingestiegen, möchte das aber ändern.

Mein Ziel ist es die Menüstruktur der Taranis zu ändern. Ich möchte euch zunächst mal fragen ob das mit dem LUA Script so überhaupt möglich ist wie ich mir das vorstelle.

Es wäre schön wenn das Menü so aussehen würde wie bei Graupner:
http://flugsachen.de/images/modell/mx16_hott/019%20menue.JPG
Es ist natürlich klar, dass es nicht exakt so aussehen soll, ich hätte nur gerne so eine Liste sodass das gesamte Menü etwas übersichtlicher wird.

Nun meine Frage an euch: Ist so etwas überhaupt prinzipiell mit einem LUA-Skript machbar? Falls ja, wie wäre das vom Aufwand her einzustufen?
 

kofferfisch

Erfahrener Benutzer
Auch wenn ich persönlicher weniger bzw. gar nicht in LUA begabt bin, gehe ich davon aus, dass dein Vorhaben etwas zu umfangreich gewählt ist.

Praktischer ist es bestimmt, sich ein wenig in die Materia einzulesen. Die Taranis kann vieles, man muss aber längst nicht alle Finessen kennen/anwenden/verstehen oder beherrschen;)
 
So meinte ich das nicht, ich möchte das Menü nicht komplett umstrukturieren. Das hatte ich etwas missverständlich geschrieben.

Mir würde es reichen wenn ich eine Liste (wie in dem Bild das ich gepostet habe) hätte mit den entsprechenden Menüs die schon vorhanden sind.

Also quasi so etwas in der Art:

Modellwahl ------------------ Modelleinstellungen
Hubschraubermischer ------ Flugphasen
Inputs ------------------------ Mischer
Servoweg -------------------- Kurven
Globale Variablen ----------- Logik Schalter
Spez. Funktionen ------------ Custom Scripts
Telemetrie

Das sind die Menüpunkte die ich jetzt in der Taranis auch schon habe. Durch die Liste würde ich dann gerne mit den + und - Tasten durchscrollen und mit Enter den entsprechenden Menüpunkt auswählen können.

Ich komme mit der Taranis wunderbar zurecht. Die Möglichkeiten die man damit hat sind grenzenlos und das ist genau das was ich möchte. Das war der Hauptgrund warum ich mir den Sender gekauft habe.

Das Script würde ich schreiben um mich etwas näher mit LUA zu beschäftigen und auch im Hinblick auf den neuen X9E Sender, welcher hoffentlich bald kommt. Dieser hat dann nämlich wie die Graupner MC-XX Sender ein Drehrad. Somit würde sich die Art der Navigation der Menüs wie bei Graupner anbieten.
Ich müsste in dem Script dann nur noch die Tasten + und - durch "Drehrad links" und "Drehrad rechts" ersetzen.
 
Zuletzt bearbeitet:
Du kannst einmal probieren die Zeilen der einzelnen Abschnitte mit -- auszudokumentieren.
Dann manuell einzelne Bereiche wieder einblenden und schauen woran es liegt.
Du kannst auch mal alles ab Flightmode bis zum vorletzten end (ACHTUNG!! "end" und "return { run=run }" in den letzten beiden Zeilen müssen bleiben) in die Zwischenablage kopieren und dann probieren ob es klappt. Anschließend die einzelnen Bereiche wieder reinkopieren.
Ist ein wenig Arbeit, aber wenn du herausbekommst wo der Fehler auftritt dann kann ich dir sicher helfen, dass es läuft.
Der Fehler muss in diesem Abschnitt liegen:

--------------------------------
-- Main Battery (Akkuanzeige) --
--------------------------------

local percent1 = (currentVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Kopterakku
local percent2 = (senderVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Senderakku

-- Akku angeschlossen und über 0%
if percent1 > 0 then
lcd.drawNumber(3, 41, percent1, LEFT+MIDSIZE) -- Ausgabe Prozent Kopterakku
lcd.drawText(lcd.getLastPos(), 41, "%", MIDSIZE)
lcd.drawGauge(1, 41, 40, 12, percent1, 100) -- Ausgabe Prozentbalken
lcd.drawNumber(67,41, currentVoltage*10, MIDSIZE+PREC1) -- Ausgabe Absolutwert Kopterakku
end

lcd.drawNumber(3, 55, percent2, LEFT+0) -- Ausgabe Prozent Senderakku
lcd.drawText(lcd.getLastPos(), 55, "%", 0)
lcd.drawGauge(1, 54, 40, 9, percent2, 100) -- Ausgabe Prozentbalken
lcd.drawNumber(67,54, senderVoltage*10, 0+PREC1) -- Ausgabe Absolutwert Senderakku


aber ich finde ihn nicht :(
 
ähm... es ist der Versuch bobus script (Taranis+anysense) zum Laufen zu bekommen. Kommt immer "script error". ...ich weiß es nicht :( Will nur dieses "script error" erstmal weg haben :)
 

coolchaos

Erfahrener Benutzer
Hi

lass doch mal nur den Teil laufen


--------------------------------

-- Main Battery (Akkuanzeige) --
--------------------------------

local percent1 = (currentVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Kopterakku
local percent2 = (senderVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Senderakku

-- Akku angeschlossen und über 0%
if percent1 > 0 then
lcd.drawNumber(3, 41, percent1, LEFT+MIDSIZE) -- Ausgabe Prozent Kopterakku
lcd.drawText(lcd.getLastPos(), 41, "%", MIDSIZE)
lcd.drawGauge(1, 41, 40, 12, percent1, 100) -- Ausgabe Prozentbalken
lcd.drawNumber(67,41, currentVoltage*10, MIDSIZE+PREC1) -- Ausgabe Absolutwert Kopterakku
end

lcd.drawNumber(3, 55, percent2, LEFT+0) -- Ausgabe Prozent Senderakku
lcd.drawText(lcd.getLastPos(), 55, "%", 0)
lcd.drawGauge(1, 54, 40, 9, percent2, 100) -- Ausgabe Prozentbalken
lcd.drawNumber(67,54, senderVoltage*10, 0+PREC1) -- Ausgabe Absolutwert Senderakku
Geht es dann oder kommt da auch ein Fehler?
 
... syntax error

selbst nur hiermit kommt der Fehler:

--------------------------------
-- Main Battery (Akkuanzeige) --
--------------------------------

local percent1 = (currentVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Kopterakku
local percent2 = (senderVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Senderakku

-- kein Akku angeschlossen oder Prozent Kopterakku < 0
if percent1 < 1 then
lcd.drawText(2, 41, "!!! AKKU !!!", MIDSIZE+BLINK)
end
 
und sogar nur hiermit:

--------------------------------
-- Main Battery (Akkuanzeige) --
--------------------------------

local percent1 = (currentVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Kopterakku
local percent2 = (senderVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Senderakku
 

coolchaos

Erfahrener Benutzer
Hi

Ich habe mal die Werte durch was festes ersetzt dann geht es. ;)

local function run(event)
--@CoolChaos 31. MRZ 2015 (19:40) Uhr

lcd.clear()

local percent1 = 10 --(currentVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Kopterakku
local percent2 =20 --(senderVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Senderakku
local currentVoltage =1
local senderVoltage=4

-- Akku angeschlossen und über 0%
if percent1 > 0 then
lcd.drawNumber(3, 41, percent1, LEFT+MIDSIZE) -- Ausgabe Prozent Kopterakku
lcd.drawText(lcd.getLastPos(), 41, "%", MIDSIZE)
lcd.drawGauge(1, 41, 40, 12, percent1, 100) -- Ausgabe Prozentbalken
lcd.drawNumber(67,41, currentVoltage*10, MIDSIZE+PREC1) -- Ausgabe Absolutwert Kopterakku
end

lcd.drawNumber(3, 55, percent2, LEFT+0) -- Ausgabe Prozent Senderakku
lcd.drawText(lcd.getLastPos(), 55, "%", 0)
lcd.drawGauge(1, 54, 40, 9, percent2, 100) -- Ausgabe Prozentbalken
lcd.drawNumber(67,54, senderVoltage*10, 0+PREC1) -- Ausgabe Absolutwert Senderakku

end -- WICHTIG
return { run=run }
Die Zeilen sind OK

Da muss was in den beiden Zeilen mit den Werten nicht stimmen.

local percent1 = (currentVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Kopterakku
local percent2 = (senderVoltage-batempty) * 100 / (batfull-batempty) -- Prozent Senderakku
 
Zuletzt bearbeitet:
FPV1

Banggood

Oben Unten