F3News Le forum du planeur radiocommandé catégorie F3x |
|
| *** FR-SKY TARANIS *** Mega thread | |
|
+29Thierry SIMON gregoire72 Matthias Didier MORVIN jb verrier arno sourisse JLucP sylvain gilles13 R. Dubois Sebastien_152 Jerome39 Marc PUJOL Michel on4mj Deguelle J-Bastien frank Laurent maume gilles patrick_83 basile ginel pierre meunier 39 ced_toulouse stefmog patrick Z. Boulanger Yanick Nicolas C Fred fl BenjaminB Christophe Bourdon 33 participants | |
Auteur | Message |
---|
Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Lun 13 Oct 2014 - 15:52 | |
| Bon, je n'ai peut-être pas expliqué assez comment ça fonctionne. Pour les timers:
- "Total" affiche le temps de travail.
Le temps de travail (temps de vol en même temps, je n'ai pas fait de distinction ici) démarre quand les gaz passent le seuil défini par THROTTLE_MINI (qui correspond au minimum sur cette voie).
- "Engine" affiche le temps moteur. Ce timer s'arrête quand la voie des gaz repasse sous le seuil THROTTLE_MINI.
- "Glide" affiche le temps écoulé depuis la coupure moteur. Donc, Engine + Glide = le temps de vol (si tu ajoutes ça au "total", tu dois obtenir 10 min).
Le switchAu posé, ou à la fin du temps de travail (j'ai laissé filer le timer après l'expiration des 10 min pour pouvoir voir de combien on déborde) on peut arrêter le timing en ramenant le switch F vers soi. Ce switch n'est cependant pris en compte qu'après 10s de plané (ou en cas de vol invalide). Lorsque on veut remettre tout à zéro, on repousse SF, et tout est réinitialisé. Les altitudes :
- "Alt Cut" est l'altitude au coupé du moteur.
- "Alt 10s" est l'altitude 10s plus tard.
- "Alt Max" est l'altitude max du vol.
Les annonces vocales :Le script utilise la directory pour les voix en anglais. Si tu veux changer, il faut mettre SOUND_PATH avec 'FR' au lieu de 'EN' (j'ai jamais mis ma radio en français, donc je ne sais pas ce qui est dispo comme sons dans cette langue). J'ai mis une fonction "vocalEnabled()" qui permettrait de désactiver les sons, mais pour l'instant, elle retourne toujours qu'ils sont actifs. Il y a le décompte vocal par minute et pour les 10 dernières secondes si tu as configuré ton timer comme je l'ai mis dans ma capture d'écran (et si tu as le package son qui va bien, sinon, c'est des bips à la fin). Il est possible d'ajouter un son "badflight.wav" pour avoir l'annonce vocale du vol non valide (faire un fichier avec un programme de text to speech ou utiliser un son genre "Meuh!" ). Les altitudes au coupé de moteur et 10s après sont annoncées. =========================================== Ca, c'est la théorie. Donc, ton switch E, il fait quoi ? Parce que dans mon script, il n'est pas utilisé du tout. Je ne pige pas trop, puisque tu dis plus loin que ton moteur est sur SD ? Ou je n'ai rien compris Si c'est ton moteur (coupé, mi-vitesse, full, dans cet ordre), il doit démarrer le timing du vol dès que tu sors de "coupé" et arrêter le timing moteur dés que tu reviens sur "coupé". Si tu as le coupé au milieu, ça ne permet pas d'utiliser la mi-vitesse avec le script sans avoir des vols invalides (puisque ça coupe le moteur entre les deux). -- Pour la coupure auto du moteur et le réarmement, de la façon dont je veux le faire dans une prochaine révision, l'inter de réarmement ne sera pas géré par le script, mais par un mix (c'est plus sûr en cas de plantage du script). C'est-à-dire que je compte alimenter une GV avec un pourcentage (0% ou 100%). A chacun ensuite de l'utiliser comme il veut dans son mix moteur. Si tu as un autre alti qui gère déjà la coupure moteur, évidemment, il ne faut rien mixer du tout. =========================================== Pour tes autres demandes, tu veux que je change - le timer "glide" pour afficher le temps de vol y compris le temps moteur, c'est ça ? (en gros, c'est 10min - le timer1)
- l'annonce vocale du temps de moteur ? (attention que ça va se passer juste avant ou juste après l'altitude de "lâcher").
- l'annonce vocale du temps de vol ? (mais évidemment, ça dépend fort du moment où on coupe SF)
? | |
| | | maume gilles pilote d'or
Nombre de messages : 640 Localisation : 13 Date d'inscription : 16/12/2007
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Lun 13 Oct 2014 - 17:36 | |
| Michel, Sur mon prog le switch E contrôle l'alti vario ( haute précision frsky) il agit sur ton scrip sur le temps ENGINE et GLIDE??? Voila la partie de mon programme ou il apparait . Le moteur est commandé par SD SD bas moteur arrêté SD milieu mi gaz selon courbe SD haut full régime selon courbe Pour le temps GLIDE / il doit afficher le temps de vol du planeur cad de là mise en route du moteur jusqu'au posé ou la fin du temps de travail . Je pense que le swicht F quand il est vers nous devrait arrêter Glide et Total et quand tu pousse F vers le bas RAZ de tout . Annonce vocale / J'ai bien les annonces altitudes: a la coupure du moteur et 10 sec après ( en français ) par contre pas d'annonce du TOTAL qui est le temps de travail restant . pas d'annonce non plus pour vol nul . Je vais essayer de voir ce qui ne va pas sur les annonces audio Faut pas allé trop vite Pour l'instant je pense que le temps GLIDE et les actions de F doivent être modifiés Gilles | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Lun 13 Oct 2014 - 18:05 | |
| Tu ne sais pas poster ton fichier eepe quelque part ? Parce que ta config de vario, je ne vois pas comment elle pourrait influencer sur le script (ou alors il y a un méchant bug dans le firmware quelque part). J'ai une config similaire sur les miens. Avoir ton eepe me permettrait de regarder ça de plus près.
Le switch F est supposé faire ce que tu décris !
Le total, si tu as configuré le timer comme je l'avais mis dans ma capture dans un message précédent, il doit être annoncé toutes les minutes (et plus de détails dans la dernière minute). Ce n'est pas lié au script.
L'annonce pour vol nul, j'ai pris un nom de fichier arbitraire. Donc, il faut que tu mettes ce fichier sur la carte SD (voir mon msg précédent).
Au fait, ça n'a rien à voir, mais FrSky vient de publier une màj de firmware pour les varios produits depuis avril 2014 (problème de précision pour l'altitude). | |
| | | maume gilles pilote d'or
Nombre de messages : 640 Localisation : 13 Date d'inscription : 16/12/2007
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Lun 13 Oct 2014 - 18:19 | |
| J'ai mis un son pour le vol nul . Mais toujours pas d'annonces du temps total?
Pour, l'annonce du temps moteur en live .
S'est une annonce très importante , il suffit de compter en temps (en sec) réel jusqu'au moment ou l'on arrête le moteur : 1, 2 ,3 , 4 ........ , . Comme cela en fonction de l'alt, du temps moteur restant et si on a trouvé ou pas une pompe on peu remettre plein gaz pour prendre un max d'alt ou arrêter le moteur en exploitant ce que l'on a trouvé.
après les annonces altitudes prennent le relais
Gilles | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Lun 13 Oct 2014 - 19:45 | |
| Ok, petites modifs dans le script pour 1/ Afficher le temps de vol plutôt que le temps plané ; 2/ décompter le temps moteur plutôt que de le compter (permet d'avoir les annonces vocales). Donc, pareil, pour le décompte, voici la config de timer à mettre : avec le pack son "amber", ça donne "twenty seconds", puis "ten, nine, eight" ... "one, zero". Et le script : - Code:
-
--[[ LUA telemetry script for F5J training
Displays the altitude at engine cut-off, 10s after that, and max reached during the flight Displays the remaining work time, remaining engine time and the flight time
If the engine is used more that 30s or twice in the same flight, the flight is declared invalid (a badflight.wav file can be used to signal this with audio)
Switch F is used to signal the end of the flight and stop the timers (up) then reset everything (down)
Customization (look for numbers in the code): (1) CH1 is used for the throttle (2) The value where the throttle is meant to be active (defaults to -1024) (3) Switch F is used to end (up) then reset (down) the flight (4) Language for the sounds (for the texts, change the texts in the drawDashboard() and drawFault() functions)
Mike, ON4MJ --]]
-- -- Timer class -- (this is generic, and will have to be modified in 2.0.13+ where the setTimer() bug is fixed) -- Precondition: timerId is either 0 or 1 -- local function createTimer( timerId, startValue ) local id = timerId local timer = model.getTimer( id )
local function setTimerWA() -- work-around for the difference in parameters of setTimer() compared to the return of getTimer() local t = { mode=timer.mode, start=timer.start, value=timer.value, countdownBeep=timer.countdownBeep, minuteBeep = timer.minuteBeep and 1 or 0, persistent = timer.persistent and 1 or 0 } model.setTimer( id, t ) end
local function getVal() timer.value = model.getTimer( id ).value return timer.value end
local function start() timer.mode = 1 setTimerWA() end
local function stop() timer = model.getTimer( id ) timer.mode = 0 setTimerWA() return timer.value end
local function reset() timer.value = timer.start setTimerWA() end
local function draw( x, y, att ) local val = getVal() lcd.drawTimer( x, y, val, att ) return val end
if startValue then timer.start = startValue reset() end
return { start = start, stop = stop, reset = reset, draw = draw, getVal = getVal } end
-- F5J stuff
local SOUND_PATH = '/SOUNDS/EN/' -- (4)
local THROTTLE_MIN = -1020 -- (2) (normally -1024) local THR = getFieldInfo( 'ch1' ).id -- (1) local ALT = getFieldInfo( 'altitude' ).id local SF = getFieldInfo( 'sf' ).id -- (3)
local alt = 0 local alt10 = 0 local max = 0 local state = 1 -- 1=reset; 2=launch; 3=cutoff; 4=glide; 5=landed; 6=disqualify
local timer1 = createTimer( 0, 600 ) -- flight time local timer2 = createTimer( 1, 30 ) -- engine time local time3 = 0
local function vocalEnabled() return true end
local function handleMax() local a = getValue( ALT ) if a > max then max = a end return a end
local function disqualify() if vocalEnabled() then playFile( SOUND_PATH .. 'badflight.wav' ) end timer2.stop() timer1.stop() state = 6 end
local function checkThrottle() if getValue( THR ) > THROTTLE_MIN then disqualify() end end
local function checkReset() if getValue( SF ) < 0 then timer2.stop() timer1.stop() timer2.reset() timer1.reset() time3 = 0
alt = 0 alt10 = 0 max = 0
state = 1 return true end return false end
local function checkEnd() return (getValue( SF ) > 0) end
-- state transition functions
local function resetState() -- wait for take-off if getValue( THR ) > THROTTLE_MIN then timer2.start() timer1.start() state = 2 end end
local function launchState() -- wait for the motor cut if getValue( THR ) <= THROTTLE_MIN then timer2.stop() alt = getValue( ALT ) max = alt if vocalEnabled() then playNumber( alt, 6, 0 ) end state = 3 elseif timer2.getVal() < 0 then disqualify() end end
local function cutoffState() local a = handleMax()
-- wait for the 10s end if (time3 - (30 - timer2.getVal())) >= 10 then alt10 = a if vocalEnabled() then playNumber( alt10, 6, 0 ) end state = 4 else checkThrottle() end end
local function glideState() handleMax()
-- wait for the end of flight if checkEnd() then timer2.stop() timer1.stop() state = 5 else checkThrottle() end end
local function landedState() -- wait for reset checkReset() end
local function disqualifyState() -- wait for end if checkEnd() then state = 5 end end
local functions = { resetState, launchState, cutoffState, glideState, landedState, disqualifyState }
function background() time3 = 600 - timer1.getVal() functions[ state ]() end
local function drawDashboard() lcd.drawFilledRectangle( 0, 23, 212, 18, 0 )
lcd.drawText( 4, 4, "Alt cut:", MIDSIZE ) lcd.drawNumber( 64, 4, alt, MIDSIZE+LEFT ) lcd.drawText( lcd.getLastPos(), 4, "m", 0 )
lcd.drawText( 4, 26, "Alt 10s:", MIDSIZE+INVERS ) lcd.drawNumber( 64, 26, alt10, MIDSIZE+LEFT+INVERS ) lcd.drawText( lcd.getLastPos(), 26, "m", INVERS ) lcd.drawText( 4, 48, "Alt max:", MIDSIZE ) lcd.drawNumber( 64, 48, max, MIDSIZE+LEFT ) lcd.drawText( lcd.getLastPos(), 48, "m", 0 ) lcd.drawText( 120, 4, "Work:", MIDSIZE ) timer1.draw( 174, 4, MIDSIZE )
lcd.drawText( 120, 26, "Engine:", MIDSIZE+INVERS ) timer2.draw( 174, 26, MIDSIZE+INVERS )
lcd.drawText( 120, 48, "Flight:", MIDSIZE ) lcd.drawTimer( 174, 48, time3, MIDSIZE ) end
local function drawFault() lcd.drawRectangle( 4, 4, 204, 56 ) lcd.drawText( 40, 25, "INVALID FLIGHT", DBLSIZE+BLINK ) end
local function run() background()
if state < 6 then drawDashboard() else drawFault() end end
return {background=background, run=run} | |
| | | Marc PUJOL pilote d'or
Nombre de messages : 2394 Age : 60 Localisation : Essonnes Date d'inscription : 21/07/2009
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Lun 13 Oct 2014 - 21:18 | |
| Mets aussi un compteur de 10 secondes après la coupure moteur pour signaler au pilote que pendant ce temps il ne faut pas qu'il prenne de trop l'ascendance... Marc | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Lun 13 Oct 2014 - 23:37 | |
| - Marc PUJOL a écrit:
- Mets aussi un compteur de 10 secondes après la coupure moteur pour signaler au pilote que pendant ce temps il ne faut pas qu'il prenne de trop l'ascendance...
Ben, c'est la version concours, alors Parce que là, avec la télémétrie, pas besoin. A la fin des dix secondes, on est averti par la 2e lecture d'altitude. (en fait, même sans vario, on aura juste une lecture "0 meters" à la fin des dix secondes). | |
| | | maume gilles pilote d'or
Nombre de messages : 640 Localisation : 13 Date d'inscription : 16/12/2007
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Mar 14 Oct 2014 - 11:01 | |
| Michel, J'ai résolu les pb d'annonces cela venait d'un raz d'un compteur du progr du planeur . Le premier script fonctionne . J'ai installé la dernière version , sur cette dernière version il y a un pb . Mise en marche du moteur , ok tout les temps démarrent ok , annonce a rebours du temps moteur, ok arrêt du moteur, annonce alt ok 10sec après annonce alt ok , a ce moment précis tout les temps se fige ! As tu le même pb? Gilles | |
| | | maume gilles pilote d'or
Nombre de messages : 640 Localisation : 13 Date d'inscription : 16/12/2007
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Mar 14 Oct 2014 - 13:04 | |
| Michel
En fait il n'y a pas de pb, cela fonctionne parfaitement. je laissais le switch F dans la mauvaise position.
Demain je fais les essais en vol , je te tiens au courant
Encore merci
Gilles | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Mar 14 Oct 2014 - 20:12 | |
| - maume gilles a écrit:
- En fait il n'y a pas de pb, cela fonctionne parfaitement.
Ca me rassure ! Merci pour le feedback | |
| | | maume gilles pilote d'or
Nombre de messages : 640 Localisation : 13 Date d'inscription : 16/12/2007
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Mer 15 Oct 2014 - 14:52 | |
| Michel, Je viens de faire une petite séance . Mes premières impressions sont très bonne . Naturellement dans quelques semaines mon jugement sera plus juste . bien / affichage super valeurs affichées super annonce alt arrêt moteur ok annonce alt arrêt moteur + 10 sec ok fonctionnement de la page avec le switch F OK moyen / compte a rebours moteur pas assez précis il manquerait d'annoncer les 15sec pas bien / J'ai constaté a plusieurs reprise un bug d'un script surement du a une mauvaise utilisation de switch F . Par exemple quand tu veux arrêter le vol avant les annonces alt ?? Une fois le script désynchronisé j'ai mis un moment a revenir a la normale . Plus d'info a ce sujet après que j'aurais fait plus d'essai . Gilles | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Mer 15 Oct 2014 - 15:05 | |
| - maume gilles a écrit:
moyen / compte a rebours moteur pas assez précis il manquerait d'annoncer les 15sec
Malheureusement, ce n'est pas lié au script, c'est le firmware de la Taranis qui est comme ça. Si tu programmes à la main un timer avec décompte vocal dans un autre modèle, tu auras exactement le même résultat. - Citation :
pas bien / J'ai constaté a plusieurs reprise un bug d'un script surement du a une mauvaise utilisation de switch F . Par exemple quand tu veux arrêter le vol avant les annonces alt ?? Une fois le script désynchronisé j'ai mis un moment a revenir a la normale . Plus d'info a ce sujet après que j'aurais fait plus d'essai .
Oui, je sais, ce n'est pas un bug, c'est supposé fonctionner comme ça. C'est d'ailleurs documenté C'est possible de le changer, ça complique juste un peu le script. Je vais essayer de faire ça un de ces soirs. | |
| | | maume gilles pilote d'or
Nombre de messages : 640 Localisation : 13 Date d'inscription : 16/12/2007
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Mer 15 Oct 2014 - 17:10 | |
| Michel,
Merci pour ce script . J'avais demandé un 2cv et tu nous proposes une Ferrari .
Il y a aussi la coupure du moteur automatique au bout de 30 sec a réfléchir .
Pour l'instant je coupe le moteur quand j'attends 29 sec ce qui est pas si mal que ça en fait .
Peu être faut il attendre que cela décante un peu avant de revoir le script , il n'y a rien qui presse .
Quand le script déconne, cela affecte les annonces surtout celle du moteur , parfois aussi les différents timer . Quand ça déconne je ne sais plus comment doit être positionné l'inter F. Ce qui rend plus long un retour a la normale.
Merci
Gilles | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Mer 15 Oct 2014 - 17:20 | |
| Je vais le changer. Mais en gros, pour l'instant, si tu te mets dans une situation où tu es perdu, il faut laisser passer les 10s après la coupure moteur. Ensuite, tu peux tirer l'inter pour arrêter les timers et le repousser pour faire une RAZ. Si tu chipotes à l'inter avec le moteur qui tourne ou avant l'expiration des dix secondes, ça fait des trucs prévisibles, mais il faut connaître la logique du script. En gros, si tu tires l'inter avant, et que tu le laisses dans cette position, tout va s'arrêter quand les 10s sont passées (c'est le phénomène que tu avais avant et que tu as fini par diagnostiquer tout seul). Si tu fais aller l'inter dans tous les sens, ça n'aide pas. Il faut juste te ramener dans une situation connue (en gros, il suffit d'attendre) et ça repart normalement. Mais bon, je vais arranger ça, ça sera moins perturbant. (Merci pour le commentaire Ferrari ) | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Jeu 16 Oct 2014 - 20:13 | |
| Ok, en avant pour la V3... On peut maintenant chipoter le switch d'arrêt/RAZ dans toutes les phases du programme, et le résultat ne devrait plus perturber l'utilisateur. J'en ai profité pour améliorer un poil la gestion de la détection de coupure des gaz. J'imagine que vous avez tous ça sur un switch, mais pour mes tests, je l'avais mis sur le manche de gaz, et sur le crantage, j'avais parfois un petit retour en arrière, qui me générait un vol non valide alors que c'était juste la mise des gaz qui tremblait un peu (je ne suis sans doute pas très clair, mais je me comprends, c'est l'essentiel ). - Code:
-
--[[ LUA telemetry script for F5J training
Displays the altitude at engine cut-off, 10s after that, and max reached during the flight Displays the remaining work time, remaining engine time and the flight time
If the engine is used more that 30s or twice in the same flight, the flight is declared invalid (a badflight.wav file can be used to signal this with audio)
Switch F is used to signal the end of the flight and stop the timers (up) then reset everything (down)
Customization (look for numbers in the code): (1) CH1 is used for the throttle (2) The value where the throttle is meant to be active (defaults to -1024) (3) Switch F is used to end (up) then reset (down) the flight (4) Language for the sounds (for the texts, change the texts in the drawDashboard() and drawFault() functions)
Mike, ON4MJ --]]
-- -- Timer class -- (this is generic, and will have to be modified in 2.0.13+ where the setTimer() bug is fixed) -- Precondition: timerId is either 0 or 1 -- local function createTimer( timerId, startValue ) local id = timerId local timer = model.getTimer( id )
local function setTimerWA() -- work-around for the difference in parameters of setTimer() compared to the return of getTimer() local t = { mode=timer.mode, start=timer.start, value=timer.value, countdownBeep=timer.countdownBeep, minuteBeep = timer.minuteBeep and 1 or 0, persistent = timer.persistent and 1 or 0 } model.setTimer( id, t ) end
local function getVal() timer.value = model.getTimer( id ).value return timer.value end
local function start() timer.mode = 1 setTimerWA() end
local function stop() timer = model.getTimer( id ) timer.mode = 0 setTimerWA() return timer.value end
local function reset() timer.value = timer.start setTimerWA() end
local function draw( x, y, att ) local val = getVal() lcd.drawTimer( x, y, val, att ) return val end
if startValue then timer.start = startValue reset() end
return { start = start, stop = stop, reset = reset, draw = draw, getVal = getVal } end
-- F5J stuff
local SOUND_PATH = '/SOUNDS/EN/' -- (4)
local THROTTLE_MIN = -1020 -- (2) (normally -1024) local THR = getFieldInfo( 'ch1' ).id -- (1) local ALT = getFieldInfo( 'altitude' ).id local SF = getFieldInfo( 'sf' ).id -- (3)
local alt = 0 local alt10 = 0 local max = 0 local state = 1 -- 1=reset; 2=launch; 3=cutoff; 4=glide; 5=landed; 6=disqualify
local timer1 = createTimer( 0, 600 ) -- flight time local timer2 = createTimer( 1, 30 ) -- engine time local time3 = 0
local THROTTLE_MIN_HYSTERESIS = THROTTLE_MIN + 4
local function vocalEnabled() return true end
local function handleMax() local a = getValue( ALT ) if a > max then max = a end return a end
local function disqualify() if vocalEnabled() then playFile( SOUND_PATH .. 'badflight.wav' ) end timer2.stop() timer1.stop() state = 6 end
local function checkThrottle() if getValue( THR ) > THROTTLE_MIN_HYSTERESIS then disqualify() end end
local function checkReset() if getValue( SF ) < 0 then timer2.stop() timer1.stop() timer2.reset() timer1.reset() time3 = 0
alt = 0 alt10 = 0 max = 0
state = 1 return true end return false end
local function checkEnd() return (getValue( SF ) > 0) end
local function goToLandedState() timer2.stop() timer1.stop() state = 5 end
-- state transition functions
local function resetState() -- wait for take-off if getValue( THR ) > THROTTLE_MIN_HYSTERESIS then timer2.start() timer1.start() state = 2 end end
local function launchState() -- wait for the motor cut if checkEnd() then goToLandedState() elseif getValue( THR ) <= THROTTLE_MIN then timer2.stop() alt = getValue( ALT ) max = alt if vocalEnabled() then playNumber( alt, 6, 0 ) end state = 3 elseif timer2.getVal() < 0 then disqualify() end end
local function cutoffState() local a = handleMax()
if checkEnd() then goToLandedState() else -- wait for the 10s end if (time3 - (30 - timer2.getVal())) >= 10 then alt10 = a if vocalEnabled() then playNumber( alt10, 6, 0 ) end state = 4 else checkThrottle() end end end
local function glideState() handleMax()
-- wait for the end of flight if checkEnd() then goToLandedState() else checkThrottle() end end
local function landedState() -- wait for reset checkReset() end
local function disqualifyState() -- wait for end if checkEnd() then state = 5 end end
local functions = { resetState, launchState, cutoffState, glideState, landedState, disqualifyState }
function background() time3 = 600 - timer1.getVal() functions[ state ]() end
local function drawDashboard() lcd.drawFilledRectangle( 0, 23, 212, 18, 0 )
lcd.drawText( 4, 4, "Alt cut:", MIDSIZE ) lcd.drawNumber( 64, 4, alt, MIDSIZE+LEFT ) lcd.drawText( lcd.getLastPos(), 4, "m", 0 )
lcd.drawText( 4, 26, "Alt 10s:", MIDSIZE+INVERS ) lcd.drawNumber( 64, 26, alt10, MIDSIZE+LEFT+INVERS ) lcd.drawText( lcd.getLastPos(), 26, "m", INVERS ) lcd.drawText( 4, 48, "Alt max:", MIDSIZE ) lcd.drawNumber( 64, 48, max, MIDSIZE+LEFT ) lcd.drawText( lcd.getLastPos(), 48, "m", 0 ) lcd.drawText( 120, 4, "Work:", MIDSIZE ) timer1.draw( 174, 4, MIDSIZE )
lcd.drawText( 120, 26, "Engine:", MIDSIZE+INVERS ) timer2.draw( 174, 26, MIDSIZE+INVERS )
lcd.drawText( 120, 48, "Flight:", MIDSIZE ) lcd.drawTimer( 174, 48, time3, MIDSIZE ) end
local function drawFault() lcd.drawRectangle( 4, 4, 204, 56 ) lcd.drawText( 40, 25, "INVALID FLIGHT", DBLSIZE+BLINK ) end
local function run() background()
if state < 6 then drawDashboard() else drawFault() end end
return {background=background, run=run} Si le feedback est positif, je le mettrai sur RCsettings, et puis je vais réfléchir à un truc qui pourrait servir dans les tasks F3K. Ca sera nettement plus comique | |
| | | maume gilles pilote d'or
Nombre de messages : 640 Localisation : 13 Date d'inscription : 16/12/2007
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Jeu 16 Oct 2014 - 20:27 | |
| Michel,
J'ai encore testé le script v2 aujourd'hui. Aucun pb en faisant attention . Arrêt du moteur quand j'entends 1 sec . J'essaye de teste la v3 demain sinon ce WE .
Pour ton futur script f3k cela m’intéresse aussi . Que comptes tu faire?
Gilles | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Jeu 16 Oct 2014 - 20:35 | |
| Essayer d'émuler un bon chronomètreur Je n'ai pas encore d'idée précise (à part pour la sélection des tâches), mais jusque ici, j'avais envisagé les scripts de télémétrie uniquement sous l'angle de la... télémétrie (sic!). Mais c'est clair qu'on peut les utiliser pour faire de la gestion de chronométrage. C'est ce que j'aurais retenu de ce petit projet F5J | |
| | | BenjaminB pilote d'or
Nombre de messages : 2209 Age : 52 Localisation : Barcelona Date d'inscription : 31/08/2009
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Jeu 16 Oct 2014 - 21:05 | |
| pour le F3K, il y a des trucs interessants a faire pour l'entrainement. lancer une tache specifique (et donc le chrono de 10 ou 7 min), puis memoriser les vols. le probleme est de trouver l'astuce pour declencher et arreter le chrono a peut pret au bon moment. pour ceux qui ont in inter monostable pour le preset, c'est deja ca de gagné. mais il reste a valider correctement la fin d'un vol (surtout dans le cas d'un ratrapé/lancé) pour la compet et l'entrainement: on est vite limité vu qu'il n'y a que 2 chronos. c'est toujours sympa d'avoir le temps ecoulé depuis le debut de la manche, et celui qu'il reste pareil pour le vol en cours (temps ecoulé) et combien il reste pour la cible... se sont des details, mais lors d'un poker, par exemple, on a pas toujours la valeur exacte du temps restant pour faire au mieux pour le dernier pari. (vu qu'en theorie on n'a pas le droit de dire au juge je prends le temps qu'il reste! ) ce sont des pistes... | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Jeu 16 Oct 2014 - 22:13 | |
| L'idée générale (mais je dois encore affiner), c'est d'utiliser un des timers pour le temps de travail et l'autre pour chaque vol. C'est sûr que ça sera de l'à peu près avec le switch de launch. En mémorisant chaque temps de vol, et avec un peu d'arithmétique, on peut en effet apporter une aide à la décision (et éviter les âneries dans le feu de l'action). C'est en tout cas le but recherché. Mais bon, il faut que je mette tout ça à plat. Ce script-ci, il ne va pas s'écrire en une demi-heure de temps, c'est sûr. | |
| | | maume gilles pilote d'or
Nombre de messages : 640 Localisation : 13 Date d'inscription : 16/12/2007
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Jeu 16 Oct 2014 - 22:39 | |
| Michel
L’objectif est de pouvoir s'entrainer seul mais surtout de faire des joutes a 2, 3 ... Dans ce dernier cas un résultat est nécessaire pour définir rapidement celui qui a brillé .
Tu parles d'arithmétique . Cela serait intéressante pour le script f5jv3 de calculer la pénalité d'altitude , les points du chrono de vol et de les additionner pour avoir un résultat . Il ne resterait plus qu'a ajouter manuellement sur le carnet les points de la cible . Le tout sans avoir a sortir de calculatrice! D'un autre coté c'est pas des calculs très difficile a réaliser de tête .
Gilles
PS / pour le f3k et pour l’épreuve du poker s'est très chaud et cela n'est surement pas réalisable seul (un aide a ce niveau là est indispensable) . | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Ven 17 Oct 2014 - 9:03 | |
| Pour le F5J et la pénalité d'altitude, en lisant le règlement, je me suis dit que c'était le truc évident à faire. Mais vous ne l'avez demandé ni l'un, ni l'autre, je me suis dit, que n'étant pas familier de ces épreuves, j'avais peut-être loupé un truc.
Le chrono de vol, c'est déjà plus limite. Tout dépend si le pilote actionne son switch d'arrêt au moment du posé ou non.
Mais on peut ajouter les infos de score en fin de vol, c'est sûr.
----
Le F3K... D'abord, comme je suis plus concerné, je vais faire le script pour moi d'abord. Mais les suggestions sont toujours les bienvenues, bien sûr.
Le poker, il est clair que ça demande réflexion. Comme ça, sans trop chercher, je vois deux approches possibles (avec des inconvénients dans les deux cas, mais il faut peser les avantages apportés contre les contraintes requises) :
1/ On encode le temps annoncé au préalable. Evidemment, ça prend un peu de temps. Méthode d'encodage : un switch passe le manche de gaz et le script en encodage --> on met la valeur avec le stick. Ca peut être rapide, mais pas facile d'une main. Et pas question de faire un quick turn-around.
2/ On vole et après chaque posé on valide par la suite si le vol précédent était valide ou non. Aucune perte de temps (on peut le faire après avoir relancé), mais impossible d'avoir l'annonce du temps à l'approche de l'expiration du temps annoncé.
La solution, c'est peut-être une troisième voie, avec un modèle hybride des deux autres : on part sur une strat prédéterminée et on peut décider de passer en mode 2 à tout moment. | |
| | | maume gilles pilote d'or
Nombre de messages : 640 Localisation : 13 Date d'inscription : 16/12/2007
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Ven 17 Oct 2014 - 15:38 | |
| Michel, Je viens d'essayer le f5jv3, il y a eu un bug que je ne peux expliquer au départ? Ensuite cela a fonctionné parfaitement . Je referais des essais lorsque les conditions météo seront a nouveau propice ? Je te tiendrais au courant . Nous organisons une rencontre f5j le 25 et ou 26/10 . Je présenterai ton script aux pilotes intéressés . Il devrait y avoir quelques Taranis Pour le script f3k cela me parait trop compliqué si tu veux tout gérer . Je ne fais plus de compet, pour l'instant on fait dernier posé 3mn max. Pour ça pas besoin de script en fait . Pour détecter le lancé il faut un accéléromètre et pour le posé un capteur de recul de voiture Et même avec ça il faut aussi un écouteur ( mono ) dans l'oreille droite pour le temps de travail et un autre dans l'oreille gauche pour le temps de vol Pour le 5X2 ET le poker ( qui se transforme en 5x2 si le pilote lance haut ) s'est déjà un boulot a temps plein pour l'aide . Il faut surtout un inter très sensible a positionner sous la radio a l'endroit qui va bien . J'ai testé celui la http://www.conrad.fr/ce/fr/product/709883/Interrupteur-individuel-a-effleurement mais il demande trop de pression pour être actionné Gilles | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Ven 17 Oct 2014 - 16:05 | |
| Tu peux décrire ton "bug de départ" plus en détails, stp ? --- F3KLe problème est surtout qu'il y a autant de programmations de modes "de lancer" qu'il n'y a de pilotes Ce que je vais pondre pourrait n'être utile qu'à moi, mais on verra. La détection du lancé, pour moi, c'est assez facile. Je lâche le switch temporaire dès que le planeur quitte mes doigts. Sinon, il y a ce que je fais déjà dans mon script d'annonce d'altitude : si l'altitude est inférieure à 10m et que la vitesse ascensionnelle est supérieure à 5m/s, c'est qu'on vient de lancer. Mais ça demande la présence du vario. C'est pour l'arrêt qu'il faudrait l'accéléromètre :-) Les annonces des deux temps, j'y ai pensé. On peut par exemple générer tous les sons nécessaires avec une autre voix. Je m'attends à un job de longue haleine sur ce coup-là. Je vais faire ça tâche par tâche, sans me mettre de pression. Ce qui ne marche pas, tant pis, je garde le strict minimum. | |
| | | maume gilles pilote d'or
Nombre de messages : 640 Localisation : 13 Date d'inscription : 16/12/2007
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Ven 17 Oct 2014 - 16:42 | |
| - Michel_65 a écrit:
- Tu peux décrire ton "bug de départ" plus en détails, stp ?
Des que j'ai plus d'info je te tiens au courant. Gilles | |
| | | Michel on4mj Pilote pro
Nombre de messages : 221 Localisation : Belgique Date d'inscription : 08/10/2014
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread Jeu 30 Oct 2014 - 12:09 | |
| Voici une version adaptée du script que j'ai écrit pour le Winterpost 2014-2015 (tâche 1). Il prend une fenêtre de travail de 10 min. Et prend en compte les 5 meilleurs vols avec un max de 2 min. Ca vous dira probablement quelque chose Mode d'emploi: Le switch F permet de démarrer le temps de travail, puis de faire une remise à zéro à la fin (ou d'interrompre le processus avant la fin). Le switch H (temporaire) signale le début d'un vol (quand on le relâche) et la fin du vol (quand on le reprend). Cette solution a ses limites, je l'admets. Si vous avez interverti vos switches, il faut intervertir aussi dans le code 'sh' et 'sf'. Enfin, si vous avez votre propre config de timer, ça va f..tre le b.rd.l. Bref, faut pas faire - Code:
-
--[[ Task G : 5X2 (10 min window)
NB: this is a telemetry script Mike, ON4MJ --]]
-- -- Timer class -- (this is generic, and will have to be modified in 2.0.13+ where the setTimer() bug is fixed) -- Precondition: timerId is either 0 or 1 -- local function createTimer( timerId, startValue ) local id = timerId local timer = model.getTimer( id )
local function setTimerWA() -- work-around for the difference in parameters of setTimer() compared to the return of getTimer() local t = { mode=timer.mode, start=timer.start, value=timer.value, countdownBeep=timer.countdownBeep, minuteBeep = timer.minuteBeep and 1 or 0, persistent = timer.persistent and 1 or 0 } model.setTimer( id, t ) end
local function getVal() timer.value = model.getTimer( id ).value return timer.value end
local function start() timer.mode = 1 setTimerWA() end
local function stop() timer = model.getTimer( id ) timer.mode = 0 setTimerWA() return timer.value end
local function reset() timer.value = timer.start setTimerWA() end
local function draw( x, y, att ) local val = getVal() lcd.drawTimer( x, y, val, att ) return val end
if startValue then timer.start = startValue reset() end
return { start = start, stop = stop, reset = reset, draw = draw, getVal = getVal } end
---------------------------------------------------
function createTimeKeeper( size, limit ) local tab = {} local LIMIT = limit
local function initialize( size ) for i=1,size do tab[ i ] = 0 end end
local function addTime( t ) local i = #tab - 1 while i > 0 and t > tab[ i ] do tab[ i + 1 ] = tab[ i ] i = i - 1 end tab[ i + 1 ] = t end
local function display() for i=1,#tab-1 do print( tab[ i ] ) end end
local function getVal( i ) -- Precondition : 1 <= i <= (#tab - 1) return tab[ i ] end
local function getTotal() local tot = 0 for i=1,#tab-1 do tot = tot + math.min( tab[ i ], LIMIT ) end return tot end
local function reset() initialize( #tab ) end
-- "constructor" initialize( size + 1 )
return { addTime=addTime, display=display, getVal=getVal, getTotal=getTotal, reset=reset } end
local function createTaskG() -- Customize your own switches here local TMP_SWITCH = getFieldInfo( 'sh' ).id local RST_SWITCH = getFieldInfo( 'sf' ).id
local SOUND_PATH = '/SOUNDS/EN/'
local MAX_FLIGHT_TIME = 120
local times -- best times local state -- 1=reset; 2=start; 3=flying; 4=landed, 5=end
local timer1 -- working time local timer2 -- current flight time (descending from MAX_FLIGHT_TIME)
local function earlyReset() if getValue( RST_SWITCH ) < 0 then timer1.stop() timer2.stop()
timer1.reset() timer2.reset()
state = 1
return true end return false end
local function endOfWindow() if timer1.getVal() <= 0 then timer2.stop() timer1.stop()
times.addTime( MAX_FLIGHT_TIME - timer2.getVal() ) playFile( SOUND_PATH .. 'taskend.wav' )
state = 5
return true end return false end
-- State functions
local function resetState() -- Wait for the start of the working window if getValue( RST_SWITCH ) > 0 then times.reset() timer1.start() playFile( SOUND_PATH .. 'taskg.wav' ) state = 2 end end
local function startedState() if not endOfWindow() and not earlyReset() then -- Wait for the pilot to grab its temp switch if getValue( TMP_SWITCH ) > 0 then state = 4 end end end
local function flyingState() if not endOfWindow() and not earlyReset() then -- Wait for the pilot to catch/land (he/she's supposed to pull the temp switch at that moment) if getValue( TMP_SWITCH ) > 0 then timer2.stop() times.addTime( MAX_FLIGHT_TIME - timer2.getVal() ) state = 4 end end end
local function landedState() if not endOfWindow() and not earlyReset() then -- Wait for the pilot to launch the plane if getValue( TMP_SWITCH ) < 0 then timer2.reset() timer2.start() state = 3 end end end
local function endSate() -- Wait for reset earlyReset() end
local functions = { resetState, startedState, flyingState, landedState, endSate }
-- public interface local function init() times = createTimeKeeper( 5, MAX_FLIGHT_TIME ) state = 1 -- 1=reset; 2=start; 3=flying; 4=landed, 5=end
timer1 = createTimer( 0, 600 ) -- working time timer2 = createTimer( 1, MAX_FLIGHT_TIME ) -- current flight time (descending from MAX_FLIGHT_TIME) end
local function background() functions[ state ]() end
local function display() background()
timer1.draw( 24, 4, XXLSIZE )
lcd.drawLine( 0, 47, 159, 47, SOLID, 2 ) lcd.drawPoint( 0, 47 )
lcd.drawText( 20, 53, "Current flight: ", 0 ) lcd.drawTimer( lcd.getLastPos(), 50, MAX_FLIGHT_TIME - timer2.getVal(), MIDSIZE )
lcd.drawLine( 159, 0, 159, 63, SOLID, 2 ) lcd.drawPoint( 159, 0 )
local y = 2 for i=0,4 do lcd.drawTimer( 180, y + 10 * i, times.getVal( i+1 ), 0 ) end lcd.drawFilledRectangle( 160, 53, 52, 11, 0 ) lcd.drawTimer( 180, 55, times.getTotal(), INVERS ) end
return { init=init, background=background, display=display } end
local task = createTaskG() return { init=task.init, background=task.background, run=task.display }
S'il y a un intérêt suffisant, je peux donner des explications sur le code. | |
| | | Contenu sponsorisé
| Sujet: Re: *** FR-SKY TARANIS *** Mega thread | |
| |
| | | | *** FR-SKY TARANIS *** Mega thread | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|