Gi5
Messages postés61Date d'inscriptionmardi 12 septembre 2006StatutMembreDernière intervention 6 septembre 2008
-
23 oct. 2006 à 09:06
Gi5
Messages postés61Date d'inscriptionmardi 12 septembre 2006StatutMembreDerniè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
Gi5
Messages postés61Date d'inscriptionmardi 12 septembre 2006StatutMembreDerniè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
Gi5
Messages postés61Date d'inscriptionmardi 12 septembre 2006StatutMembreDerniè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