#include <AccelStepper.h>
#include <LiquidCrystal.h>
//Define stepper motor connections and steps per rev
#define dirPin 8
#define stepPin 9
#define enabPin 10
#define stepsPerRev 200
int mspeed=1000; //max motor speed
//Attach pins to servo library
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
//Attach pins to LCD library
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
//Define 1st potentiometer pin name (*use analog pin)
#define potPin A0
#define endstop_pin 13
int myTime;
int potIn;
int angle;
int speed;
int speed_rpm;
int revs;
int steps;
int preValue=0;
int open;
int alpha;
void setup() {
//pinMode(potPin, INPUT);
pinMode(endstop_pin, INPUT_PULLUP);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(enabPin, OUTPUT);
//Declare "enable" pin as low to turn on the motor(not necessary if the "enable" is disconnected)
digitalWrite(enabPin, LOW);
//Set max speed and current speed for stepper
stepper.setMaxSpeed(mspeed);
stepper.setAcceleration(500);
stepper.setSpeed(75);
//LCD start sequence
lcd.begin(16,2); //turn on LCD
delay(500); //wait for screen to start
//print start screen
lcd.setCursor(3,0);
lcd.print("MULTITTECH");
lcd.setCursor(0,1);
lcd.print("Initializing.");
delay(600);
lcd.setCursor(0, 1);
lcd.print("Initializing..");
delay(600);
lcd.setCursor(0, 1);
lcd.print("Initializing...");
delay(600);
lcd.setCursor(0, 1);
lcd.print("Initializing....");
delay(600);
lcd.setCursor(0, 1);
lcd.print("Initializing.....");
delay(1000);
lcd.clear();
lcd.print("Open/Close Valve");
delay(2000); //for the start screen
lcd.clear(); //clear screen
//print the characters that won't change in the main loop
lcd.setCursor(0,0);
lcd.print("Open Angle:");
lcd.setCursor(0,1);
lcd.print("Open/Close: ");
//start serial for troubleshooting
Serial.begin(9600);
}
void loop() {
//acquire values
myTime=millis();
static long lastPosition = 0;
static bool endstopPressed = false;
long potValue=analogRead(potPin);
long targetPosition=map(potValue, 0, 1023, 0, 200);
open=targetPosition/2;
alpha=1.8*targetPosition;
if (digitalRead(endstop_pin) == LOW){
if (!endstopPressed) {
stepper.stop();
lastPosition = stepper.currentPosition();
endstopPressed = true;
}
} else {
if (endstopPressed) {
stepper.setCurrentPosition(lastPosition);
endstopPressed = false;
}
stepper.moveTo(targetPosition);
stepper.run();
}
//map and redefine values
//angle=map(potIn,0,1023,1,20);
//speed=map(potIn,0,1023,0,mspeed);
//speed_rpm=speed*6/20; //convert speed to RPM
//steps=revs*200;
Serial.println(potValue);
//stepper.moveTo(targetPosition);
//stepper.run();
//stepper.step(preValue);
//stepper.setSpeed(speed);
//stepper.runSpeed();
//LCD refresh
lcd.setCursor(12,0);
lcd.print(alpha);
lcd.setCursor(12,0);
lcd.print(" ");
lcd.setCursor(12,1);
lcd.print(" ");
lcd.setCursor(12,1);
lcd.print(open);
lcd.setCursor(15,1);
lcd.print("%");
}