Variantes avec une touche

olver62 Messages postés 5 Date d'inscription vendredi 11 février 2005 Statut Membre Dernière intervention 17 janvier 2010 - 27 mars 2005 à 21:21
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 30 mars 2005 à 14:03
bonjours, je suis débutant en programation; même très novice...
j'ai fait un petit programme avec mon frère pour contrôler un moteur pas à pas
et il fonctionne. je voudrais cependant y ajouter un petit truc:
lorsque l'on appuis sur une touche, que l'on face varier un nombre N qui me sert de pause entre les envoye des bits.
par exemple avec la touche retour, N = 0.01 * N next N
et avec la touche entrer, N = 1.01 * N next N
j'ai essayer de bidouyer un truc moi même mais pour les touche qui activent les
boucles de bits, il ne reconnai ocune valeur de x et ducoup le moteur ne tourne
plus du tout.
j'espère que j'ai été clair. j'ai cherché sur ce site et j'ai trouver quelque chose de semblable sans comprendre comment faire. merci de m'éclairer!
@+
olivier

8 réponses

jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
27 mars 2005 à 22:00
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
N = 0.01 * N
End Sub


Private Sub Text1_KeyPress(KeyAscii As Integer)
N = 1.01 * N
End Sub

jpleroisse
0
olver62 Messages postés 5 Date d'inscription vendredi 11 février 2005 Statut Membre Dernière intervention 17 janvier 2010
28 mars 2005 à 12:03
je te remerci mais je n'ais pas compris... je le recopie et ca ne marche pas...

je suis sous VB 6 et voila ma ligne de code:

Private Sub Command1_Click()
End
End Sub





Private Sub Command3_Click()
Do
Call Out(&H378, 0)
Pause (Text2.Text)
X = X + 1
DoEvents
Loop
End Sub


Private Sub GO_Click()


For i = 0 To Text1.Text * 11
N = (60 / 48) / Text2.Text
Call Out(&H378, 1)
Pause (N)
Call Out(&H378, 2)
Pause (N)
Call Out(&H378, 4)
Pause (N)
Call Out(&H378, 8)
Pause (N)
Next i


End Sub
Public Sub Pause(Secondes)
Dim pausetime, Start
pausetime = Secondes
Start = Timer
Do While Timer < Start + pausetime
DoEvents
Loop


End Sub



Private Sub Initialisation_Click()
Call Out(&H378, 0)


End Sub


Private Sub Text1_Change()
X = Text1.Text


End Sub


Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
X = 0
N = (68 / 60) / Text2.Text
Arret = True
Select Case KeyCode
Case vbKeyUp
Do While vbKeyUp > 1
Call Out(&H378, 1)
Pause (N)
Call Out(&H378, 2)
Pause (N)
Call Out(&H378, 4)
Pause (N)
Call Out(&H378, 8)
Pause (N)
If Arret = False Then
Exit Do
End If
X = X + 1
DoEvents
Loop


End Select
Select Case KeyCode
Case vbKeyLeft
Do While vbKeyLeft > 1
Call Out(&H378, 0)
Pause (N)
X = X + 1
DoEvents
Loop
End Select
Select Case KeyCode
Case vbKeyDown
Do While vbKeyDown > 1
Call Out(&H378, 8)
Pause (N)
Call Out(&H378, 4)
Pause (N)
Call Out(&H378, 2)
Pause (N)
Call Out(&H378, 1)
Pause (N)
If Arret = False Then
Exit Do
End If
X = X + 1
DoEvents
Loop
End Select


End Sub

il fonctionne ce code la je sais que je suis nul mais je débute... si quelqu'un a de la pascience, merci de me répondre.
0
jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
29 mars 2005 à 00:54
Je voudrais bien essayer ton code pour chercher comment le modifier, mais VB me renvoie une erreur Call Out Procédure sub où function non définie.
Quelle est cette procédure où Function ???

jpleroisse
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
29 mars 2005 à 14:34
Revois ton code, il n'est pas clair du tout. Il ne peut pas marcher correctement.



1 - Sur la première ligne de chaque module et de chaque feuille,
rajoute Option Explicit , ça t'obligeras à déclarer chacune de tes
variables proprement. A l'heure actuelle, tu n'en déclare aucune et
j'ai l'impression que tu te mélange un peu les pinceaux.



