Besoin d'aide pour "timer"

benoit62840 Messages postés 15 Date d'inscription lundi 3 octobre 2011 Statut Membre Dernière intervention 16 décembre 2011 - 16 oct. 2011 à 01:03
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 18 oct. 2011 à 19:06
salut a tous
voila, je suis entrain de créer un petit logiciel pour mon train électrique. celui ci est gérer a l'aide d'une velleman vm110. jusque la tout va bien...
mais je sèche sur la fonction timer de visual basic 2008 express edition
je vous expose mes problème.
j'aimerais créer une horloge a l'échelle de mon réseau, donc une horloge accélère 87 fois.
j'ai crée une horloge de base:
Label14.Text = Now.ToLongTimeString
mais je ne vois pas comment je peux l'acceléré...
et je ne c'est non plus comment faire pour utiliser l'heure pour lancé une execution dans le programme...
j'aimerai aussi calculer la vitesse de mes train grâce a une variable Booléen.
en fait, j'aimerais savoir comment "calculer" le temps entre deux impulsions de ma carte pour pouvoir effectuer une formule.
merci d'avance de votre aide

benoit

6 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
16 oct. 2011 à 01:36
Bonjour,

Pour accélérer le temps, tu peux te baser sur le Environment.TickCount qui te retourne une durée en millisecondes.
Ensuite, à partir de là, il est facile d'y ajouter un coefficient de dilatation temporelle.

Pour calculer la vitesse, si tes entrées sont assez réactiver, tu peux aussi te fixer sur le TickCount et contrôler l'état des entrées.

Après, il faut préciser ta question.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
16 oct. 2011 à 02:00
Salut

Pour accélérer le temps, il te faut un point de départ, une date/heure.
Supposons que ce temps soit le temps de l'heure actuelle, au démarrage de l'application --> Stockage de Now dans une variable de type Date, DateDépart.
A chaque Tick de ton Timer, tu pourras aisément calculer le temps écoulé depuis cette date de départ avec des fonctions comme DateDiff.
Une fois que tu auras le nombre de secondes écoulées, tu les multiplies par 83 et tu refais l'opération inverse : tu recalcules une date à partir de la date de départ + le nombre de secondes calculé en utilisant DateAdd.
Tu stockes ça dans une deuxième variable de date virtuelle et le tour est joué.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
benoit62840 Messages postés 15 Date d'inscription lundi 3 octobre 2011 Statut Membre Dernière intervention 16 décembre 2011
16 oct. 2011 à 22:49
merci pour vos reponse les gars... mais je vais passer pour une bettrave, je n'y arrive pas!!!
j'ai essayer la technique de jack, mais jem'enbrouille et je ne suis pas assez calé sur vb pour y arrivé...
pour henry, je sais avoir un raffraichisement de 0ms (reglable)
en fait, je veux installé deux ils (interrupeteur a lame souple) a une distance x l'un de l'autre.
ensuite, lorsque le train passe sur le premier, il envoie l'info a la carte via l'ils, et x seconde ou milliseconde apres, il passe sur le deuxieme ils et reenvoye l'info du passage.
en fonction de la distance et du temps, j'aplique une formule mathematique (v(km/h)=3.6*87*d(mm)/t(ms) et j'obtient ainsi la vitesse "reel".
sur papier c'est simple, mais je ne c'est pas mettre ca en oeuvre...
0
Utilisateur anonyme
17 oct. 2011 à 17:13
Salut benoit,

Pourquoi tu ne le gères pas avec un timer:
 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        seconde += 1
        If seconde > 59 Then
            seconde = 0
            Minute += 1
            If Minute() > 59 Then
                Minute = 0
                heure += 1
'ETC....
            End If
        End If
    End Sub


Si tu règles le timer à 1000ms ce sera toutes les secondes mais si tu le règles à 800ms par ex. il ira plus vite...


CF2i - Guadeloupe
Ingénierie Informatique
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 oct. 2011 à 14:06
Puisque la distance sera courte, le temps écoulé sera faible, donc une précision supérieure est nécessaire, les Timers de VB n'ayant pas la réputation d'être précis.
Il vaut donc mieux se baser sur l'heure système, en la mémorisant lors du passage devant l'ILS #1 + Autre mémorisation au passage sur le #2, et enfin, en faisant la différence entre les deux pour récupérer le nombre de secondes, voire de millisecondes.
Voir les exemples fournis dans l'aide de la classe Timer.
Affichage des millisecondes simple :
Debug.Print(Format(Now, "dd/MM/yyy hh:mm:ss.fff"))

Exemple de calcul avec les Millisecondes :
Dans la déclaration générale de ta forme :
Private Date1 As Date
Private Date2 As Date
Dans la procédure évènement du passage ILS #1 :
Date1 = Now
Dans la procédure évènement du passage ILS #2 :
Date2 = Now
Dim TempsEcoule As Single = DateDiff(DateInterval.Second, Date1, Date2) ' Secondes arrondies
TempsEcoule += (Date2.Millisecond - Date1.Millisecond) / 1000

Debug.Print("Temps écoulé = " & TempsEcoule & " secondes")
Debug.Print("Nbr de secondes entre " & Date1 & " et " & Date2 & " = " & _
            DateDiff(DateInterval.Second, Date1, Date2) & vbCrLf & _
            "Millisecondes des deux dates : " & Date1.Millisecond & " et " & Date2.Millisecond)
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
18 oct. 2011 à 19:06
Bonjour,

Ou alors en utilisant Environment.TickCount.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
Rejoignez-nous