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







Zitieren

Lesezeichen