2 - Attention à tes évènements sur Text1, Text1 sert soit à saisir une
valeur à utiliser ailleur dans le programme (sub Go_Click), soit à
piloter ton moteur avec les flèches (sub Text1_KeyDown), mais pas les
deux, ou alors réfléchie bien à ce que tu fais. Dès que tu appuis sur
une touche dans text1 et avant même avoir pu saisir quelque chose, ton
event Text1_KeyDown sera appellé et ton moteur piloté.



3 - L'instruction select case est mal écrite, elle s'écrit :



select case variable

case valeur1

........

case valeur2

........

case valeur3

........

end select



4 - Attention à tes instructions Do Loop dans Text1_KeyDown :

Do While vbKeyUp >1 , Do While vbKeyDown >1, Do While vbKeyLeft
>1 génère des boucle infinies. vbKey..... sont des constantes. Elles
ne sont pas modifiables, donc ne pourront jamais etre inférieure à 1.
Si tu veux explicitement faire une boucle infinie mais simplement :

Do
.....

Loop


5 - Ta variable X (même si elle doit etre globale je pense) ne sert
à rien, elle est incrémentée mais tu ne t'en sert pas par la suite.
Idem pour la variable Arret qui est systématique mise à True lors de
l'appuis sur une touche, mais jamais remise à False.


6 - Pour ta question, tu rajoute ce code en remplaçant les ??? par le
nom du controle qui te sert à piloter N (Text1 semble-t-il mais j'ai
pas trop compris pourquoi). J'utilise les touches "+" et "-" car je
n'ai pas compris quelle étais la touche que tu appelle retour.



Private Sub ?????_KeyDown(KeyCode As Integer, Shift As Integer)



Select Case KeyCode



Case vbKeyAdd

N = 1.01 * N



Case vbKeySubtract

N = 0.01 * N ' à remplacer je pense par 0.99 * N



End Select



End Sub




<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
0

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

Posez votre question
olver62 Messages postés 5 Date d'inscription vendredi 11 février 2005 Statut Membre Dernière intervention 17 janvier 2010
29 mars 2005 à 21:35
je vous remerci pour la remarque, j'ai débrousaillé la commande en retirant ce qui était inutile (il en reste peut être encore...) mais j'ai essayé avec les codes que vous m'avez donné et, comme je suis manchau ca ne marche pas. j'ai donc remplacé les touches par des boutons et pas plus de résultats... si à la prochaine foi ca ne marche plus se serra désespéré...

voila le code:

Private Sub Command1_Click()
End
End Sub
____________________________________________________________________


Private Sub Command3_Click()
Do
Call Out(&H378, 0)
Pause (Text2.Text)
X = X + 1
DoEvents
Loop
End Sub
______________________________________________________________________


Private Sub GO_Click()


For i = 0 To Text1.Text * 11
N = (60 / 68) / Text2.Text
Call Out(&H378, 1)
Pause (N)
Call Out(&H378, 2)
Pause (N)
Call Out(&H378, 4)
Pause (N)
Call Out(&H378, 8)
Pause (N)
Next i


End Sub
______________________________________________________________________

Public Sub Pause(Secondes)
Dim pausetime, Start
pausetime = Secondes
Start = Timer
Do While Timer < Start + pausetime
DoEvents
Loop


End Sub
______________________________________________________________________



Private Sub Initialisation_Click()
Call Out(&H378, 0)


End Sub
______________________________________________________________________


Private Sub Text1_Change()
X = Text1.Text


End Sub
______________________________________________________________________


Private Sub text1_KeyDown(KeyCode As Integer, Shift As Integer)
X = 0
N = (60 / 68) / Text2.Text
Arret = True
Select Case KeyCode


Case vbKeyUp
Do
Call Out(&H378, 1)
Pause (N)
Call Out(&H378, 2)
Pause (N)
Call Out(&H378, 4)
Pause (N)
Call Out(&H378, 8)
Pause (N)
If Arret = False Then
End If
X = X + 1
DoEvents
Loop





Case vbKeyLeft
Do
Call Out(&H378, 0)
Pause (N)
X = X + 1
DoEvents
Loop


Case vbKeyDown
Do
Call Out(&H378, 8)
Pause (N)
Call Out(&H378, 4)
Pause (N)
Call Out(&H378, 2)
Pause (N)
Call Out(&H378, 1)
Pause (N)
If Arret = False Then
End If
X = X + 1
DoEvents
Loop
End Select


End Sub
______________________________________________________________________



Private Sub command2_click()


N = 1.1 * N

End Sub
______________________________________________________________________


Private Sub command4_click()

N = 0.9 * N

End Sub



