Hallo zusammen,
ich habe hier einen kleinen Teil für ein Projekt bei dem es um eine
Toranlage (Modellbau) geht.
Die eigentliche Steuerung via IR funktioniert und das ist nicht mein Problem.
Allerdings soll der kleine Schrittmotor (5V- 28BYJ-48) beim Anfahren eines Reed-Schalters
sofort stoppen und ein kleines Stück zurück drehen um den Schalter wieder freizugeben.
Ich hänge gerade an der Position, dass der Motor beim Einschalten quasi das Tor hochfährt aber erst stoppt, wenn der Vorgang, sprich alle Schritte abgefahren sind.
Dann löst der Reed aus und fährt korrekt die paar Schritte zurück.
Dann verharrt er in dieser Position.
#include <AccelStepper.h>
int reed_schalter;
int led_green;
int led_red;
bool marker;
AccelStepper stepper(AccelStepper::FULL4WIRE, 8, 10, 9, 11); // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
void setup()
{
reed_schalter = 12;
led_red =2;
led_green = 3;
pinMode(led_green, OUTPUT);
pinMode(led_red, OUTPUT);
pinMode(reed_schalter, INPUT_PULLUP);
stepper.setMaxSpeed(1000);
stepper.setAcceleration(500);
}
void loop()
{
if (digitalRead(reed_schalter) == HIGH) // Wenn Reed Schalter geschlossen ist
{
if (marker == false)
{
marker = false;
digitalWrite(led_green, HIGH);
digitalWrite(led_red, LOW);
stepper.runToNewPosition(2048); // Tor offen
stepper.stop();
}
}
else
{
marker = true;
digitalWrite(led_green, LOW);
digitalWrite(led_red, HIGH);
stepper.stop();
stepper.runToNewPosition(1800); // Tor zurück um Reed freizugeben
stepper.stop();
}
}
Die LED´s habe ich nur mal zur Visualisierung eingebaut, kommen hernach wieder weg.
Wie kann ich den Verfahrvorgang sofort stoppen, nicht erst, wenn die Schrittzahl abgefahren ist?
Herzliche Grüße
Chris