/*****************************************************************************************************************************
Torsteuerung des Vollmer Lokschuppen 45752 mittels eines Linearen bipolaren Stepper über 4 Pins und eine H-Brücke.
/*****************************************************************************************************************************
*/
#define MAX8BUTTONS // spart Speicher, da nur 4 Taster benötigt werden (saves RAM)
#include <MobaTools.h>
const byte button1Pin = A1;
const byte button2Pin = A2;
const byte button3Pin = A3;
const byte button4Pin = A4;
int aktpos; // aktuelle Stepper position
long posZu = 0;
long posAuf = 2300;
const int FULLROT1 = 800; //Stepper einrichten ( 800 Schritte / Umdrehung )
MoToStepper Step1(FULLROT1); // HALFSTEP ist default
const byte stPn[] = { 2, 4, 3, 5 }; // bei bipolarem Stepper (4-Draht) über eine H-Brücke müssen gegebenenfalls die inneren Pins
// vertauscht werden (Spule 1: 1. und 3. Pin, Spule 2: 2. und 4. Pin)
enum { Button1 = 0, Button2, Button3, Button4 }; // Den Tasternamen die Indizes 0...3 zuordnen
const byte buttonPins[] = { button1Pin, button2Pin, button3Pin, button4Pin }; // muss als byte definiert sein, damit ein enfaches sizeof funktioniert
MoToButtons button(buttonPins, sizeof(buttonPins), 20, 500);
void setup() {
Serial.begin(9600);
Serial.println("Stepper test!");
Step1.attach(stPn[0], stPn[1], stPn[2], stPn[3]); // Anschluß an digitalen Ausgängen
Step1.setSpeed(300); // Steppergeschwindigkeit
Step1.setRampLen(FULLROT1 / 4); // = 1/4 Umdrehung
Step1.attachEnable( 50 ); // Motor nach der Bewegung abschalten
}
void loop() {
button.processButtons(); // Taster einlesen
if (button.pressed(Button1)) { // Taster1 gedrückt (Tor schließen Referenzpunkt einstellen)
Step1.rotate(1); // Motor 1 schließt Tor
}
if (button.released(Button1)) { // Taster1 losgelassen
Step1.rotate(0); // Stepper stoppt
Step1.setZero(); // Referenzpunkt setzen
aktpos = Step1.currentPosition();
Serial.println(aktpos);
}
if (button.pressed(Button2)) { // Taster2 gedrückt (Tor öffnen Referenzpunkt einstellen)
Step1.rotate(-1); // Motor 1 öffnet Tor
}
if (button.released(Button2)) { // Taster2 losgelassen
Step1.rotate(0); // Stepper stoppt
Step1.setZero(); // Referenzpunkt setzen
aktpos = Step1.currentPosition();
Serial.println(aktpos);
}
if (button.pressed(Button3)) { //Tor schließen
Step1.moveTo(posZu); // zur Position 'ZU', Tor schließt
}
if (button.pressed(Button4)) { // Tor öffnen
Step1.moveTo(posAuf); // zur Position 'AUF', Tor öffnet
}
}