////////// Example Reference for MoToStepper - attaching a bipolar stepper with step/dir and enable ////////////
// https://github.com/MicroBahner/MobaTools/blob/master/examples/_Stepper/Stepper_Slider/Stepper_Slider.ino
// https://wokwi.com/projects/410130616118973441
// for https://forum.arduino.cc/t/wokwi-simulations-for-arduino-built-in-examples/1304754/6
/* Demo zum Anschluß eines unipolaren Stepmotors 28BYJ-48
mit Verwendung einer Beschleunigungsrampe
Slider-Minimalprogramm: Endposition - Startposition - Bewegung von Start- zu Endposition
Dieses Beispiel läuft nicht auf ESP8266
Danke an 'agmue' vom arduino.cc Forum für dieses Beispiel
*/
#include <MobaTools.h>
MoToStepper Step1(4096); // HALFSTEP ist default
const byte linksPin = 8, rechtsPin = 9, weiterPin = 10;
void setup() {
Serial.begin(9600);
Serial.println("Anfang");
pinMode(linksPin, INPUT_PULLUP); // aktiv LOW
pinMode(rechtsPin, INPUT_PULLUP); // aktiv LOW
pinMode(weiterPin, INPUT_PULLUP); // aktiv LOW
Step1.attach( 4, 5, 6, 7 ); // Anschluß an digitalen Ausgängen; Treiber IN1,IN2,IN3,IN4
Step1.setSpeed( 60 ); // = 6 U/Min
}
void loop() {
enum {ENDPOSITION, STARTPOSITION, BEWEGUNG};
static byte status; // Schrittkettenstatus
static bool alt = digitalRead(weiterPin), akt = digitalRead(weiterPin);
alt = akt;
akt = digitalRead(weiterPin);
if (alt != akt) {
delay(30); // einfaches Entprellen
}
switch (status) {
case ENDPOSITION:
if (!digitalRead(linksPin)) {
Step1.doSteps(10);
} else if (!digitalRead(rechtsPin)) {
Step1.doSteps(-10);
} else if (alt && !akt) {
Step1.setZero(); // Endpunkt für Motor 1 setzen
Serial.println("STARTPOSITION");
status++;
} else {
Step1.stop();
}
break;
case STARTPOSITION:
if (!digitalRead(linksPin)) {
Step1.doSteps(10);
} else if (!digitalRead(rechtsPin)) {
Step1.doSteps(-10);
} else if (alt && !akt) {
Step1.setSpeed( 240 ); // = 24 U/Min
Step1.setRampLen(500); // Beschleunigung
Step1.write(0); // Bewegung zu Endpunkt
Serial.println("BEWEGUNG");
status++;
} else {
Step1.stop();
}
break;
case BEWEGUNG:
if ( !Step1.moving() ) { // warten bis die Bewegung abgeschlossen ist
Step1.setSpeed( 60 ); // = 6 U/Min
Step1.setRampLen(0); // Beschleunigung
Serial.println("ENDPOSITION");
status = 0;
}
break;
default:
status = 0;
}
}
Rechts/Right
Links/Left
Weiter/Next
1) Set EndPosition
2) Set StartPosition
3) Run