[TUTO SIOC] La fonction TIMER

Tous les tutoriels sur la programmation SIOC, le language des cartes Opencockpits

[TUTO SIOC] La fonction TIMER

Messagede mameloose » Mar 5 Avr 2016 14:13

et rebonjour ! tonton Mameloose a la rescousse !

aujourd'hui petite explication de la fonction TIMER pratique pour reguler la vitesse d'une servo par exemple ...


en gros la fonction timer permet d'assigner une valeur mais dans le temps que l'ont veux .... (hum pas très clair tout ca ...)

exemple :

j'ai une servo d'indication de volet par exemple .... dans un code classique comme celui qui suit j'ai declaré la variable de position volet ainsi que ma servo :

Image

voila donc maintenant les valeurs de positions volet pour un cessna par exemple sont :

0=0
10=5475
20=10907

maintenant si je veux que ma servo soit synchronisée avec mes volet je releve les positions de ma servo en la bougeant avec sioc monitor

jobtient pour exemple

servo 0=0
servo 10=256
servo 20=345

voila donc bien sur nimporte qui assignerai la fonction IF de cette maniere :

Image


MAIS UN PROBLEME SURVIENT !

la servo bouge beaucoup trop vite et ce n'est pas realiste !!


donc pour reguler cette vitesse on utilise la fonction TIMER


elle se definit comme ceci :

Image

donc pour un timer on renseigne notre variable qui prendra tel valeur de tant en tant a chaque impulsion de tant de centieme de seconde


en gros au lieu d'aller de 0 a volet 10 en une fraction de seconde elle mettera environ 25 secondes ! c'est plus realiste et plus fluide !

on peux bien sur changer le temps en centieme de seconde au lieu de 10 si je met 100 alors chaque impulsion sera de 10 seconde !

donc pour aller de zero a 256 ma servo mettera 256 secondes a y aller ! (c'est beaucoup trop long bien sur mais c'est pour lexemple)


voila ducoup pour le code ca donne cela :


Image

BON une expliquation s'impose ....

ici le code va dans les deux sens

un sens positif et un sens negatif

donc si la valeurs des positions volet augmente alors la servo incremente de 1en 1 toutes les 0.1 seconde

et a l'inverse si la valeur volet diminue alors on decremente de -1 en -1

Image

ici en partie 1 l'incrementation
et en partie 2 la decrementation


voila et le principe et le meme pour des valeurs de volet plus grandes comme sur un 737 par exemple et on peux changer le temps pour chaque position !


voila la fonction Timer est pratique egalement pour fabriquer un chronometre ou ajouter du temps entre des actions de variable quelconque .....
Avatar de l’utilisateur
mameloose
 
Messages: 1005
Inscription: 20/04/09
Localisation: evreux

Re: tuto sioc la fonction TIMER

Messagede Boutondair » Mar 5 Avr 2016 16:08

Encore un très joli partage

merci affiche

David cligneoeil grandsoleil
Image Image
Petit je rêvais que je volerais, maintenant grâce au virtuel je vole !!!!!
Avatar de l’utilisateur
Boutondair
Administrateur du site
 
Messages: 4162
Inscription: 20/04/09
Localisation: Ballans (17) proche de Cognac

Re: tuto sioc la fonction TIMER

Messagede mameloose » Mar 5 Avr 2016 17:14

grandsoleil cligneoeil
Avatar de l’utilisateur
mameloose
 
Messages: 1005
Inscription: 20/04/09
Localisation: evreux

Re: tuto sioc la fonction TIMER

Messagede pierre01 » Mar 5 Avr 2016 18:09

Très bon tuto mameloose !

J'utilise cette également cette fonction pour limiter la vitesse de montée de mes jauges carburant.

Ça marche très bien sauf dans un cas et tu vas peut-être pouvoir m'aider :

Quand je met "batterie ON", les jauges montent lentement jusqu'à l'indication correcte du niveau carburant.
idem pour "batterie OFF", elles redescendent à zéro.

MAIS :

