LUA Scripting voor o.a. Taranis

Versie 0.4

f5860508e2.jpg


Visuele wijzigingen, daarom nu ook een paar BMP's nodig.

ZIPFILE: http://www.richardoe.nl/BMP.zip

uitpakken in SCRIPTS folder, dus de bmp files moeten komen in <SDCARD>SCRIPTS\BMP\*
Code hieronder moet op SD card in folder: /Scripts/<modelname>/telem1.lua

Code:
-- ###############################################################
-- #                                                             #
-- #        Telemetry Lua Script Naze32, version 0.4             #
-- #                                                             #
-- #  + naze32 telemetry enabled                                 #
-- #  + tested with D4r-II                                       #
-- #                                                             #
-- #  License (Script & images): Share Alike                     #
-- #  Can be used and changed non commercial	         		 #
-- #                                                             #
-- #  Inspired by SockEye                                        #
-- #  Questions: [email]Richard@hetnet.nl[/email]                               #
-- #                                                             #
-- ###############################################################

local function run(event)

-- The 0% value for 2S, 3S, 4S, you can change these to your own likings.
local four_low=13.5
local three_low=10.2
local two_low=6.9

-- The 100% value for 2S, 3S, 4S, , you can change these to your own likings.
local four_high=16.5
local three_high=12.5
local two_high=8.5

-- NO changes needed below here, except when using different switch for flight mode (I use SG) change line:
--   if getValue(MIXSRC_SG)<0 then

local battype = 3
local battypestr="_S"
local percent=0
local batt_sum = getValue("cell-sum")

   if batt_sum>3 then
    battype=math.ceil(batt_sum/4.25)
	if battype==4 then
	  battypestr="4S"
	  percent = (batt_sum-four_low)*(100/(four_high-four_low))
	end
	if battype==3 then
	  battypestr="3S"
	  percent = (batt_sum-three_low)*(100/(three_high-three_low))
	end
	if battype==2 then
	  battypestr="2S"
	  percent = (batt_sum-two_low)*(100/(two_high-two_low))
	end
   end

--   local percent = 8 -- for simulation only
 
   local myPxHeight = math.floor(percent * 0.37)            	
   local myPxY = 11 + 37 - myPxHeight

   lcd.drawPixmap(3, 1, "/SCRIPTS/BMP/battery.bmp")

   if percent > 0 then
   	lcd.drawFilledRectangle(8, myPxY, 21, myPxHeight, FILL_WHITE ) 
   end

    local i = 36
    while (i > 0) do
    	lcd.drawLine(7, 11 + i, 27, 11 +i, SOLID, GREY_DEFAULT)
    	i= i-2
    end

   if (percent < 15) then
    lcd.drawNumber(4,55, batt_sum * 100  ,PREC2 + LEFT + BLINK)
   else
    lcd.drawNumber(4,55, batt_sum * 100  ,PREC2 + LEFT)
   end
    lcd.drawText(lcd.getLastPos(), 55, "v ", 0)
    lcd.drawText(lcd.getLastPos(), 55,battypestr,0)

-- ###############################################################
-- TIMERS
-- ###############################################################
  local timer = model.getTimer(0)
  lcd.drawText(40, 1, "TIMER1", 0)
  lcd.drawTimer(40, 11, timer.value, MIDSIZE)
  
  timer = model.getTimer(1)
  lcd.drawText(40, 31, "TIMER2", 0)
  lcd.drawTimer(40, 41, timer.value, MIDSIZE)

-- ###############################################################
-- FLIGHTMODE
-- ###############################################################

    lcd.drawPixmap(78, 1, "/SCRIPTS/BMP/fm.bmp")

   if getValue(MIXSRC_SG)<0 then
      lcd.drawText(98,1,"Horizon",MIDSIZE)
   elseif getValue(MIXSRC_SG) == 0 then
      lcd.drawText(98,1,"Acro",MIDSIZE)
   else
      lcd.drawText(98,1,"Angle",MIDSIZE)
   end


-- ###############################################################
-- Displays xyz data
-- ###############################################################
   lcd.drawText(80,31,"x-AS: ",0)
   lcd.drawText(120,31,getValue("accx"),0)

   lcd.drawText(80,40,"y-AS: ",0)
   lcd.drawText(120,40,getValue("accy"),0)

   lcd.drawText(80,49,"Z-AS: ",0)
   lcd.drawText(120,49,getValue("accz"),0)

