Arduino mit Stepper Motor und A4988 Driver

Hallo freunde des fröhlichen Schaffens.

Leider bin ich noch neu beim programmieren von Arduino Codes. Ich versuche mich trotzdem und nehme mir Codes zu Hilfe die bereits geschrieben sind. Nun zu meinem Problem. Ich möchte einen Stepper Motor mit 2 Buttons steuern. Einer pro Richtung. Solange ich ihn drücke verfährt der Motor, lasse ich ihn los, so stoppt der Motor.

Mein Code dafür sieht wie folgt aus. ( ich benutze die accelstepper library und den A4988 driver)

#include <AccelStepper.h>
#define ButtonUp A0
#define ButtonDown A1

AccelStepper stepper (1,7,6); // (driver,step,dir)

int currentSpeed=100;

void setup() {
    stepper.setMaxSpeed (3000);
    stepper.setSpeed (200);

    pinMode (ButtonUp, INPUT_PULLUP);
    pinMode (ButtonDown, INPUT_PULLUP);

}

void loop() {

    if (digitalRead(ButtonUp) == HIGH){
      stepper.setSpeed(300);
      stepper.run();
      }

    if (digitalRead(ButtonDown) == HIGH){
      stepper.setSpeed(-300
     );
      stepper.run();
      }

}

Nun habe ich natürlich auch eine fritzing Zeichnung angelegt. Diese sieht wie folgt aus.

Wenn ich nun die Schaltung in Betrieb nehme, dann funktioniert es sogar. Jedoch wenn ich die Geschwindigkeit erhöhe, dann fängt der Stepper an sich ununterbrochen zu drehen, und wenn ich die jeweiligen Button drücke, dann dreht er sich zwar in die andere Richtung aber beim los lassen dreht er sofort wieder in die andere Richtung weiter.
Es kommt erschwerend hinzu das der Motor vibriert wenn er sich nicht dreht (kein Button) gedrückt.

Kann mir da zufällig jemand sagen wo der Fehler liegt. Ich bin da noch nicht so bewandert aber ich könnte mir vorstellen das die PullUp widerstände zu hoch sind und es eventuell dadurch zu Komplikationen kommen kann. Eventuell ist mein Code aber auch nur einfach kompletter schwach sinn.

Hier ein paar Daten:

Stepper motor:
-NEMA 17 bipolar
-1A

Netzteil:
-12V
-2A
-24.0 W

Widerstand:
-5k

Capacitor:
-100 mikrofarat

Die spannungsquelle ist rechts auf der Fritzingschaltung mit 12 V Angeschlossen.

Mit freundlichen Grüßen, TISCO

Aber wohl nicht so, wie du deinen Plan beschreibst.
-> Ich sehe nicht, wie der Motor im Sketch jemals gestoppt wird.
-> Deine Taster stellen evtl, wenn gedrückt, eine Verbindung zur unteren GND-Schiene deines Steckbretts her, daher tut sich etwas beim Drücken ?

Verbinde bitte die beiden GND Schienen auf dem Steckbrett und bedenke, dass ein INPUT_PULLUP - Taster als "gedrückt" als LOW erkennt.

Wenn Du mit pullups arbeitest, und die Taster nach Gnd anschließt, musst Du die Taster auf LOW abfragen. Denn wenn Du den Taster drückst, legt Gnd(=0V, =LOW) an den Pin)

    if (digitalRead(ButtonUp) == LOW){

Bei der 'run'-Methode erwartet die AccelStepper, dass Du eine Zielposition angibst. Wenn Du einfach mit der bei 'speed' vorgegebenen Geschwindigkeit drehen willst, musst Du 'runSpeed' verwenden. Dann gibts aber keine Beschleunigungs oder Bremsfunktion.

Vielen dank, jetzt sehe ich es auch, die beiden GND schienen sind in der Fritzing Schaltung nicht verbunden. Auf meinem breadboard jedoch sind sie es schon.
Witzigerweise funktioniert die Schaltung wenn ich sie auf die Geschwindigkeit von 300 einstelle. Das scheint aber einfach nur ein dummer Zufall zu sein.

Ich werde es direkt einmal ausprobieren.

LG

Okay, Perfekt ich danke für den Input und werde es direkt ändern.

LG

Vielen lieben dank. Die Schaltung funktioniert nun.