Si je mets "batterie ON" puis "batterie OFF" AVANT que les jauges soient au max, elles s'arrêtent et restent à cette place.
Puis, si je remet "batterie ON", elles se remettent à monter jusqu'au max puis redescendent à zéro ET Y RESTENT ... blemeblanc
Je suis donc en contradiction : "batterie ON" et jauges à zéro.
Il faut que je fasse "batterie OFF" (les jauges ne bougent pas) puis à nouveau "batterie ON" et tout rentre dans l'ordre ...

Qu'en penses tu ?

Et merci pour tes tutos.
Avatar de l’utilisateur
pierre01
 
Messages: 1585
Inscription: 19/04/09
Localisation: Vers Vesoul (Haute Saône)

Re: tuto sioc la fonction TIMER

Messagede fab » Mar 5 Avr 2016 18:33

Il faudrait pouvoir "stopper" un timer, mais je n'ai pas trouvé l'astuce ?

Fabien
Avatar de l’utilisateur
fab
 
Messages: 2992
Inscription: 26/12/12

Re: tuto sioc la fonction TIMER

Messagede mameloose » Mar 5 Avr 2016 18:41

ah un dileme pour moi !
as tu un bout de code que je jette un oeil la dessus ??
Avatar de l’utilisateur
mameloose
 
Messages: 1005
Inscription: 20/04/09
Localisation: evreux

Re: tuto sioc la fonction TIMER

Messagede arcc » Mar 5 Avr 2016 18:42

Ah super. Voila une fonction qui m'intéresse pour les servos de mes jauges de fuel et de pression de mon Twin.

Merci à toi.

A+
Christian
Un ancien sous-marinier qui a pris de la hauteur.
Avatar de l’utilisateur
arcc
 
Messages: 544
Inscription: 16/12/13
Localisation: La ou fini la terre (Finistere)

Re: tuto sioc la fonction TIMER

Messagede C6_Pat » Mar 5 Avr 2016 20:37

Aaaahhhhhh ! ça devenait carrément intenable tout ce temps sans tuto Greg roicouronne
Image

" Tout arrive à l'homme qui sait attendre "
.....enfin pas trop longtemps quand même.....
Mon pit' P47 Razorback http://www.virtualp47.fr
Avatar de l’utilisateur
C6_Pat
 
Messages: 788
Inscription: 20/12/11
Localisation: Devant l'nordinateur en Alsace

Re: tuto sioc la fonction TIMER

Messagede mameloose » Mar 5 Avr 2016 20:49

mdr chouettedoights
Avatar de l’utilisateur
mameloose
 
Messages: 1005
Inscription: 20/04/09
Localisation: evreux

Re: tuto sioc la fonction TIMER

Messagede pierre01 » Mar 5 Avr 2016 21:04

Exact fab, je n'y suis pas arrivé non plus ...

Mon code :
Code: Tout sélectionner
Var 4181, name sub_fuel_left, link subrutine    // Suppresion bug ON OFF sw_bat
{
  &val_fuel_left = &fs_fuel_left / 83886.08      // de 0 à 100%  :  128 * 65536 / 100
  L0 = &val_fuel_left * 6.8          // "a" (y = ax)
  L1 = L0 + 170                // "b" (y = ax + b) -> nouvelle valeur servo
  L1 = LIMIT 150 900 0            // Limite amplitude servo de 150 à 900
  IF &courant = 0               // Si pas de courant
  {
    L1 = 170                  // L1 = Valeur mini pour servo
  }
  &tmp_fuel_left = L1 - &old_fuel_left      // Différence new - old valeur
  L2 = 4                     // Si &tmp_fuel_left >= 0 (évite un "IF") - Sens "TIMER"
  IF &tmp_fuel_left < 0             // Si la nouvelle valeur servo < à l'ancienne
  {
    L2 = -4                     // L2 négatif
  }
  IF &tmp_fuel_left <> 0         // Si le servo doit changer
  {
    &serv_Fuel_L = TIMER L1 L2 1   // Envoie valeur au servo par pas de 4 avec timer 2/10° de s
    &old_fuel_left = L1             // Stok nouvelle valeur servo pour prochaine modif
  }
}


édit : arcc :
Ma routine fonctionne très bien hormis le pb que j'expose plus haut !
Avatar de l’utilisateur
pierre01
 
Messages: 1585
Inscription: 19/04/09
Localisation: Vers Vesoul (Haute Saône)

Suivante

Retourner vers Les TUTOS SIOC





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité