#include <MobaTools.h>
#include <EEPROM.h>
#define STEPS 4096 // Anzahl der Schritte des Motores ( 28BYJ-48 )
const byte Geschwindigkeit = 70; // Geschwindigkeit vom Stepper
int untererEndpunkt = -540;
const long obererEndpunkt = -20;
const byte endschalterPin = 3; // Zur Feststellung der Endposition - der Schalter verbindet den Pin mit GDN, wenn der Stepper die Lichtschranke erreicht hat
const byte Taster = 4; // Lichtschranke für Referenz
const byte JustageTaster = 18;
byte tasterState = HIGH;
MoToStepper stepper(STEPS, HALFSTEP); // Einrichten des Steppers
void setup() {
Serial.begin(115200);
stepper.attach(14, 15, 16, 17); // Nr. der Pins für den Stepper
stepper.attachEnable(100);
pinMode(endschalterPin, INPUT_PULLUP); // Lichtschranke schaltet nach Gnd
pinMode(Taster, INPUT_PULLUP); // Taster für Stepperbewegung schaltet nach Gnd
pinMode(JustageTaster, INPUT_PULLUP);
stepper.setSpeed(10); // Geschwindigkeit in RPM*10
stepper.rotate(1); // Die Drehrichtung muss hin zum Schalter sein! 1 = gegen den UZS, -1 = im UZS
while (digitalRead(endschalterPin) == HIGH); // Warten bis der Endschalter anspricht
stepper.rotate(0); // anhalten
delay(500);
stepper.setZero(); // Momentane Position als Nullpunkt einrichten
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
EEPROM.get(0, untererEndpunkt); // Initialisierung der Stepper-Positionen aus dem EEPROM
}
void loop() {
// ------------------------- Justage -------------------------------
if (digitalRead(JustageTaster) == LOW) {
stepper.setSpeed(3); // Geschwindigkeit in RPM*10
stepper.rotate(-1); // Langsames Weiterdrehen des Steppers während Justage
while (digitalRead(JustageTaster) == LOW );
stepper.stop();
untererEndpunkt = stepper.readSteps(); // Speichern der neuen Position in der Variablen
EEPROM.put(0, untererEndpunkt); // Speichern der neuen Position im EEPROM Nummer "0"
stepper.setSpeed(Geschwindigkeit);
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
}
// ------------------------ normaler Ablauf -------------------------
if (digitalRead(Taster) == LOW && tasterState == HIGH) {
tasterState = LOW;
Serial.print("zum unteren Endpunkt: "); Serial.println(stepper.readSteps() );
stepper.setSpeed(Geschwindigkeit / 2);
stepper.writeSteps(untererEndpunkt); // zum unteren Endpunkt bewegen
}
if (digitalRead(Taster) == HIGH && tasterState == LOW) {
tasterState = HIGH;
Serial.println("zum oberen Endpunkt");
stepper.setSpeed(Geschwindigkeit);
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
}
//delay(20); //Taster entprellen
}