Le forum français des radios OpenTX ou FrOS
Le forum français des radios OpenTX ou FrOS
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
-17%
Le deal à ne pas rater :
(Black Friday) Apple watch Apple SE GPS + Cellular 44mm (plusieurs ...
249 € 299 €
Voir le deal

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

2 participants

Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par PierreF Dim 26 Avr 2020 - 14:37

Bonjour à tous. Comme dit dans ma présentation, ce forum et les différente vidéos m'ont permis de bien exploiter la radio de mon gars : x9lite et la mienne xlite, après plusieurs années à voler en Hitec Aurora. Je suis capable de gérer mes phases de vol, fonctions globales, inter logiques, lancer des scripts bref ravi !

J'aimerais pouvoir avoir un script "typé f3k" loisir qui permette d'avoir un timer de temps de vol (cela je gère, il est géré par la télémétrie) et un timer qui enregistre le meilleurs temps de vol. Bien sympa pour se motiver avec mon gars de 12 ans Wink

J'ai voulu utiliser celui ci mais cela ne fonctionne pas  https://frskytaranis.forumactif.org/t7253-resoluf3k-enregistrer-le-meilleur-chrono-avec-2-timers

Je comprends son fonctionnement mais cela bugue le timer2 disparait et ne prend pas la valeur du 1 .

Merci par avance.

Pierre


Dernière édition par PierreF le Sam 13 Juin 2020 - 20:06, édité 1 fois

PierreF

Masculin Messages : 16
Date d'inscription : 25/04/2020
Age : 47
Localisation : Gerponville

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par CoyotteDundee Ven 8 Mai 2020 - 7:24

Hello Pierre,

Selon la doc, il est possible de simplifier le code : (Ceci n'est pas un jugement sur le code original Very Happy )

Code:
local function run()

 local Vol = model.getTimer(0)
 local Ret = model.getTimer(1)
 
 if Vol.value > Ret.value then
 model.setTimer(1, Vol.value)
 end
 
return 0
end
return {run=run}

Tu peux peut-être essayer avec cette version. (Désolé mais avec le covid, je ne suis pas équipé pour tester le code. )

Coyotte

_________________

... the alien anthropologists admitted they were still perplexed.
But on eliminating every other reason for our sad demise, they logged the only explanation left :
This species has amused itself to death...
                                                                                                                                    (R. Waters)

Pas de support par MP ! Nous sommes sur un forum pour échanger publiquement.
CoyotteDundee
CoyotteDundee
Administrateur

Masculin Messages : 5886
Date d'inscription : 03/03/2014
Age : 60
Localisation : Montegnée (Liège)

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par PierreF Ven 8 Mai 2020 - 7:45

Salut.

Merci ! Je vais essayer aujourd'hui. Une autre question, tu afficherais quoi en réglage du timer 2 avant le premier lancement du script ? Off ?

Merci

Pierre

PierreF

Masculin Messages : 16
Date d'inscription : 25/04/2020
Age : 47
Localisation : Gerponville

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par CoyotteDundee Ven 8 Mai 2020 - 8:07

Oui je le laisserais en off.
C'est un timer qui ne doit pas évoluer par lui-même... Il sert juste de mémoire.

Par contre, si tu veux garder le meilleurs temps absolu, c-à-d pour toutes les séances de vol, il faudrait probablement sélectionner "Persistant RAZ manuelle".
D'ailleurs... En regardant la config des timers, je me demande s'il ne faut pas simplement choisir "Persistant (Vol)" pour que le script original fonctionne... A tester.

Coyotte

_________________

... the alien anthropologists admitted they were still perplexed.
But on eliminating every other reason for our sad demise, they logged the only explanation left :
This species has amused itself to death...
                                                                                                                                    (R. Waters)

Pas de support par MP ! Nous sommes sur un forum pour échanger publiquement.
CoyotteDundee
CoyotteDundee
Administrateur

Masculin Messages : 5886
Date d'inscription : 03/03/2014
Age : 60
Localisation : Montegnée (Liège)

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par PierreF Ven 8 Mai 2020 - 18:42

Bon j'ai testé. Toujours le même problème sur la X9lite. Si chrono off il ne s'affiche pas et je ne sais pas si le script marche. Si chrono activé il ne tient pas compte du script Sad

Merci

Peirre

PierreF

Masculin Messages : 16
Date d'inscription : 25/04/2020
Age : 47
Localisation : Gerponville

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par CoyotteDundee Ven 8 Mai 2020 - 18:58

Une petite question : Quand actives-tu le script ? Sur un switch à la fin du vol je suppose ?
Une autre : Où places-tu le script sur la carte SD ? (Je n'ai pas le temps de chercher après ces infos mais je veux bien faire un essai si tu me dis où tu places cela... )

Coyotte

_________________

... the alien anthropologists admitted they were still perplexed.
But on eliminating every other reason for our sad demise, they logged the only explanation left :
This species has amused itself to death...
                                                                                                                                    (R. Waters)

Pas de support par MP ! Nous sommes sur un forum pour échanger publiquement.
CoyotteDundee
CoyotteDundee
Administrateur

Masculin Messages : 5886
Date d'inscription : 03/03/2014
Age : 60
Localisation : Montegnée (Liège)

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par PierreF Ven 8 Mai 2020 - 19:17

Déjà merci pour l'aide Résolu Script 2 timers, un temps de vol et un meilleur temps de vol 2258904616

Alors le script est activé par fonction spéciale et sur on. Je n'ai pas essayé en effet en fin de vol.
Le timer 1 lui est géré par fonction spéciale et inter logic, en fonction alti il s'enclenche et s’arrête, remise à 0 au bout de 230 secondes.

Le script est sur sd, scripts, functions je l'ai appelé record.lua

PierreF

Masculin Messages : 16
Date d'inscription : 25/04/2020
Age : 47
Localisation : Gerponville

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par CoyotteDundee Ven 8 Mai 2020 - 19:57

Ok... Ca marche... (Dans le simulateur s'entend...)
J'ai modifié le code comme suit :

Code:

local function run()

 local Vol = model.getTimer(0)
 local Ret = model.getTimer(1)
 
 if Vol.value > Ret.value then
 Ret.value = Vol.value
 model.setTimer(1, Ret )
 end
 
return 0
end
return {run=run}

Il faut aussi que le Timer2 ne soit pas sur OFF.
Il faut donc une condition qui ne soit jamais vraie afin que le timer ne se modifie pas lui-même.

J'ai donc créé un inter logique L01 (le N° importe peu)
Code:
L01  a<x  MAX 0
MAX valant 100, L01 ne sera jamais vrai.

On associe le Timer2 à L01. Du coup le timer est 'actif'.
Et j'ai configuré Timer 2 en Persistant (RAZ manuelle) .
J'ai mis les deux timers sur la page de télémétrie et hop !

A priori, cela devrait fonctionner chez toi aussi.
Bonne chance,

Coyotte



_________________

... the alien anthropologists admitted they were still perplexed.
But on eliminating every other reason for our sad demise, they logged the only explanation left :
This species has amused itself to death...
                                                                                                                                    (R. Waters)

Pas de support par MP ! Nous sommes sur un forum pour échanger publiquement.
CoyotteDundee
CoyotteDundee
Administrateur

Masculin Messages : 5886
Date d'inscription : 03/03/2014
Age : 60
Localisation : Montegnée (Liège)

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par PierreF Ven 8 Mai 2020 - 20:32

Cela fonctionne ! Merci beaucoup !!!!! Je vole avec mon gars de 12 ans et ce petit challenge en f3k loisir va bien le booster Wink

J'essaierai de voir ce que tu as modifié dans le script pour comprendre un peu, et bravo pour le truc pour mettre le timer 2 en état de fonctionner ! bravo ! Je n'aurais jamais trouvé ......

Du coup j'avais trouvé un petit script typé F3k qui mémorisait les meilleurs lancés ..... ce qui peut être bien motivant, mais il ne marchait pas non plus ....... si tu veux y jeter un coup d'oeil top, si pas l'envie ou le temps je comprends, tu m'as déjà bien aidé Wink

Merci encore

PierreF

Masculin Messages : 16
Date d'inscription : 25/04/2020
Age : 47
Localisation : Gerponville

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par CoyotteDundee Ven 8 Mai 2020 - 20:42

Pour l'explication :
La fonction GetTimer retourne une structure de données qui contient toutes les infos liées au Timer.
(Type, activation, valeur, type de décompte, ... )
La mise à jour du Timer (SetTimer) utilise une structure identique.

Dans le code original, le SetTimer passe une nouvelle structure de données :
{ mode=0, start=0, value=Vol.value, countdownBeep=0, minuteBeep=false, persistent=2 }
Il y a donc un risque de modifier d'autres valeurs que le temps écoulé.

Dans le code modifié, je garde la structure de données du 2eme timer et je me contente de modifier sa valeur 'temp'.
(Dans l'absolu, c'est plus propre. Mais cela ne veut pas dire que le code originel est mal torché Very Happy )

Pour ton autre script, tu peux toujours le poster. Si j'ai le temps, je jetterai un oeil.
Dis-moi juste ce que c'est sensé faire et ce qui ne fonctionne pas.
Bonne soirée,

Coyotte

_________________

... the alien anthropologists admitted they were still perplexed.
But on eliminating every other reason for our sad demise, they logged the only explanation left :
This species has amused itself to death...
                                                                                                                                    (R. Waters)

Pas de support par MP ! Nous sommes sur un forum pour échanger publiquement.
CoyotteDundee
CoyotteDundee
Administrateur

Masculin Messages : 5886
Date d'inscription : 03/03/2014
Age : 60
Localisation : Montegnée (Liège)

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par PierreF Sam 9 Mai 2020 - 14:41

Salut.

C'est ce script :

Code:
--[[
 F3K Launch Tracker

 Telemetry script
 REQUIRES OpenTX 2.1.X

 Detects and measures launch hights
        

 Releases
 1.0 31/10/15 Initial release
 1.1 14/11/15 moved the launch detection to the background
    start dealing with units
 1.2 18/11/15 playNumber now supports 'feet'
 1.3 18/06/18 adapted to OpenTX-2.2.1 + sensitivity adaptation removed

 (C) 2018 Axel Barnitzke
--]]

-- constants (you may change the 's1' pot and/or the 'sf' switch to your needs)
local thr_id    = getFieldInfo('thr').id  -- field index throttle stick (demo)
-- local s1_id     = getFieldInfo('s1').id   -- field index s1 (sensitivity)
local launch_id = getFieldInfo('sf').id  -- field index launch enable switch
local LAUNCH_ENABLED = 1024  -- switch value to enable launch detection
                                         -- (1024 back; -1024 front)
local title    =  "F3K Launch Tracker"
local demo     = false                    -- use throttle stick to simulate hight

-- runtime variables
local altitudes
local alt_id    = 0         -- field index telemetry altitude
local vsp_id    = 0         -- field index telemetry vertical speed
local vMin      = 5         -- launch detected at 5 m/s asc rate
local newTime   = 0
local oldTime   = 0
local status    = 0
local useFeets  = false   -- Use general settings -> Measurement Units = "imperial" for "feet"
                         -- Don't forget to adapt the sensor units to feet
local unit_name = 'm'
local units     = 9      -- the lady says 'meters'
local m2f       = 1.0

-------------------------------------------------------------------------
-- Check if vario is enabled in telemetry section
-------------------------------------------------------------------------
local function initVariometer()
 if( getFieldInfo('VSpd') == nil ) then
   title = 'Error in Telemtry!'
 else
   alt_id = getFieldInfo('Alt').id
   vsp_id = getFieldInfo('VSpd').id
 end
end

-------------------------------------------------------------------------
-- make the launch detection variable
-------------------------------------------------------------------------
local function adjustLaunchDetection()
 -- vMin = 5 m/s  +/- 3 m/s
 -- return  (5.0 + (3.0/1024.0 * getValue(s1_id))) * m2f
 return  (5.0 * m2f)
end

-------------------------------------------------------------------------
-- get altitude from variometer (or throttle stick for testing purposes)
-------------------------------------------------------------------------
local function getAlt()
 if(demo) then
   local alt
   -- get altitude from throttle
   alt = (getValue(thr_id) + 1024 ) * 100.0 / 2048.0 -- 0m until 100m
   return (alt * m2f)
 else
   -- get altitude from variometer
   return getValue(alt_id)
 end
end

-------------------------------------------------------------------------
-- demo: compute vertical speed by comparing current height against last height
-------------------------------------------------------------------------
local newAlt = 0.0
local oldAlt = 0.0
local doldTime = 0
local dnewTime = 0
local deltaAlt

local function demoVspeed()
 local vsp
  dnewTime = getTime()
  newAlt  = getAlt()
  if(oldAlt == 0.0) then
    oldAlt  = newAlt
  end
  deltaAlt = newAlt - oldAlt
  vsp = deltaAlt / (dnewTime - doldTime)
  oldAlt = newAlt
  doldTime = dnewTime
  return vsp * 10.0
end

-------------------------------------------------------------------------
-- return variometer Vspd value
-------------------------------------------------------------------------
local function getVspeed()
 if (demo) then
   -- in demo mode the vertical speed needs some computation
   return demoVspeed() * m2f
 else
   return getValue(vsp_id)
 end
end

-------------------------------------------------------------------------
-- draw last 6 altitues on the right side of the screen
-------------------------------------------------------------------------
local function drawAltitudes()
 for i=1,6 do
   altitudes.draw( 175, 9*(i-1)+5, i, PREC2 + LEFT)
 end
end

-------------------------------------------------------------------------
-- draw the frame to add values
-------------------------------------------------------------------------
local function drawFrame()
 lcd.drawLine( 0, 47, 159, 47, SOLID, 2 )
 lcd.drawLine( 159, 0, 159, 63, SOLID, 2 )
 lcd.drawText( 10, 50, title, MIDSIZE)
 lcd.drawNumber( lcd.getLastPos() + 9 , 54, status, 0) -- debug
end

-------------------------------------------------------------------------
-- draw a BIG actual altitude in the center of the screen
-------------------------------------------------------------------------
local function drawAltitude()
 local alt = getAlt()
 lcd.drawNumber( 24, 4, 10.0 * alt, PREC1 + XXLSIZE + LEFT)
 lcd.drawText( lcd.getLastPos(), 4, unit_name, DBLSIZE)
end

-------------------------------------------------------------------------
-- background (periodically called when custom telemetry screen is not visible)
-------------------------------------------------------------------------
local function background( event )
 -----------------------------------------------------------------------
 -- the launch tracker state machine
 -----------------------------------------------------------------------
 if status == 10 then
   -- loop enabled: prepare launch detection
   -- I think 5 m/s is a good value -> no need to make it variable
   vMin    = adjustLaunchDetection()
   status  = 20
 elseif status == 20 then
   -- detect a launch
   if(getVspeed() >= vMin) then
     oldTime = getTime()
     status = 30
   end
 elseif status == 30 then
   -- wait 500ms
   if ((getTime() - oldTime) >= 50) then
     status = 32
   end
 elseif status == 32 then
   -- launched: now detect maximum in launch curve
   if(getVspeed() <= 0.1 ) then
     -- maximum reached
     oldTime = getTime()
     status = 40
   end
 elseif status == 40 then
   -- wait 100ms (a vario is not that fast)
   if ((getTime() - oldTime) >= 10) then
     status = 42
   end
 elseif status == 42 then
   -- get max height
   local maxAlt = getAlt()
   -- (TBD: F3B wait for a second maximum before disable launch mode)
   altitudes.push(maxAlt)
   playNumber( 10.0 * maxAlt, units, PREC1 )
   status = 0
 else
   -- wait for launch detection to be enabled
   if (getValue(launch_id) == LAUNCH_ENABLED) then
     status  = 10
   end
 end
end

-------------------------------------------------------------------------
-- run (periodically called when custom telemetry screen is visible)
-------------------------------------------------------------------------
local function run(event)
 -- call background functionality
 background(event)

 -- draw screen
 lcd.clear()
 drawFrame()
 drawAltitude()
 drawAltitudes()
 
end

-------------------------------------------------------------------------
-- create a stacked display
-------------------------------------------------------------------------
local function numericStack( s )
 local tab = {}
 local size

 -- called by constructor
 local function initialize( s )
   size = s
   for i=1,size do
     tab[ i ] = 0.0
   end
 end

 -- stacks nums, discarding the older values
 local function push( a )
   for i=2,size do
     tab[ i-1 ] = tab[ i ]
   end
   tab[size] = a
 end

 -- get one num
 local function get( i )
   if( i > size) then i = size end
   return tab[ i ]
 end

 -- clean stack
 local function reset()
   initialize( size )
 end

 -- draw num
 local function draw( x, y, i, att )
   local val = tab[ i ]
   if val > 0.0 then
     lcd.drawNumber( x, y, 100.0 * val, att )
   else
     lcd.drawText( x, y, "-----", att + LEFT)
   end
 end

 -- constructor
 initialize( s )

 return { push=push, get=get, reset=reset, draw=draw }
end


-------------------------------------------------------------------------
-- init (the script init function)
-------------------------------------------------------------------------
local function init()
 initVariometer()
 if (getGeneralSettings().imperial > 0) then
   useFeets  = true
   unit_name = 'ft'
   units     = 10      -- the lady says 'feet'
   m2f       = 3.28
 end
 altitudes = numericStack(6)
end

return { init=init, background=background, run=run }


[b]Je me suis penché dessus , et j'ai compris que le problème venait de la résolution de l'écran plus petite. J'ai donc fait des changements en testant et cela marche :)
J'ai juste un défaut esthétique en début de cycle (photo[/b])

[b]Mes différences, mais je je vois pas ou modifier la place des petits pointillés
[/b]-------------------------------------------------------------------------
-- draw last 6 altitues on the right side of the screen
-------------------------------------------------------------------------
local function drawAltitudes()
 for i=1,6 do
   altitudes.draw( 100, 9*(i-1)+5, i, PREC2 + LEFT)
 end
end

-------------------------------------------------------------------------
-- draw the frame to add values
-------------------------------------------------------------------------
local function drawFrame()
 lcd.drawText( 1, 57, title, smallSIZE)
end

-------------------------------------------------------------------------
-- draw a BIG actual altitude in the center of the screen
-------------------------------------------------------------------------
local function drawAltitude()
 local alt = getAlt()
 lcd.drawNumber( 1, 4, 10.0 * alt, PREC1 + XXLSIZE + LEFT)
 lcd.drawText( lcd.getLastPos(), 4, unit_name, DBLSIZESIZE)
end

PierreF

Masculin Messages : 16
Date d'inscription : 25/04/2020
Age : 47
Localisation : Gerponville

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par PierreF Sam 9 Mai 2020 - 14:44

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Downlo10

PierreF

Masculin Messages : 16
Date d'inscription : 25/04/2020
Age : 47
Localisation : Gerponville

Revenir en haut Aller en bas

Résolu Script 2 timers, un temps de vol et un meilleur temps de vol Empty Re: Résolu Script 2 timers, un temps de vol et un meilleur temps de vol

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum