Hi everybody,
I am very new in this field,
can somebody help me with a sample code how to reverse direction of a stepper motor when 5v is applied through limit switch?
I have managed to switch of an on LED, with switch, but Stepper are out of my range.
any ideas hot to incorporate two limit switches which would only reverse reverse direction if activated
Thanks in advance
// Random.pde
// -- mode: C++ --
//
// Make a single stepper perform random changes in speed, position and acceleration
//
// Copyright (C) 2009 Mike McCauley
// $Id: Random.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $
#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
void setup()
{
}
void loop()
{
if (stepper.distanceToGo() == 0)
{
// Random change to speed, position and acceleration
// Make sure we dont get 0 speed or accelerations
delay(1000);
stepper.moveTo(rand() % 200);
stepper.setMaxSpeed((rand() % 200) + 1);
stepper.setAcceleration((rand() % 200) + 1);
}
stepper.run();
}
in void loop() replace: //stepper.moveTo(rand() % 200); with
long someRandomPosition=rand() % 200;
if(digitalRead(switchPinA)==HIGH || digitalRead(switchPinB)==HIGH)
{
someRandomPosition=someRandomPosition * -1; // just invert data
}
stepper.moveTo(someRandomPosition);
PS: According to if (stepper.distanceToGo() == 0)
it will change direction based on switches, ONLY after it completes the previous move.
If you wish to have it switch directions instantly, then you just need to put the blue code outside of the if (stepper.distanceToGo() == 0) statement.
void loop()
{
if (stepper.distanceToGo() == 0)
{
// Random change to speed, position and acceleration
// Make sure we dont get 0 speed or accelerations
delay(1000);
long someRandomPosition=rand() % 200;
stepper.setMaxSpeed((rand() % 200) + 1);
stepper.setAcceleration((rand() % 200) + 1);
if(digitalRead(switchPinA)==HIGH || digitalRead(switchPinB)==HIGH)
{
//someRandomPosition=someRandomPosition * -1; // just invert data
}
stepper.moveTo(-1);
}
stepper.run();
}
void loop()
{
if (stepper.distanceToGo() == 0)
{
// Random change to speed, position and acceleration
// Make sure we dont get 0 speed or accelerations
delay(1000);
long someRandomPosition=random(lowestRandomNum, highestRandomNum);
stepper.setMaxSpeed(random(0, highestRandomNum) + 1);
stepper.setAcceleration(random(1, highestRandomNum) + 1);
if(digitalRead(switchPinA)==HIGH || digitalRead(switchPinB)==HIGH)
{
someRandomPosition=someRandomPosition * -1; // just invert data
}
stepper.moveTo(someRandomPosition);
}
stepper.run();
}
We'll need to add the use of:
stop() "Sets a new target position that causes the stepper to stop as quickly as possible..."
runToPosition() "Moves the motor at the currently selected constant speed (forward or reverse) to the target position..."
Now lets rev up the minimum speed:
setMaxSpeed() "Sets the maximum permitted speed."
void loop()
{
if (stepper.distanceToGo() == 0)
{
// Random change to speed, position and acceleration
// Make sure we dont get 0 speed or accelerations
delay(1000);
long someRandomPosition=random(lowestRandomNum, highestRandomNum);
stepper.setMaxSpeed(random(10, highestRandomNum) + 1);
stepper.setAcceleration(random(1, highestRandomNum) + 1);
if(digitalRead(switchPinA)==HIGH || digitalRead(switchPinB)==HIGH)
{
someRandomPosition=someRandomPosition * -1; // just invert data
stepper.stop(); // Stop as fast as possible: sets new target
stepper.runToPosition();
}
stepper.moveTo(someRandomPosition);
}
stepper.run();
}
Ok, that's my limit of two freebies per customer. Its your turn to hack at it.