Stepper mit Knopf starten funktioniert nicht

Hallo, brauche wieder mal Hilfe. Ich möchte eigentlich mit einen einfachen Encoder einen Stepper drehen. Als ersten Versuch, wollte ich mit einem Button den Stepper einfach eine feste Anzahl an Schritten machen lassen. Ist Button HIGH, dann mach 100 Schritte, Forward, Single. Leider funktiont der Code nicht, wo liegt mein Fehler? Der Stepper ist an Adafriut Shield angeschlossen und funktioniert(Stepper_Test sketch)

#include "Encoder.h"
#include "AFMotor.h"


AF_Stepper motor1(200, 2);
Encoder myEnc(4, 15);
const int Knopf = 14;
int tasterStatus = 0;
const int ledPin =2;
void setup()
{
    pinMode(Knopf, INPUT);
    pinMode(ledPin, OUTPUT);
    motor1.setSpeed(50);  // 50 rpm
    Serial.begin(9600);
}



void loop()
{
    tasterStatus = digitalRead(Knopf);
    if(tasterStatus == HIGH)
    {
        motor1.step(100,FORWARD, SINGLE);
        digitalWrite(ledPin, HIGH);

    }
    else
    {
        digitalWrite(ledPin,LOW);
    }

    Serial.println(tasterStatus);

}

Die LED leuchtet, wenn der Button gedrückt wird, nur der Stepper bleibt stumm.

Gruß Marco

Mal abgesehen davon, dass ich (noch) keinerlei Steppererfahrung habe zumindest ein paar Hinweise - Tasterstatus besser als boolean deklarieren - der Taster schaltet offenbar aktiv high. Wie ist der angeschlossen? - Taster auch immer entprellen, siehe Debounce

Grüße Klaus

Der Taster hat einen PullDown Widerstand und funktioniert ohne Probleme. Ich habe nun die ganze Nacht im Netz gesucht aber nichts brauchbares gefunden. Wenn ich es richtig verstanden habe, sollte bei"motor1.step(100, Forward, Single)" der Code diese Funktion ab arbeiten und dann erst weiter machen.Der folgende Test sketch funktioniert und der Stepper dreht

#include <AFMotor.h>

AF_Stepper motor1(200, 2);

void setup()
{
  motor1.setSpeed(50); 
}

void loop()
{
  motor1.step(100, FORWARD, SINGLE);
  delay(2000);
 }

.

Bei dem ersten sketch, funktioniert die LED wenn ich den Knopf drücke aber der stepper bleibt stumm.
Ich hatte auch versucht es in einer einzelnen Funktion auszulagern, hatte aber auch keinen Erfolg.
Entprellen sollte bei dem Test keine Rolle spielen. Er soll auf das erste HIGH reagieren.

Kann mir jemand helfen? :frowning:

Gruß Marco

Warum gehts nun doch?! :astonished:

#include <AFMotor.h>

int knopf = 14;

AF_Stepper motor1(200, 2);

void setup()
{
  motor1.setSpeed(50); 
  pinMode(knopf, INPUT);
}

void loop()
{
 if(digitalRead(knopf) == HIGH)
 {
  motor1.step(100, FORWARD, SINGLE);
 }
  delay(20);
}

Liegt es an dem { } bei motor1.step?
Jemand eine Idee?

Gruß Marco

Auch ich kenne mich mit der Steppermotor lib nicht aus, aber was mir auffällt:

im funktionierenden Beispiel hast du nach dem motor1.step befehl 20ms Pause, in der der Befehl abgearbeitet werden kann.
In deinem ersten Code wir der befehl motor1.step ständig aufgerufen, solange der Taster gedrückt wird.