-
Notifications
You must be signed in to change notification settings - Fork 94
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e1d837d
commit cf5065e
Showing
35 changed files
with
6,233 additions
and
335 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -27,3 +27,5 @@ | |
*.exe | ||
*.out | ||
*.app | ||
|
||
\.DS_Store |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
// AFMotor_ConstantSpeed.pde | ||
// -*- mode: C++ -*- | ||
// | ||
// Shows how to run AccelStepper in the simplest, | ||
// fixed speed mode with no accelerations | ||
// Requires the AFMotor library | ||
// (https://github.com/adafruit/Adafruit-Motor-Shield-library) | ||
// Caution, does not work with Adafruit Motor Shield V2 | ||
// See https://github.com/adafruit/Adafruit_Motor_Shield_V2_Library | ||
// for examples that work with Adafruit Motor Shield V2. | ||
|
||
#include <AccelStepper.h> | ||
#include <AFMotor.h> | ||
|
||
AF_Stepper motor1(200, 1); | ||
|
||
|
||
// you can change these to DOUBLE or INTERLEAVE or MICROSTEP! | ||
void forwardstep() { | ||
motor1.onestep(FORWARD, SINGLE); | ||
} | ||
void backwardstep() { | ||
motor1.onestep(BACKWARD, SINGLE); | ||
} | ||
|
||
AccelStepper stepper(forwardstep, backwardstep); // use functions to step | ||
|
||
void setup() | ||
{ | ||
Serial.begin(9600); // set up Serial library at 9600 bps | ||
Serial.println("Stepper test!"); | ||
|
||
stepper.setMaxSpeed(50); | ||
stepper.setSpeed(50); | ||
} | ||
|
||
void loop() | ||
{ | ||
stepper.runSpeed(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
// AFMotor_MultiStepper.pde | ||
// -*- mode: C++ -*- | ||
// | ||
// Control both Stepper motors at the same time with different speeds | ||
// and accelerations. | ||
// Requires the AFMotor library (https://github.com/adafruit/Adafruit-Motor-Shield-library) | ||
// Caution, does not work with Adafruit Motor Shield V2 | ||
// See https://github.com/adafruit/Adafruit_Motor_Shield_V2_Library | ||
// for examples that work with Adafruit Motor Shield V2. | ||
|
||
#include <AccelStepper.h> | ||
#include <AFMotor.h> | ||
|
||
// two stepper motors one on each port | ||
AF_Stepper motor1(200, 1); | ||
AF_Stepper motor2(200, 2); | ||
|
||
// you can change these to DOUBLE or INTERLEAVE or MICROSTEP! | ||
// wrappers for the first motor! | ||
void forwardstep1() { | ||
motor1.onestep(FORWARD, SINGLE); | ||
} | ||
void backwardstep1() { | ||
motor1.onestep(BACKWARD, SINGLE); | ||
} | ||
// wrappers for the second motor! | ||
void forwardstep2() { | ||
motor2.onestep(FORWARD, SINGLE); | ||
} | ||
void backwardstep2() { | ||
motor2.onestep(BACKWARD, SINGLE); | ||
} | ||
|
||
// Motor shield has two motor ports, now we'll wrap them in an AccelStepper object | ||
AccelStepper stepper1(forwardstep1, backwardstep1); | ||
AccelStepper stepper2(forwardstep2, backwardstep2); | ||
|
||
void setup() | ||
{ | ||
stepper1.setMaxSpeed(200.0); | ||
stepper1.setAcceleration(100.0); | ||
stepper1.moveTo(24); | ||
|
||
stepper2.setMaxSpeed(300.0); | ||
stepper2.setAcceleration(100.0); | ||
stepper2.moveTo(1000000); | ||
|
||
} | ||
|
||
void loop() | ||
{ | ||
// Change direction at the limits | ||
if (stepper1.distanceToGo() == 0) | ||
stepper1.moveTo(-stepper1.currentPosition()); | ||
stepper1.run(); | ||
stepper2.run(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// Blocking.pde | ||
// -*- mode: C++ -*- | ||
// | ||
// Shows how to use the blocking call runToNewPosition | ||
// Which sets a new target position and then waits until the stepper has | ||
// achieved it. | ||
// | ||
// Copyright (C) 2009 Mike McCauley | ||
// $Id: Blocking.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() | ||
{ | ||
stepper.setMaxSpeed(200.0); | ||
stepper.setAcceleration(100.0); | ||
} | ||
|
||
void loop() | ||
{ | ||
stepper.runToNewPosition(0); | ||
stepper.runToNewPosition(500); | ||
stepper.runToNewPosition(100); | ||
stepper.runToNewPosition(120); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
// Bounce.pde | ||
// -*- mode: C++ -*- | ||
// | ||
// Make a single stepper bounce from one limit to another | ||
// | ||
// Copyright (C) 2012 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() | ||
{ | ||
// Change these to suit your stepper if you want | ||
stepper.setMaxSpeed(100); | ||
stepper.setAcceleration(20); | ||
stepper.moveTo(500); | ||
} | ||
|
||
void loop() | ||
{ | ||
// If at the end of travel go to the other end | ||
if (stepper.distanceToGo() == 0) | ||
stepper.moveTo(-stepper.currentPosition()); | ||
|
||
stepper.run(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// ConstantSpeed.pde | ||
// -*- mode: C++ -*- | ||
// | ||
// Shows how to run AccelStepper in the simplest, | ||
// fixed speed mode with no accelerations | ||
/// \author Mike McCauley ([email protected]) | ||
// Copyright (C) 2009 Mike McCauley | ||
// $Id: ConstantSpeed.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $ | ||
|
||
#include <AccelStepper.h> | ||
|
||
AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5 | ||
|
||
void setup() | ||
{ | ||
stepper.setMaxSpeed(1000); | ||
stepper.setSpeed(50); | ||
} | ||
|
||
void loop() | ||
{ | ||
stepper.runSpeed(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
// DualMotorShield.pde | ||
// -*- mode: C++ -*- | ||
// | ||
// Shows how to run 2 simultaneous steppers | ||
// using the Itead Studio Arduino Dual Stepper Motor Driver Shield | ||
// model IM120417015 | ||
// This shield is capable of driving 2 steppers at | ||
// currents of up to 750mA | ||
// and voltages up to 30V | ||
// Runs both steppers forwards and backwards, accelerating and decelerating | ||
// at the limits. | ||
// | ||
// Copyright (C) 2014 Mike McCauley | ||
// $Id: $ | ||
|
||
#include <AccelStepper.h> | ||
|
||
// The X Stepper pins | ||
#define STEPPER1_DIR_PIN 3 | ||
#define STEPPER1_STEP_PIN 2 | ||
// The Y stepper pins | ||
#define STEPPER2_DIR_PIN 7 | ||
#define STEPPER2_STEP_PIN 6 | ||
|
||
// Define some steppers and the pins the will use | ||
AccelStepper stepper1(AccelStepper::DRIVER, STEPPER1_STEP_PIN, STEPPER1_DIR_PIN); | ||
AccelStepper stepper2(AccelStepper::DRIVER, STEPPER2_STEP_PIN, STEPPER2_DIR_PIN); | ||
|
||
void setup() | ||
{ | ||
stepper1.setMaxSpeed(200.0); | ||
stepper1.setAcceleration(200.0); | ||
stepper1.moveTo(100); | ||
|
||
stepper2.setMaxSpeed(100.0); | ||
stepper2.setAcceleration(100.0); | ||
stepper2.moveTo(100); | ||
} | ||
|
||
void loop() | ||
{ | ||
// Change direction at the limits | ||
if (stepper1.distanceToGo() == 0) | ||
stepper1.moveTo(-stepper1.currentPosition()); | ||
if (stepper2.distanceToGo() == 0) | ||
stepper2.moveTo(-stepper2.currentPosition()); | ||
stepper1.run(); | ||
stepper2.run(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
// AFMotor_ConstantSpeed.pde | ||
// -*- mode: C++ -*- | ||
// | ||
// Shows how to use AccelStepper to control a 3-phase motor, such as a HDD spindle motor | ||
// using the Adafruit Motor Shield | ||
// http://www.ladyada.net/make/mshield/index.html. | ||
// Create a subclass of AccelStepper which controls the motor pins via the | ||
// Motor Shield serial-to-parallel interface | ||
|
||
#include <AccelStepper.h> | ||
|
||
// Arduino pin names for interface to 74HCT595 latch | ||
// on Adafruit Motor Shield | ||
#define MOTORLATCH 12 | ||
#define MOTORCLK 4 | ||
#define MOTORENABLE 7 | ||
#define MOTORDATA 8 | ||
|
||
// PWM pins, also used to enable motor outputs | ||
#define PWM0A 5 | ||
#define PWM0B 6 | ||
#define PWM1A 9 | ||
#define PWM1B 10 | ||
#define PWM2A 11 | ||
#define PWM2B 3 | ||
|
||
|
||
// The main purpose of this class is to override setOutputPins to work with Adafruit Motor Shield | ||
class AFMotorShield : public AccelStepper | ||
{ | ||
public: | ||
AFMotorShield(uint8_t interface = AccelStepper::FULL4WIRE, uint8_t pin1 = 2, uint8_t pin2 = 3, uint8_t pin3 = 4, uint8_t pin4 = 5); | ||
|
||
virtual void setOutputPins(uint8_t mask); | ||
}; | ||
|
||
|
||
AFMotorShield::AFMotorShield(uint8_t interface, uint8_t pin1, uint8_t pin2, uint8_t pin3, uint8_t pin4) | ||
: AccelStepper(interface, pin1, pin2, pin3, pin4) | ||
{ | ||
// Enable motor control serial to parallel latch | ||
pinMode(MOTORLATCH, OUTPUT); | ||
pinMode(MOTORENABLE, OUTPUT); | ||
pinMode(MOTORDATA, OUTPUT); | ||
pinMode(MOTORCLK, OUTPUT); | ||
digitalWrite(MOTORENABLE, LOW); | ||
|
||
// enable both H bridges on motor 1 | ||
pinMode(PWM2A, OUTPUT); | ||
pinMode(PWM2B, OUTPUT); | ||
pinMode(PWM0A, OUTPUT); | ||
pinMode(PWM0B, OUTPUT); | ||
digitalWrite(PWM2A, HIGH); | ||
digitalWrite(PWM2B, HIGH); | ||
digitalWrite(PWM0A, HIGH); | ||
digitalWrite(PWM0B, HIGH); | ||
|
||
setOutputPins(0); // Reset | ||
}; | ||
|
||
// Use the AF Motor Shield serial-to-parallel to set the state of the motor pins | ||
// Caution: the mapping of AccelStepper pins to AF motor outputs is not | ||
// obvious: | ||
// AccelStepper Motor Shield output | ||
// pin1 M4A | ||
// pin2 M1A | ||
// pin3 M2A | ||
// pin4 M3A | ||
// Caution this is pretty slow and limits the max speed of the motor to about 500/3 rpm | ||
void AFMotorShield::setOutputPins(uint8_t mask) | ||
{ | ||
uint8_t i; | ||
|
||
digitalWrite(MOTORLATCH, LOW); | ||
digitalWrite(MOTORDATA, LOW); | ||
|
||
for (i=0; i<8; i++) | ||
{ | ||
digitalWrite(MOTORCLK, LOW); | ||
|
||
if (mask & _BV(7-i)) | ||
digitalWrite(MOTORDATA, HIGH); | ||
else | ||
digitalWrite(MOTORDATA, LOW); | ||
|
||
digitalWrite(MOTORCLK, HIGH); | ||
} | ||
digitalWrite(MOTORLATCH, HIGH); | ||
} | ||
|
||
AFMotorShield stepper(AccelStepper::HALF3WIRE, 0, 0, 0, 0); // 3 phase HDD spindle drive | ||
|
||
void setup() | ||
{ | ||
stepper.setMaxSpeed(500); // divide by 3 to get rpm | ||
stepper.setAcceleration(80); | ||
stepper.moveTo(10000000); | ||
} | ||
|
||
void loop() | ||
{ | ||
stepper.run(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// MultiStepper.pde | ||
// -*- mode: C++ -*- | ||
// Use MultiStepper class to manage multiple steppers and make them all move to | ||
// the same position at the same time for linear 2d (or 3d) motion. | ||
|
||
#include <AccelStepper.h> | ||
#include <MultiStepper.h> | ||
|
||
// EG X-Y position bed driven by 2 steppers | ||
// Alas its not possible to build an array of these with different pins for each :-( | ||
AccelStepper stepper1(AccelStepper::FULL4WIRE, 2, 3, 4, 5); | ||
AccelStepper stepper2(AccelStepper::FULL4WIRE, 8, 9, 10, 11); | ||
|
||
// Up to 10 steppers can be handled as a group by MultiStepper | ||
MultiStepper steppers; | ||
|
||
void setup() { | ||
Serial.begin(9600); | ||
|
||
// Configure each stepper | ||
stepper1.setMaxSpeed(100); | ||
stepper2.setMaxSpeed(100); | ||
|
||
// Then give them to MultiStepper to manage | ||
steppers.addStepper(stepper1); | ||
steppers.addStepper(stepper2); | ||
} | ||
|
||
void loop() { | ||
long positions[2]; // Array of desired stepper positions | ||
|
||
positions[0] = 1000; | ||
positions[1] = 50; | ||
steppers.moveTo(positions); | ||
steppers.runSpeedToPosition(); // Blocks until all are in position | ||
delay(1000); | ||
|
||
// Move to a different coordinate | ||
positions[0] = -100; | ||
positions[1] = 100; | ||
steppers.moveTo(positions); | ||
steppers.runSpeedToPosition(); // Blocks until all are in position | ||
delay(1000); | ||
} |
Oops, something went wrong.