100% du processeur

Résolu
Gi5 Messages postés 61 Date d'inscription mardi 12 septembre 2006 Statut Membre Dernière intervention 6 septembre 2008 - 23 oct. 2006 à 09:06
Gi5 Messages postés 61 Date d'inscription mardi 12 septembre 2006 Statut Membre Dernière intervention 6 septembre 2008 - 23 oct. 2006 à 13:52
Bonjour
j'ai un probleme que je n'arrive pas a resoudre,
dans une routine de gestion a distance d'un robot a l'aide d'un joystick.
si je ne touche pas au joystick le processeur se trouve occupe a 100%.
tout fonctionne si je bouge le joystick.
qui peu regarder mon soft ?
@+Gi

4 réponses

cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 2
23 oct. 2006 à 13:10
A mon avis le Do Until Joy = False est de trop dans Timer1_Timer .


Le timer te fait déjà une sorte de "boucle" donc ce serait plus un codage du genre : if Joy=true then .


Pas certains de la réponse ..
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
23 oct. 2006 à 10:03
A priori je dirais que tu as une boucle qui tourne en permanence et qui rend pas la main au système.
Il doit manquer quelques DoEvents dans la boucle.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Gi5 Messages postés 61 Date d'inscription mardi 12 septembre 2006 Statut Membre Dernière intervention 6 septembre 2008
23 oct. 2006 à 10:26
Merci de ta reponse
Voici a quoi cela ressemble :

Dim V1 As Integer   'Vitesse Bits 1 a 3
Dim V2 As Integer   'Vitesse Bits 5 a 7
Dim Sens As String ' Direction du Joy
Dim m As Integer   'Milieu Joy = 0
Dim n As Integer   'Arret Fonction
Dim Joy As Boolean 'Mode Joystick


Private Sub Center()
Ord = 25
Para = 0
Sens = ""
m = 0
End Sub


Private Sub UpLe()
sUp
sLeft
Sens = "UP/Left : " & V1 & " : " & V2
Ord = 24
Para = V1 + (V2 * 16)
End Sub


Private Sub UpRi()
sUp
sRight
Sens = "UP/Right : " & V1 & " : " & V2
Ord = 18
Para = V1 + (V2 * 16)
End Sub


Private Sub DoLe()
sDown
sLeft
Sens = "Down/Left : " & V1 & " : " & V2
Ord = 22
Para = V1 + (V2 * 16)
End Sub


Private Sub DoRi()
sDown
sRight
Sens = "Down/Right : " & V1 & " : " & V2
Ord = 20
Para = V1 + (V2 * 16)
End Sub


Private Sub sRight()
If ji.dwXpos > 61439 Then
V2 = 7
ElseIf ji.dwXpos > 57343 Then V2 = 6
ElseIf ji.dwXpos > 53247 Then V2 = 5
ElseIf ji.dwXpos > 49151 Then V2 = 4
ElseIf ji.dwXpos > 45055 Then V2 = 3
ElseIf ji.dwXpos > 40959 Then V2 = 2
ElseIf ji.dwXpos > 36863 Then V2 = 1
End If
Sens = "RIGHT : " & V2
Ord = 19
Para = V2 * 16
m = 1
End Sub


Private Sub sLeft()
If ji.dwXpos < 4096 Then
V2 = 7
ElseIf ji.dwXpos < 8192 Then V2 = 6
ElseIf ji.dwXpos < 12288 Then V2 = 5
ElseIf ji.dwXpos < 16384 Then V2 = 4
ElseIf ji.dwXpos < 20480 Then V2 = 3
ElseIf ji.dwXpos < 24576 Then V2 = 2
ElseIf ji.dwXpos < 28672 Then V2 = 1
End If
Sens = "LEFT : " & V2
Ord = 23
Para = V2 * 16
m = 1
End Sub


Private Sub sDown()
If ji.dwYpos > 61439 Then
V1 = 7
ElseIf ji.dwYpos > 57343 Then V1 = 6
ElseIf ji.dwYpos > 53247 Then V1 = 5
ElseIf ji.dwYpos > 49151 Then V1 = 4
ElseIf ji.dwYpos > 45055 Then V1 = 3
ElseIf ji.dwYpos > 40959 Then V1 = 2
ElseIf ji.dwYpos > 36863 Then V1 = 1
End If
Sens = "DOWN : " & V1
Ord = 21
Para = V1
m = 1
End Sub


