Schrittmotor einfach drehen- Arduino?

1 Antwort

Oh man... Packe bitte den Code immer in die Quellcode-Box... Das ist übersichtlicher (Hab das mal bearbeitet und zur Änderung eingeschickt)...

Du brauchst ja eig nur abfragen, ob der Taster gedrückt ist, und den Code ausführen, damit der Motor sich weiter dreht. Du brauchst keine For-Schleife...

If(Buttonpressed=true){
Schrittmotor 10 Schritte weiter drehen
}

Sobald der Taster nicht mehr gedrückt wird, wird auch der Motor nicht mehr 10 Schritte weiter gedreht... Ohne Delay ect, sollte theoretisch so passen... Hab allerdings noch nie nen Schrittmotor angesteuert... Ist nur aus der Überlegung heraus...

Arazhulhd66 
Fragesteller
 18.06.2019, 14:21

Dankeschön für deine Mühe, soweit hilfreich, aber ich will ja sagen, er soll sich solange drehen, wie ich gedrückt halte und nicht nur um bestimmte Schritte.

Außerdem wenn man das so schreibt, heißt es drehe dich um 10 Schritte, wenn der Knopf gedrückt ist, also dreht er sich weiter bis halt die 10 Schritte durch sind, auch wenn nur einmal gedrückt wurde, oder nicht?

:D Bitte darauf antworten.

0
RareDevil  18.06.2019, 14:36
@Arazhulhd66

So lange die If(gedrückt) erfüllt ist, solange wird der Code dahinter ausgeführt. Wenn der Code nur heißt, drehe 10 Schritte, wird in jedem Zyklus 10 Schritte weiter gedreht. Ist der Taster nicht mehr gedrückt, werden auch die 10 Schritte nicht mehr ausgeführt. Da der Controller pro ms einige Zyklen schafft, wird der Code also ununterbrochen ausgeführt. Also dreht der Motor solange, wie der Taster gedrückt wird.

Quellcode kannst Du im Texteingabefeld aktivieren. Du hast beim schreiben dieses Tt im Kasten rechts. Da gibt es div Funktionen wie Fett schreibe, Schräg gstellt, Zitieren, Unterstrichen ect... Und eben auch Quelltext </> ist das Symbol für die Quelltextbox...

0
RareDevil  18.06.2019, 14:43
@RareDevil

Sollte es tatsächlich so sein, das die PS2X-Bibliothek den Buttonpressed nur einmal auswertet und kurz als Impuls setzt, würde ich eine Variable mit Buttonpressed auf "true" setzen und mit Buttonreleased auf "false" setzen und diese Variable in der If abfragen, die den Motor weiter dreht... Das ist dann vom Veralten der PS2X-Bibliothek abhängig. Wobei ich mir das fast nicht vorstellen kann, das der Controller so verarbeitet wird, das man sich die Statusänderungen immer speichern muss...

0
RareDevil  18.06.2019, 14:51
@RareDevil

Nochmal ich... Wenn ich das Beispiel richtig verstehe, das bei der Bibliothek bei ist, dann ist die Abfrage "ps2x.Button" solange wahr, so lange die Taste gedrückt ist, die Abfrage "ps2x.ButtonPressed" nur beim drücken einmal, und die Abfrage "ps2x.ButtonReleased" nur beim los lassen einmal... Du kannst entsprechend dann auf "ps2x.Button" prüfen, so lange also die Taste gedrückt ist, wird das folgende immer wieder ausgeführt...

Es gibt noch "ps2x.ButtenNewState" was sowohl beim drücken, wie auch beim loslassen einmal ein HIGH raus gibt.. Also Statusänderungen in jede Richtung als Impuls erfasst...

1
Arazhulhd66 
Fragesteller
 18.06.2019, 15:21
@RareDevil

Danke, dir. Ich werde das mal ausprobieren... Falls es nicht fkt., kann es sein das ich erst in den nächsten Tagen antworte, dann wäre es cool, wenn du dir dann nochmal Zeit nehmen könntest. :D

1
Arazhulhd66 
Fragesteller
 18.06.2019, 17:35
@RareDevil

Ok, habe jetzt einiges ausprobiert, bin zum Entschluss gekommen, dass es am coolsten ist, wenn ich, das über die Analog Sticks mache. Problem: Habe absolut keine Ahnung, wie man die programmiert und damit die SG90 Servos steuert. Ich will halt letzten Endes meinen Analog Stick nach links bewegen und der Servo dreht sich solange in die Richtung bis ich loslassen, dann soll er stehen bleiben. Hast du eine Ahnung, wie man das machen kann? Also ist egal, welcher Stick am Controller, ob linker oder Rechter, nur ein kleine Idee (loop- Teil mit if oder for Bedingung??? ) wäre nett. Bis dann! 🖖 Danke an dich, falls du antwortest, scheinst ja viel Ahnung zu haben.

0
Arazhulhd66 
Fragesteller
 18.06.2019, 17:36
@RareDevil

Also kein Schrittmotoe mehr, sondern jetzt ein Servo.

0
RareDevil  18.06.2019, 17:45
@Arazhulhd66

Ui, soll der Stick also auch analog eingelesen werden, so das sich der Servo verschieden schnell dreht? Oder nur eine Geschwindigkeit, egal wie weit der Stick in die Richtung gedrückt wird? Und der Servo soll in der Position bleiben, wenn Du wieder los lässt, wo er gerade ist, also nicht automatsich wieder mit dem Stick in Nullstellung gehen...

Wäre immer noch eine If... Ohne Geschwindigkeitsabhängigkeit den Stick einlesen, ob er nach rechts oder links gedrückt wurde.

Der Servo wird mir der Servolibrary in Winkel angesprichen. Also 0-180, 90 ist Mittelstellung...

Du musst also nur über eine If, den Winkel hoch/runter zählen...

If(Sticklinks && Winkel >= 0){
Winkel=Winkel-1;
Delay 20;
}

If(Stickrechts && Winkel <= 180){
Winkel=Winkel+1;
Delay 20,
}

servo(Winkel)

Entsprechend dann die richtigen Abfragen, variablen ect einsetzen...

servo ist dann der Befehl, den Servo anzusteuern, und die If sind verknüpft mit den Endanschlägen, damit nicht ins negative oder über 180 raus gezählt wird... 20ms Verzögerung, um eine gewisse Zeit reinzubekommen, dmait der nicht direkt auf 180 oder 0 zählt... So ein Arduino ist schnell in der Abarbeitung... :)

0
Arazhulhd66 
Fragesteller
 19.06.2019, 05:59
@RareDevil

Ok, habe ich verstanden, möchte nur, dass ich den Stick z. B. nach links bewege, der Servo sich dreht und dann dort bleibt. (Ich steuere damit /will damit später einen Roboterarm steuern.). Gilt hoffentlich wieder gleiches, ich probiere mal alles und du könntest mir dann später auf Probleme antworten. Hat mir bisher sehr weitergeholfen, aber noch nicht bis zu dem Punkt, wo ich hinwill. Danke, hoffe auf weitere Antworten. :D

1
Arazhulhd66 
Fragesteller
 18.06.2019, 14:22

Wie komme ich eigentlich zur Quellcodebox?

0