//Libraries used
#include <AccelStepper.h>
#include <AccelStepperWithDistance.h>
//Signal pins to driver card
#define STEP_PIN 4
#define DIR_PIN 3
//Create function with AccelStepperWithDistance
AccelStepperWithDistance stepper(AccelStepperWithDistance::DRIVER, STEP_PIN,DIR_PIN);
//Pins for control buttons
#define buttonCWpin 9
#define buttonCCWpin 10
#define buttonTrigpin 11
//Button initial states
boolean buttonCWpressed=false;
boolean buttonCCWpressed=false;
boolean buttonTrigpressed=false;
void setup() {
// Initiallize Serial Monitor Communications
Serial.begin(9600);
Serial.println("Starting Precision Dispenser Prototype");
//Stepper run parameters
stepper.setMaxSpeed(1000);
stepper.setAcceleration(500);
stepper.setStepsPerRotation(200);
stepper.setMicroStep(16);
stepper.setDistancePerRotation(10);
//Setup Input Pins
pinMode(buttonCWpin, INPUT_PULLUP);
pinMode(buttonCCWpin,INPUT_PULLUP);
pinMode(buttonTrigpin, INPUT_PULLUP);
}
void loop() {
// Main Program:
readButtons();
actOnButtons();
}
void readButtons()
{
buttonCWpressed = false;
buttonCCWpressed = false;
buttonTrigpressed = false;
if(digitalRead(buttonCWpin)==LOW)
{
buttonCWpressed=true;
Serial.println("Clockwise button pressed");
}
if(digitalRead(buttonCCWpin)==LOW)
{
buttonCCWpressed=true;
Serial.println("Counter-Clockwise button pressed");
}
if(digitalRead(buttonTrigpin)==LOW)
{
buttonTrigpressed=true;
Serial.println("Trigger button pressed");
}
}
void actOnButtons()
{
if(buttonCWpressed == true)
{
digitalWrite(DIR_PIN, LOW);
moveStepper();
}
if(buttonCCWpressed == true)
{
digitalWrite(DIR_PIN,HIGH);
moveStepperNeg();
}
if(buttonTrigpressed == true)
{
digitalWrite(DIR_PIN, LOW);
moveStepper();
}
}
void moveStepper()
{
stepper.runRelative(50);
Serial.println("Position after dispense");
Serial.println(stepper.getCurrentPositionDistance());
stepper.runRelative(-5);
Serial.println("Position after retract");
Serial.println(stepper.getCurrentPositionDistance());
}
void moveStepperNeg()
{
stepper.runRelative(-50);
Serial.println("Position after Dispense");
Serial.println(stepper.getCurrentPositionDistance());
stepper.runRelative(5);
Serial.println("Position after Retract");
Serial.println(stepper.getCurrentPositionDistance());
}