en gros, quand j'apuis sur haut, le moteur tourne d'un sens, base, dans l'autre sens, et gauche il s'arrête. Texte 1 est le nombre de tours souhaité et dans lequel je fais aller mes touches. texte 2 c'est la vitesse (ce qu'il faut faire varier( on peut le retirer si il le faut pour mêtre "+" et "-")) command1 = quitter. command2=plus vite. command3=stop. command4=moins vite.
Go = lance le nombre de tours.
merci encore à vous tous et à votre passience...
@+ olivier
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
30 mars 2005 à 12:26
Bien, alors toujours pas de déclaration de variables, c'est quand même la base d'un programme propre et clair.


Bon, avec ce que j'ai pu comprendre, j'ai essayé d'améliorer ton code. Je pense que ça devrais marcher.

Option Explicit


Dim Nb_Tours As Integer
Dim N As Single
Dim Arret As Boolean

Private Sub Command1_Click()
End
End Sub


Private Sub Command3_Click()
Arret = True
End Sub


Private Sub GO_Click()
Dim i As Integer

Arret = False

For i = 0 To Nb_Tours * 11
Call Out(&H378, 1)
Pause (N)
Call Out(&H378, 2)
Pause (N)
Call Out(&H378, 4)
Pause (N)
Call Out(&H378, 8)
Pause (N)

If Arret = True Then
Call Out(&H378, 0)
Exit For
End If
Next i
End Sub


Public Sub Pause(Secondes As Single)
Dim pausetime As Single, Start As Single

pausetime = Secondes
Start = Timer
Do While Timer < (Start + pausetime)
DoEvents
Loop
End Sub


Private Sub Initialisation_Click()

Arret = True
DoEvents
Call Out(&H378, 0)
End Sub


Private Sub Text2_Change()
If IsNumeric(Text2.Text) Then N = CSng(60 / 68) / CSng(Text2.Text)
End Sub


Private Sub Text1_Change()
If IsNumeric(Text1.Text) Then Nb_Tours = CInt(Text1.Text)
End Sub


Private Sub text1_KeyDown(KeyCode As Integer, Shift As Integer)

Arret = False
Select Case KeyCode
Case vbKeyUp
Do
Call Out(&H378, 1)
Pause (N)
Call Out(&H378, 2)
Pause (N)
Call Out(&H378, 4)
Pause (N)
Call Out(&H378, 8)
Pause (N)
If Arret = True Then
Call Out(&H378, 0)
Exit Do
End If
DoEvents
Loop
Case vbKeyLeft
Arret = True
Case vbKeyDown
Do
Call Out(&H378, 8)
Pause (N)
Call Out(&H378, 4)
Pause (N)
Call Out(&H378, 2)
Pause (N)
Call Out(&H378, 1)
Pause (N)
If Arret = True Then
Call Out(&H378, 0)
Exit Do
End If
DoEvents
Loop
End Select
End Sub

Private Sub command2_click()
N = 1.1 * N
End Sub

Private Sub command4_click()
N = 0.9 * N
End Sub

J'ai virer la variable X, j'ai pas compris à quoi elle servait. Pour faire varier la vitesse du moteur, soit tu appuis sur les boutons plus et moins, soit tu modifie la valeur du textbox (ça marche en live).


<HR width="100%" SIZE=2>


Si le cerveau était assez simple pour que nous puissions le comprendre,
nous serions assez bête pour ne pas le comprendre malgré tout.
0
olver62 Messages postés 5 Date d'inscription vendredi 11 février 2005 Statut Membre Dernière intervention 17 janvier 2010
30 mars 2005 à 13:47
Je remerci infiniement il marche supper bien ton code!!!!
escuse moi pour la déclaration mé je c pas le faire...
j'ai commencé le week-end dernier et à 15 ans.... j'ai encore le temps d'aprendre ca!!
merci à tous encore une foi!!!!!
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
30 mars 2005 à 14:03
escuse moi pour la déclaration mé je c pas le faire...
j'ai
commencé le week-end dernier et à 15 ans.... j'ai encore le temps
d'aprendre ca!!


Avant d'aller plus loin, commence par ça.

Une piste : ajoute systématiquement Option Explicit sur la premiere
ligne de chaque feuille ou module, tu verras que tu seras obligé de
faire les déclarations.



Ou encore mieux, Menu Outils/Option, onglet Editeur, coche tout et surtout Déclaration des variables obligatoire.



Bonne Prog




<hr size="2" width="100%">Si le cerveau était assez simple pour que nous puissions le comprendre,

nous serions assez bête pour ne pas le comprendre malgré tout.
0
Rejoignez-nous