Private Sub sUp()
If ji.dwYpos < 4096 Then
V1 = 7
ElseIf ji.dwYpos < 8192 Then V1 = 6
ElseIf ji.dwYpos < 12288 Then V1 = 5
ElseIf ji.dwYpos < 16384 Then V1 = 4
ElseIf ji.dwYpos < 20480 Then V1 = 3
ElseIf ji.dwYpos < 24576 Then V1 = 2
ElseIf ji.dwYpos < 28672 Then V1 = 1
End If
Sens = "UP : " & V1
Ord = 17
Para = V1
m = 1
End Sub


Private Sub sOut()
n = 1
Ord = 10
Para = 1
Sens = "ZOOM OUT"
End Sub


Private Sub sIn()
n = 1
Ord = 9
Para = 1
Sens = "ZOOM IN"
End Sub


Private Sub sFar()
n = 1
Ord = 12
Para = 1
Sens = "FOCUS FAR"
End Sub


Private Sub sNear()
n = 1
Ord = 11
Para = 1
Sens = "FOCUS NEAR"
End Sub


Private Sub Arret()
Ord = 48
Para = 0
Sens = ""
n = 0
End Sub


Public Sub RS485()If MSComm.PortOpen True Then MSComm.PortOpen FalseIf Cam 0 Then Cam 1
If Para <> Cont Then
With MSComm
.CommPort = 1
.Handshaking = 0
.RThreshold = 1
.RTSEnable = True
.Settings = "9600,n,8,1"
.SThreshold = 1
.OutBufferSize = 2048
End With
MSComm.PortOpen = True
MSComm.Output = Chr$(128 + Cam)
Sleep (100)
MSComm.Output = Chr$(Ord)
Sleep (100)
MSComm.Output = Chr$(Para)
MSComm.PortOpen = False


Cont = Para
V1 = 1
V2 = 1
End If


End Sub


Private Sub ButtonJoystick_Click()
If Joy = False Then
Timer1.Enabled = False
Joy = True
Timer1.Enabled = True
ButtonJoystick.Picture = LoadPicture("D:\Gicam\Images\Joy2.jpg")
Else:
Timer1.Enabled = False
ButtonJoystick.Picture = LoadPicture("D:\Gicam\Images\Joy1.jpg")
Joy = False
End If
End Sub




Private Sub Timer1_Timer()
Do Until Joy = False
ji.dwSize = Len(ji)
ji.dwFlags = JOY_RETURNALL
rc = joyGetPosEx(JOYSTICKID1, ji)
If ji.dwButtons = 1 Then 'shoot
ElseIf ji.dwYpos < 28672 And ji.dwXpos < 28672 Then UpLe
ElseIf ji.dwYpos < 28672 And ji.dwXpos > 36863 Then UpRi
ElseIf ji.dwYpos > 36863 And ji.dwXpos < 28672 Then DoLe
ElseIf ji.dwYpos > 36863 And ji.dwXpos > 36863 Then DoRi
ElseIf ji.dwYpos < 28672 Then sUp
ElseIf ji.dwYpos > 36863 Then sDown
ElseIf ji.dwXpos < 28672 Then sLeft
ElseIf ji.dwXpos > 36863 Then sRight
ElseIf m = 1 Then Center
ElseIf ji.dwZpos > 45055 Then sOut
ElseIf ji.dwZpos < 20480 Then sIn
ElseIf ji.dwRpos > 45055 Then sFar
ElseIf ji.dwRpos < 20480 Then sNear
End If
RS485
DoEvents
If n = 1 Then Arret
Loop
End Sub


 




 
0
Gi5 Messages postés 61 Date d'inscription mardi 12 septembre 2006 Statut Membre Dernière intervention 6 septembre 2008
23 oct. 2006 à 13:52
Tu as raison j'ai plante avec cette boucle .
Je n'ai pas l'habitude des timer.
Donc un grand merci.
cela fait des jours que je cherche en vain.
c'etait si simple GRRRRRRRRR
encore bravo
@+Gi
0
Rejoignez-nous