//Use potentiometer 1 to define the number of turns a stepper motor must take (range:1-20)
//Use potentiometer 2 to define the speed of the stepper motor (range displayed to user:10-100, internal range up to you).
//Use a screen to display a selection screen for number-of-turns/speed with appropriate labels (i.e. Turns:..... Speed (RPM):.....).
//Press a button to execute the turns. While turns are being executed the screen should display a message to user indicating this is happening.
//After turns are completed, user should be returned to turn/speed selection screen
#include <AccelStepper.h>
#include <LiquidCrystal_I2C.h>
#define potIn A1
#define pot2In A2
#define BUTTON_PIN 4
//Define stepper motor connections and steps per rev
#define dirPin 8
#define stepPin 9
#define enabPin 10
int stepsPerRev=200;
int mspeed=600; //max motor speed
//Attach pins to servo library
AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);
//Define LCD parameters
int time_old=0;
#define I2C_ADDR 0x27
#define LCD_COLUMNS 163
#define LCD_LINES 2
//Attach pins to LCD library
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup() {
pinMode(potIn, INPUT);
pinMode(pot2In, INPUT);
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(enabPin, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
digitalWrite(BUTTON_PIN, HIGH);
digitalWrite(enabPin, LOW);
//get the lcd started
lcd.init();
lcd.backlight();
delay(500);
lcd.setCursor(0,0);
lcd.print("Hello Guys");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("turns");
lcd.setCursor(0,1);
lcd.print("speed:");
//work on steppers
stepper.setMaxSpeed(mspeed);
stepper.setAcceleration(100);
stepper.setSpeed(50);
Serial.begin(9600);
}
void loop() {
//digitalRead would either be on or off
int myTime=millis();
int in1=analogRead(potIn); //can use
int in2=analogRead(pot2In);
int bps=digitalRead(BUTTON_PIN);
//remap the rotations
int name1=map(in1,0,1023,1,20);
int name2=map(in2,0,1023,10,100);
//remap the speed
int speed=map(in2,0,1023,60,mspeed);
int steps = name1*stepsPerRev;
lcd.setCursor(13,0);
lcd.print(name1);
lcd.print(" ");
lcd.setCursor(13,1);
lcd.print(name2);
lcd.print(" ");
if (bps==LOW){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("loading...");
stepper.setMaxSpeed(mspeed);
stepper.move(steps);
while(stepper.distanceToGo()!=0){ //number of steps left
stepper.run(); //everytime to run, it takes 1 step, until it reaches 0
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("turns");
lcd.setCursor(0,1);
lcd.print("speed:");
}
}