-- ###############################################################
-- Displays RSSI data
-- ###############################################################
 if getValue("rssi") > 38 then
   percent = ((math.log(getValue("rssi")-28, 10)-1)/(math.log(72, 10)-1))*100
  else
   percent = 0
  end

  if percent > 90 then
   	lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI10.bmp")
  elseif percent > 80 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI09.bmp")
  elseif percent > 70 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI08.bmp")
  elseif percent > 60 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI07.bmp")
  elseif percent > 50 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI06.bmp")
	elseif percent > 40 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI05.bmp")
  elseif percent > 30 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI04.bmp")
  elseif percent > 20 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI03.bmp")
  elseif percent > 10 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI02.bmp")
  elseif percent > 0 then
		lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI01.bmp")
  else
    lcd.drawPixmap(164, 1, "/SCRIPTS/BMP/RSSI00.bmp")
  end

  lcd.drawChannel(178, 55, 200, LEFT)
  lcd.drawText(lcd.getLastPos(), 56, "dB", SMLSIZE)


end

return { run=run }


Hi Richardoe,

Lua, interessante materie.
Ik heb geen Naze 32 maar een APM2.6
Ben al enige tijd aan 't rommelen met je script maar krijg 't niet aan de praat.
Timer 1 zie ik en werkt, het symbool van de battery zie ik ook en op de onderste regel een V en 0dB.
Als ik m'n APM onder spanning zet, hou ik een blanco blauw scherm over.
Dat Timer 1 (Thr hot) werkt, verbaast me al want ik zie geen variabelen met dezelfde naam in zowel je script als in de software van de Taranis.
Dat maakt mijn verwarring er niet minder op.

getValue("cell-sum")
cell-sum komt uit de Naze32?

v.w.b. de LIPO
Ik heb (uiteraard) een Taranis Tx met een X8R Rx en een FrSky FLVSS LiPo Voltage Sensor (SmartPort).
In de Tx heb ik Cells (som vd voltages van alle cellen) en Cell (waarde van de cel met het laagste voltage) beschikbaar en ik vermoed dat ik die waarden moet gebruiken.
Heb getValue("cell-sum") vervangen door getValue("Cells") of getValue("Cell") maar dat levert niets op.


