Ist ja recht einfach.
Ich hatte das ja schon in Eingabe und Ausgabe unterteilt.
So! Hier mit Restartsperre und aufgeteilt.#
#include <Stepper.h>
const byte EingabePin = 0;
const byte AusgabePin = LED_BUILTIN;
const bool links = LOW;
boolean isInStep = false;
boolean isPressed = false;
boolean dir = links;
const int stepsUmdrehung = 200;
Stepper myStepper(stepsUmdrehung, 8, 9, 10, 11);
void setup()
{
Serial.begin(9600);
Serial.println(F("Start..."));
pinMode(EingabePin, INPUT);
pinMode(AusgabePin, OUTPUT);
myStepper.setSpeed(50);
}
void loop()
{
myInput();
myOutput();
}
void myInput()
{
if (isInStep == false) // nur wenn Antrieb inaktiv
{
if (digitalRead(EingabePin) == HIGH) // Wenn Eingang aktiv
{
if (isPressed == false) // und vorher nicht
{
Serial.println(F("Tastendruck erkannt!"));
isPressed = true; // merken, das gedrückt
dir = !dir; // Richtung setzen
Serial.print(F("Drehrichtung: "));
Serial.println(dir == links ? "links" : "rechts");
isInStep = true; // Bewegung setzen
}
}
else // Taste losgelassen
{
isPressed = false; // Merker löschen
}
}
myStepper.step(0);
}
void myOutput()
{
if (isInStep == true) // Antrieb gesetzt ?
{
Serial.println(F("Bewegung gestartet"));
dir == links ? myStepper.step(10) : myStepper.step(-10);
isInStep = false; // Antrieb inaktiv setzen
}
}