#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <string.h>
#define MAX8BUTTONS // spart Speicher, da nur 4 Taster benötigt werden (saves RAM)
#include <MobaTools.h>
// Pindefinitions - change to your needs
const byte dirPin01 = 2;
const byte stepPin01 = 3;
const byte enaPin01 = 4;
const byte dirPin = 5;
const byte stepPin = 6;
const byte enaPin = 7;
const byte button1Pin = A2;
const byte button2Pin = A1;
const byte button3Pin = A3;
const byte button4Pin = A0;
const byte potPin = A7; // must be an analog input
#define OLED_RESET A4 // Pin, an dem das OLED-Display zurückgesetzt wird
const int STEPS_REVOLUTION =800;
//Stepper einrichten ( 800 Schritte / Umdrehung - 1/4 Microstep )
MoToStepper myStepper( STEPS_REVOLUTION, STEPDIR ); // 800 Steps/ Umdrehung
MoToStepper myStepper01( STEPS_REVOLUTION, STEPDIR ); // 800 Steps/ Umdrehung
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// Taster einrichten
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 );
MoToTimebase speedIntervall; // Zeitinterval zum Auslesen des Speedpotentiometers
// the speed pot ist read only every 'speedintervall' ms
int vspeed = 0; //Steppergeschwindigkeit in U/min*10
const char *currentDirection = "";
void displayDirection(const char *direction); // Vorwärtsdeklaration
void setup(){
myStepper.attach( stepPin, dirPin );
myStepper.attachEnable( enaPin, 10, LOW ); // Enable Pin aktivieren ( LOW=aktiv )
myStepper.setSpeed( 200 );
myStepper.setRampLen( 100); // Rampenlänge 100 Steps bei 20U/min
speedIntervall.setBasetime( 100 ); // 100ms Tickerzeit
myStepper01.attach( stepPin01, dirPin01 );
myStepper01.attachEnable( enaPin01, 10, LOW ); // Enable Pin aktivieren ( LOW=aktiv )
myStepper01.setSpeed( 200 );
myStepper01.setRampLen( 100); // Rampenlänge 100 Steps bei 20U/min
speedIntervall.setBasetime( 100 ); // 100ms Tickerzeit
}
void loop() {
button.processButtons(); // Taster einlesen und bearbeiten
// Speed alle 100ms neu einlesen und setzen
if ( speedIntervall.tick() ) {
// wird alle 100ms aufgerufen ( Tickerzeit = 100ms im setup() )
vspeed = map((analogRead(potPin)), 0, 1023, 20, 1800); //Poti mappen auf 2 ... 180 Umdr/Min
//min speed =2 and max speed =180 rpm
myStepper.setSpeed( vspeed );
myStepper01.setSpeed( vspeed);
}
// Drehen rechtsrum
if (button.pressed(Button1) ) {
//Taster1 gedrückt
myStepper.rotate( 1 ); // Stepper dreht
}
if ( button.released(Button1) ){
//Taster1 losgelassen
myStepper.rotate(0); // Stepper stoppt
}
//Drehen linksrum
if (button.pressed(Button2) ) {
//Taster2 gedrückt
myStepper.rotate( -1 ); // Stepper dreht rückwärts
}
if ( button.released(Button2) ) {
//Taster2 losgelassen
myStepper.rotate(0); // Stepper stoppt
}
//Stepper01
// Drehen rechtsrum
if (button.pressed(Button3) ) {
//Taster1 gedrückt
myStepper01.rotate( 1 ); // Stepper dreht
}
if (button.released(Button3) ){
//Taster1 losgelassen
myStepper01.rotate(0); // Stepper stoppt
}
//Drehen linksrum
if (button.pressed(Button4) ) {
//Taster2 gedrückt
myStepper01.rotate( -1 ); // Stepper dreht rückwärts
}
if (button.released(Button4) ) {
//Taster2 losgelassen
myStepper01.rotate(0); // Stepper stoppt
}
}