v.w.b. de RSSI
if getValue("rssi") > 38 then
percent = ((math.log(getValue("rssi") etc.
Zelfde heb ik gedaan met de RSSI, dus getValue("rssi") vervangen door getValue("RSSI Rx"). Helaas...

Zit ik er heel ver naast of is er nog een sprankje hoop voor mij?
 
Hi,

Wat het makkelijkste is om je te helpen is dat je logging enabled in taranis, een minuut zorgt dat alles gearmed is en een paar keer je sticks wat beweegt (kijk uit met props) en dan mij die log stuurt. Ik wil wel even kijken naar de verschillen.

Welke FW zit je open van OPENTX? de oudere versies ondersteunde alleen nrs (dus getaValue("216") bijv voor je voltage.

Zo uit het hoofd mijn gok.
Taranis timer 1 is timer0 in het script.
cell-sum zou ook voor jou moeten werken. is cells in je normale scherm, werkt alleen gearmed, dus zou kunnen dat je hem daardoor niet ziet. en bij armen crashed het script blijkbaar.
pas op met hoofdletters, alles tussen de getValue("xxxxx") moet klein zijn.

kijk even of dit je al wat verder helpt. In companion kan je met simulate het script testen, hoef je niet steeds naar je zender te schrijven.

heb je verder niets aangepast? maw als je het script 1 op 1 erin zet werkt het ook niet?
 
Laatst bewerkt:
even dubbelcheck gedaan, script 1 op 1 gezet in F550 model. daar heb ik ook de x8r en de flvss op zitten en dat werkt. na armen zie ik de battery, rssi, timer. Flightmode is natuurlijk fout.
cell-sum etc zit het dus niet in.

Dus blijft over,
of
je hebt iets aangepast in script.
of
andere Firmware, ik zit op 2.0.8 openTX
of
alle plaatjes erin gezet?

of ik zie iets over het hoofd nu, dus ik zou het script 1 op 1 overnemen en als je dan dingen wilt aanpassen laat t even weten dan wil ik je wel helpen.
 
even dubbelcheck gedaan, script 1 op 1 gezet in F550 model. daar heb ik ook de x8r en de flvss op zitten en dat werkt. na armen zie ik de battery, rssi, timer. Flightmode is natuurlijk fout.
cell-sum etc zit het dus niet in.

Dus blijft over,
of
je hebt iets aangepast in script.
of
andere Firmware, ik zit op 2.0.8 openTX
of
alle plaatjes erin gezet?

of ik zie iets over het hoofd nu, dus ik zou het script 1 op 1 overnemen en als je dan dingen wilt aanpassen laat t even weten dan wil ik je wel helpen.


Nou, das ook wat, ik heb gedaan wat je hierboven zegt en 't werkt inderdaad probleemloos!
Ziet er mooi uit, mijn complimenten!
Kan jij zo uit je mouw schudden hoe ik Timer 2 kan vervangen door Time (dus de klok zeg maar)?
 
mooi dat het werkt:

deze 2 regels vervangen (Niet getest op taranis, dus laat even weten of het werkt svp)

Code:
lcd.drawText(40, 31, "TIMER2", 0)
lcd.drawTimer(40, 41, timer.value, MIDSIZE)
door:
EDIT: ZIE POST 31

Tijd kan je vervangen is gewoon tekst, dus klok of iets is ook goed.
 
Laatst bewerkt:
Humz, op simulator werkt het, maar bij mij op Taranis inderdaad ook niet.

Update gedaan naar versie 2.0.12 en daar ligt het niet aan. ik zoek nog even.
 
nee clock is wel goed, maar snap even niet waarom hij het niet doet. Clock is de RTC tijd, dus wellicht alleen werkzaam met GPS data. Maar dat zou ik wel erg vaag vinden.

Ook als je het als nummer doet gaat het niet goed getValue(190) zonder quotes. vooral omdat de simulator wel netjes de tijd weergeeft daar.

even getest met meest simpele versie van lua (alleen clock) en die doet het al niet. Denk dat dit met GPS werkt.

Code:
local function run(event)

 
lcd.drawTimer(40, 41, getValue("clock"), MIDSIZE)


end

return { run=run }
 
Laatst bewerkt:
Het werkt bij mij nu ook op de zender met onderstaande code. kan blijkbaar niet met timer overweg. Graag even bij jou testen, denk dat het nu goed is.

Dit zijn de 2 goede regels.

Code:
lcd.drawText(40, 31, "Tijd", 0)
lcd.drawChannel(40, 41, (190), MIDSIZE + LEFT)
 
Het werkt bij mij nu ook op de zender met onderstaande code. kan blijkbaar niet met timer overweg. Graag even bij jou testen, denk dat het nu goed is.

Dit zijn de 2 goede regels.

Code:
lcd.drawText(40, 31, "Tijd", 0)
lcd.drawChannel(40, 41, (190), MIDSIZE + LEFT)


Ja, hier werkt 't ook!
Zeer bedankt.
 
He Richard,

Ben vandaag ook even aan de slag gegaan met je scriptje, werkt voor zover ik nu zie perfect! Nog niet vliegend uitgeprobeerd..dat wordt de volgende stap. Het viel me wel op dat je berekening van de spanning van de lipo anders is dan de VFAS (scheelt 1/10e volt) zoals die door de D4R-II naar de taranis wordt gestuurd.
 
ja dat voltage lijkt bij iedereen iets anders te zijn. ik doe daar overigens niets mee, ik beeld 1 op 1 af wat er binnen komt (cell-sum). ik vermoed dat dat iets is met afronding van optelling van de cellen ofzo.

Aangezien je de getallen toch een beetje moet finetunen niet echt een issue, maar vreemd blijft het.

Is overigens simpel op te lossen als je dat wilt door deze regel aan te passen.

Niet getest:

Code:
local batt_sum = getValue("cell-sum")
naar
Code:
local batt_sum = getValue("cell-sum") + 0.1
 
kan ik niet zien ook niet als ik naar foto direct ga.

Dus geen idee, rechten op de foto ofzo? Of zien anderen hem wel?
 
Laatst bewerkt:
Back
Top