Ja richtig, wenn ich den Joystick nach links drücke soll sich motor 1 nach links drehen - wenn ich den Js weit nach links drücke soll sich motor 1 schneller nach links drehen (das gleiche rechts)
wenn den joystick nach oben drücke soll sich motor 2 nach links drehen,
entsprechend weitwer nach oben drücken - schneller
einzelnt ( also nur eine achse vom joystick benutzen) funktioniert es mit dem code ^^^ schon
----
die wait ms benutze ich momentan folgend:
eine motor umdrehung besteht aus 4 schritten
zwischen jedem schritt wartet der motor kurz (A für Motor 1 B für Motor 2)
umsoweiter ich den joystick in eine richtung bewege -> umsokleiner wird die anzahl der sekunden der wartephase -> umsoschneller dreht der motor
Jeder motor ( x achse / y achse ) müsste in einem selbständigen loop, parallel zum anderen, laufen, damit nicht die wartezeit von motor 1 die wartezeit von motor 2 beinflusst
Momentan sieht es so aus:
Do
Motor x dreht sich
Wartet A sekunden (durch den potie der x achse vom joystick errechnet)
Motor y dreht sich
Wartet B sekunden ( durch den potie der y achse vom joystick errechnet)
Loop
das heißt, dass nach dem warten von motor x sich erst motor y dreht, dann die wartezeit von motor y kommt und sich erst dann wieder motor x dreht -> warte zeit x -> motory -> wartezeit y -> ....
Es muss aber so aussehen:
motor x dreht
wartet A
motor x dreht
wartet A
motor x dreht
wartet A
motor x dreht
wartet A
und NEBENHER
motor y dreht
wartet B
motor y dreht
wartet B
motor y dreht
wartet B
motor y dreht
wartet B
motor y dreht
wartet B
motor y dreht
wartet B
und während das passiert muss auch noch ständig die potiestellung des joysticks ausgelesen werden und dann aus den gewonnen werten die neu wartezeit A, B errechnet werden
^----------
hehe, also ich hoffe es ist jetzt klarer > besser kann ich es nicht erklären...
vielleicht ist mein ansatz auch schon total falsch!?
2 Schrittmotoren müssen sich in stufenlosen geschwindigkeiten in beide richtungen drehen lassen:
Der Joystick liefert in nullstellung folgende werte:
X-Achse: 560
Y-Achse: 560
Der erste Vollauschlag der Achse
X-Achse: 330
Y-Achse: 330
Der andere Vollausschlag der Achse
X-Achse: 1023
Y-Achse: 1023
Code:
$crystal = 6000000
Config Portb = Output
Config Portc = Input
Config Portd = Output
Config Portd.6 = Input
Config Portd.7 = Input
Config Adc = Single , Prescaler = Auto
Dim Xstandart As Integer
Dim Ystandart As Integer
Dim Xwert As Integer
Dim Ywert As Integer
Dim A As Integer
Dim B As Integer
Dim Minmove As Integer
Dim Xdirectionf As Integer
Dim Ydirectionf As Integer
Dim Xtime As Integer
Dim Ytime As Integer
Start Adc
Xstandart = Getadc(1) ' Der X-Achsen Wert des Joysticks wird ausgelesen (Die Nullstellungs Wert [sollte zwischen 500 und 600 liegen])
Start Adc
Ystandart = Getadc(0) ' Der Y-Achsen ...^^
Xtime = 0 ' (eine Umdrehung Des Motors Besteht Aus Vier Schritten - Variable Dient Dazu , Zu Wissen Welcher Schritt Gerade Dran Ist)
Ytime = 0 ' ^^
Minmove = '21 Die Minimal Wert , Bei Dem Sich Der Motor Anfängt Zu Drehen(um Die Nullstellung Des Joysticks Zu Vergrössern)
A = 1
B = 1
Do
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Start Adc
Xwert = Getadc(1) ' X Potie wird gelesen (je nach stellung 330 -> 1023)
If Xwert < Xstandart Then 'wenn der gelesene wert kleiner als die nullstellung ist (also der joystick nach links gedrückt wurde)
A = Xstandart - Xwert
A = 160 - A
A = A / 10
Xdirectionf = 1 'hier wird die drehrichtung festgelegt (da in A nur die wartezeit (nicht die richtung) geschrieben wird)
If A < 1 Then 'damit die anzahl die milisekunden nicht unter 1 geht (der motor kann nicht schneller drehen als einen schritt pro ms)
A = 1
End If
Elseif Xwert > Xstandart Then 'wenn der gelesene wert größer als die nullstellung ist (also nach rechts)
A = Xwert - Xstandart
A = 250 - A
A = A / 10
Xdirectionf = 0 ' ^^
If A < 1 Then 'damit die anzahl die milisekunden nicht unter 1 geht (der motor kann nicht schneller drehen als einen schritt pro ms)
A = 1
End If
End If
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
Start Adc
Ywert = Getadc(0)
If Ywert < Ystandart Then 'wenn der gelesene wert kleiner als ns -> joystick nach oben
B = Ystandart - Ywert
B = 140 - B
B = B / 10
Ydirectionf = 1 '^^
If B < 1 Then 'damit die anzahl die milisekunden nicht unter 1 geht (der motor kann nicht schneller drehen als einen schritt pro ms)
B = 1
End If
'#############################
'Durch Diese Rechnung ^ ^ ^ Wird Bei Allen Joystick Ausschlägen(potie 330 Bis 1023
'Eine Anzahl von milisekunden errechnet:
'bei joystick nullstellung ca 30 ms
'bei joystick vollausschlag 1 ms
'damit der motor sich in nullstellung nicht auch schon (auch wenn sehr langsam) dreht
'habe ich die minmove variable die weiter unten abgefragt wird
'#############################
Elseif Ywert > Ystandart Then 'wenn der gelesene wert größer als ns --> joystick nach unten
B = Ywert - Ystandart
B = 300 - B
B = B / 10
Ydirectionf = 0 '^^
If B < 1 Then 'damit die anzahl die milisekunden nicht unter 1 geht (der motor kann nicht schneller drehen als einen schritt pro ms)
B = 1
End If
End If
'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
'XXXXX --- MOVE --- XXXXXXXXXXXXXX
If A < Minmove Then 'wenn der A wert kleiner ist als die minmove variable dann dreht sich der motor:
If Xdirectionf = 1 Then 'wenn die richtung = 1 ist : folgen die ausgänge für den motor sich links zu drehen
Xtime = Xtime + 1
If Xtime = 5 Then
Xtime = 1
End If
If Xtime = 1 Then
Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
Portb.3 = 0
Elseif Xtime = 2 Then
Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
Elseif Xtime = 3 Then
Portb.0 = 0
Portb.1 = 1
Portb.2 = 0
Portb.3 = 1
Elseif Xtime = 4 Then
Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0
End If
Else 'wenn die richtung = 0 ist : folgen die ausgänge für den motor sich rechts zu drehen
Xtime = Xtime + 1
If Xtime = 5 Then
Xtime = 1
End If
If Xtime = 1 Then
Portb.0 = 1
Portb.1 = 0
Portb.2 = 1
Portb.3 = 0
Elseif Xtime = 2 Then
Portb.0 = 0
Portb.1 = 1
Portb.2 = 1
Portb.3 = 0
Elseif Xtime = 3 Then
Portb.0 = 0
Portb.1 = 1
Portb.2 = 0
Portb.3 = 1
Elseif Xtime = 4 Then
Portb.0 = 1
Portb.1 = 0
Portb.2 = 0
Portb.3 = 1
End If
End If
Waitms A '<<<< PROBLEM! B + A vvv = Für beide Motoren die gleiche, zu lange wartezeit
End If
'XXXXX --- MOVE --- XXXXXXXXXXXXXX
'YYYYY --- MOVE --- YYYYYYYYYYYYYY
If B < Minmove Then
If Ydirectionf = 1 Then '^^
Ytime = Ytime + 1
If Ytime = 5 Then
Ytime = 1
End If
If Ytime = 1 Then
Portd.0 = 1
Portd.1 = 0
Portd.2 = 1
Portd.3 = 0
Elseif Ytime = 2 Then
Portd.0 = 1
Portd.1 = 0
Portd.2 = 0
Portd.3 = 1
Elseif Ytime = 3 Then
Portd.0 = 0
Portd.1 = 1
Portd.2 = 0
Portd.3 = 1
Elseif Ytime = 4 Then
Portd.0 = 0
Portd.1 = 1
Portd.2 = 1
Portd.3 = 0
End If
Else '^^
Ytime = Ytime + 1
If Ytime = 5 Then
Ytime = 1
End If
If Ytime = 1 Then
Portd.0 = 1
Portd.1 = 0
Portd.2 = 1
Portd.3 = 0
Elseif Ytime = 2 Then
Portd.0 = 0
Portd.1 = 1
Portd.2 = 1
Portd.3 = 0
Elseif Ytime = 3 Then
Portd.0 = 0
Portd.1 = 1
Portd.2 = 0
Portd.3 = 1
Elseif Ytime = 4 Then
Portd.0 = 1
Portd.1 = 0
Portd.2 = 0
Portd.3 = 1
End If
End If
Waitms B '<<<< PROBLEM! B + A^^^= Für beide Motoren die gleiche, zu lange wartezeit
End If
'YYYYY --- MOVE --- YYYYYYYYYYYYYY
Loop
Lesezeichen