#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
#include <MobaTools.h>
#define potentiometer A0 //10k Variable Resistor
#define bt_C A1 // Clockwise Button
#define bt_S A2 // Stop Button
#define bt_AC A3 // Anticlockwise Button
#define bt_E1 11 // Stop Button
#define bt_E2 12 // Stop Button
#define dirPin 8 //8Pin of Arduino--Direction of stepper motor driver
#define stepPin 9 //9Pin of Arduino--Step of stepper motor driver
#define enPin 10 //10Pin of Arduino--Enabled of stepper motor driver
int read_ADC;
int Speed_LCD, Speed_Delay;
int Mode=2, flag=0, flagE1=0, flagE2=0, firstL=1, firstR=1, gesperrtL=0, gesperrtR=0;
const int STEPS_UMDREHUNG = 1600;
const long maxSpeed = 900; //U/min
const long maxWiederstand = 675; //Ohm
const long rampLen = 500; //Steps
MoToStepper myStepper( STEPS_UMDREHUNG, STEPDIR );
MoToTimebase speedIntervall;
void setup() { // put your setup code here, to run once
Serial.begin(9600); while (!Serial);
speedIntervall.setBasetime( 100 );
pinMode(potentiometer, INPUT); // declare potentiometer as input
pinMode(bt_C, INPUT_PULLUP); // declare bt_C as input
pinMode(bt_S, INPUT_PULLUP); // declare bt_S as input
pinMode(bt_AC, INPUT_PULLUP); // declare bt_B as input
pinMode(bt_E1, INPUT_PULLUP); // declare bt_E1 as input
pinMode(bt_E2, INPUT_PULLUP); // declare bt_E2 as input
pinMode(dirPin, OUTPUT); // declare as output for Direction of stepper motor driver
pinMode(stepPin, OUTPUT); // declare as output for Step of stepper motor driver
pinMode(enPin, OUTPUT); // declare as output for Enabled of stepper motor driver
myStepper.setRampLen( rampLen );
myStepper.attach( stepPin, dirPin );
myStepper.attachEnable( enPin, 10, LOW ); // Enable Pin aktivieren ( LOW=aktiv )
myStepper.setSpeed(map(read_ADC, 0, maxWiederstand, 0, maxSpeed));
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print(" -------------- ");
lcd.setCursor(0,1);
lcd.print(" P. Gott ");
delay(1500);
lcd.clear();
}
void loop() {
if ( speedIntervall.tick() ) {
read_ADC = analogRead(potentiometer); // read analogue to digital value 0 to 1023
Speed_LCD = map(read_ADC, 0, maxWiederstand, 0, 100); //value map to Display on the LCD
myStepper.setSpeed(map(read_ADC, 0, maxWiederstand, 0, maxSpeed));
}
lcd.setCursor(0,0);
lcd.print(" Speed: ");
lcd.print(Speed_LCD);
lcd.print("% ");
if(digitalRead (bt_C) == LOW && flagE1 == 0 && Mode != 1){
Mode = 3;
flagE2 = 0;
gesperrtR = 0;
} //For Clockwise
if(digitalRead (bt_S) == 0){ //For Stop
if(flag == 0){
flag = 1;
flagE1 = 0;
flagE2 = 0;
if(Mode>2){
Mode = 2;
digitalWrite(enPin, LOW);
}
else{
if(Mode==1){
Mode = 0;
myStepper.rotate(0);
digitalWrite(enPin, HIGH);
}
}
delay(100);
}
}else{
flag = 0;
}
if(digitalRead (bt_AC) == LOW && flagE2 == 0 && Mode != 1){
Mode = 4;
flagE1 = 0;
gesperrtL = 0;
}
if(digitalRead (bt_E1) == HIGH && gesperrtL == 0){ //For Stop
Serial.println("E1");
flagE1 = 1;
Mode = 1;
gesperrtL = 1;
}
if(digitalRead (bt_E2) == HIGH && gesperrtR == 0){
Serial.println("E2");
flagE2 = 1;
Mode = 1;
gesperrtR = 1;
}
lcd.setCursor(0,1);
if(Mode==0)lcd.print(" Frei ");
else if(Mode==1)lcd.print(" Gesperrt ");
else if(Mode==2)lcd.print(" Stop ");
else if(Mode==3)lcd.print(" Links ");
else if(Mode==4)lcd.print(" Rechts ");
//else if(Mode==3)lcd.print(" Rechts <-> ");
if(Speed_LCD>0 && Mode>2){
if(Mode==3){
myStepper.setRampLen(rampLen);
myStepper.rotate(-1);
}
else {
myStepper.setRampLen(rampLen);
myStepper.rotate(1);
}
}else{
myStepper.stop();
}
}