Hallo zusammen,
ich bin Arduino-Anfänger und sitze gerade an folgendem Problem. Es geht um die Ansteuerung eines Schrittmotors. Dieser soll nach dem betätigen eines Tasters (PIN 7) seine 2000 Schritte fahren und danach stehen bleiben. Ebenso soll ein weiteres Taster Signal (PIN 5) den Motor in seinem Lauf jederzeit stoppen können.
Nach dem Betätigen des Tasters an Pin 5 startet der Motor wie gewollt, jedoch lässt er sich nicht durch den zweiten Taster stoppen, sondern läuft immer seine volle Schrittzahl ab.
Das Programm soll noch um einen zweiten Motor und weitere Taster und Sensoren ergänzt werden, daher ist einiges auskommentiert. Aber erst einmal sollte diese Abfrage funktionieren, auf der ich dann aufbauen möchte.
#include <Stepper.h>
int SchritteProUmdrehung = 200;
Stepper StepperM1 = Stepper(SchritteProUmdrehung, 10, 11); // M1 ist der Motor unten rechts
//Stepper = StepperM2(200,12,13); // M2 ist der Motor links oben
void setup()
{
StepperM1.setSpeed(100);
Serial.begin(9600);
pinMode(5,INPUT_PULLUP); // Stoptaster
pinMode(7,INPUT_PULLUP); // Starttaster
//pinMode(6,INPUT); // Endlage "Nullstellung M2"
//pinMode(8,INPUT_PULLUP); // Taster für das Anfahren der ArbeitsstellungM1
//pinMode(9,INPUT_PULLUP); // Taster für das Anfahren der ArbeitsstellungM2
pinMode(4, OUTPUT); // Sleep&Reset
pinMode(3, OUTPUT); // Enable
digitalWrite(4, HIGH); // Sleep&Reset deaktiviert
digitalWrite(3, LOW); // Enable auf low -> Chip aktiv
}
void loop()
{
//bool NullstellungM1Erreicht = digitalRead(5);
//bool NullstellungM2Erreicht = digitalRead(6);
//int ArbeitstellungM1Erreicht = analogRead(54);
//int ArbeitstellungM2Erreicht = analogRead(55);
//bool TasterNullstellung = digitalRead(7);
//bool TasterArbeitsStellungM1 = digitalRead(5);
//bool TasterArbeitsstellungM2 = digitalRead(9);
bool MotorStop = LOW;
while ((digitalRead(7) == LOW) && MotorStop == LOW)
{
Serial.println("Motorlauf gestartet");
StepperM1.step(-2000);
if (digitalRead(5) == LOW)
{
MotorStop = HIGH;
Serial.println("Motorlauf unterbrochen");
}
Serial.println("Motorlauf beendet");
}
}
Mein letzter Ansatz war, einen Merker als zusätzliche Schleifenbedingung abzufragen, der in der Schleife gesetzt wird, sobald der zweite Taster betätigt wird.
Leider war auch das ohne Erfolg.
Ich bin für eure Tipps und Ratschläge dankbar.
Viele Grüße