You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
336 lines
36 KiB
336 lines
36 KiB
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
|
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> |
|
<title>AccelStepper: AccelStepper.h Source File</title> |
|
<link href="doxygen.css" rel="stylesheet" type="text/css"> |
|
<link href="tabs.css" rel="stylesheet" type="text/css"> |
|
</head><body> |
|
<!-- Generated by Doxygen 1.5.6 --> |
|
<div class="navigation" id="top"> |
|
<div class="tabs"> |
|
<ul> |
|
<li><a href="index.html"><span>Main Page</span></a></li> |
|
<li><a href="annotated.html"><span>Classes</span></a></li> |
|
<li class="current"><a href="files.html"><span>Files</span></a></li> |
|
</ul> |
|
</div> |
|
<h1>AccelStepper.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// AccelStepper.h</span> |
|
<a name="l00002"></a>00002 <span class="comment">//</span><span class="comment"></span> |
|
<a name="l00003"></a>00003 <span class="comment">/// \mainpage AccelStepper library for Arduino</span> |
|
<a name="l00004"></a>00004 <span class="comment">///</span> |
|
<a name="l00005"></a>00005 <span class="comment">/// This is the Arduino AccelStepper 1.2 library.</span> |
|
<a name="l00006"></a>00006 <span class="comment">/// It provides an object-oriented interface for 2 or 4 pin stepper motors.</span> |
|
<a name="l00007"></a>00007 <span class="comment">///</span> |
|
<a name="l00008"></a>00008 <span class="comment">/// The standard Arduino IDE includes the Stepper library</span> |
|
<a name="l00009"></a>00009 <span class="comment">/// (http://arduino.cc/en/Reference/Stepper) for stepper motors. It is</span> |
|
<a name="l00010"></a>00010 <span class="comment">/// perfectly adequate for simple, single motor applications.</span> |
|
<a name="l00011"></a>00011 <span class="comment">///</span> |
|
<a name="l00012"></a>00012 <span class="comment">/// AccelStepper significantly improves on the standard Arduino Stepper library in several ways:</span> |
|
<a name="l00013"></a>00013 <span class="comment">/// \li Supports acceleration and deceleration</span> |
|
<a name="l00014"></a>00014 <span class="comment">/// \li Supports multiple simultaneous steppers, with independent concurrent stepping on each stepper</span> |
|
<a name="l00015"></a>00015 <span class="comment">/// \li API functions never delay() or block</span> |
|
<a name="l00016"></a>00016 <span class="comment">/// \li Supports 2 and 4 wire steppers</span> |
|
<a name="l00017"></a>00017 <span class="comment">/// \li Supports stepper drivers such as the Sparkfun EasyDriver (based on 3967 driver chip)</span> |
|
<a name="l00018"></a>00018 <span class="comment">/// \li Very slow speeds are supported</span> |
|
<a name="l00019"></a>00019 <span class="comment">/// \li Extensive API</span> |
|
<a name="l00020"></a>00020 <span class="comment">/// \li Subclass support</span> |
|
<a name="l00021"></a>00021 <span class="comment">///</span> |
|
<a name="l00022"></a>00022 <span class="comment">/// The latest version of this documentation can be downloaded from </span> |
|
<a name="l00023"></a>00023 <span class="comment">/// http://www.open.com.au/mikem/arduino/AccelStepper</span> |
|
<a name="l00024"></a>00024 <span class="comment">///</span> |
|
<a name="l00025"></a>00025 <span class="comment">/// Example Arduino programs are included to show the main modes of use.</span> |
|
<a name="l00026"></a>00026 <span class="comment">///</span> |
|
<a name="l00027"></a>00027 <span class="comment">/// The version of the package that this documentation refers to can be downloaded </span> |
|
<a name="l00028"></a>00028 <span class="comment">/// from http://www.open.com.au/mikem/arduino/AccelStepper/AccelStepper-1.3.zip</span> |
|
<a name="l00029"></a>00029 <span class="comment">/// You can find the latest version at http://www.open.com.au/mikem/arduino/AccelStepper</span> |
|
<a name="l00030"></a>00030 <span class="comment">///</span> |
|
<a name="l00031"></a>00031 <span class="comment">/// Tested on Arduino Diecimila and Mega with arduino-0018 on OpenSuSE 11.1 and avr-libc-1.6.1-1.15,</span> |
|
<a name="l00032"></a>00032 <span class="comment">/// cross-avr-binutils-2.19-9.1, cross-avr-gcc-4.1.3_20080612-26.5.</span> |
|
<a name="l00033"></a>00033 <span class="comment">///</span> |
|
<a name="l00034"></a>00034 <span class="comment">/// \par Installation</span> |
|
<a name="l00035"></a>00035 <span class="comment">/// Install in the usual way: unzip the distribution zip file to the libraries</span> |
|
<a name="l00036"></a>00036 <span class="comment">/// sub-folder of your sketchbook. </span> |
|
<a name="l00037"></a>00037 <span class="comment">///</span> |
|
<a name="l00038"></a>00038 <span class="comment">/// This software is Copyright (C) 2010 Mike McCauley. Use is subject to license</span> |
|
<a name="l00039"></a>00039 <span class="comment">/// conditions. The main licensing options available are GPL V2 or Commercial:</span> |
|
<a name="l00040"></a>00040 <span class="comment">/// </span> |
|
<a name="l00041"></a>00041 <span class="comment">/// \par Open Source Licensing GPL V2</span> |
|
<a name="l00042"></a>00042 <span class="comment">/// This is the appropriate option if you want to share the source code of your</span> |
|
<a name="l00043"></a>00043 <span class="comment">/// application with everyone you distribute it to, and you also want to give them</span> |
|
<a name="l00044"></a>00044 <span class="comment">/// the right to share who uses it. If you wish to use this software under Open</span> |
|
<a name="l00045"></a>00045 <span class="comment">/// Source Licensing, you must contribute all your source code to the open source</span> |
|
<a name="l00046"></a>00046 <span class="comment">/// community in accordance with the GPL Version 2 when your application is</span> |
|
<a name="l00047"></a>00047 <span class="comment">/// distributed. See http://www.gnu.org/copyleft/gpl.html</span> |
|
<a name="l00048"></a>00048 <span class="comment">/// </span> |
|
<a name="l00049"></a>00049 <span class="comment">/// \par Commercial Licensing</span> |
|
<a name="l00050"></a>00050 <span class="comment">/// This is the appropriate option if you are creating proprietary applications</span> |
|
<a name="l00051"></a>00051 <span class="comment">/// and you are not prepared to distribute and share the source code of your</span> |
|
<a name="l00052"></a>00052 <span class="comment">/// application. Contact info@open.com.au for details.</span> |
|
<a name="l00053"></a>00053 <span class="comment">///</span> |
|
<a name="l00054"></a>00054 <span class="comment">/// \par Revision History</span> |
|
<a name="l00055"></a>00055 <span class="comment">/// \version 1.0 Initial release</span> |
|
<a name="l00056"></a>00056 <span class="comment">///</span> |
|
<a name="l00057"></a>00057 <span class="comment">/// \version 1.1 Added speed() function to get the current speed.</span> |
|
<a name="l00058"></a>00058 <span class="comment">/// \version 1.2 Added runSpeedToPosition() submitted by Gunnar Arndt.</span> |
|
<a name="l00059"></a>00059 <span class="comment">/// \version 1.3 Added support for stepper drivers (ie with Step and Direction inputs) with _pins == 1</span> |
|
<a name="l00060"></a>00060 <span class="comment">/// </span> |
|
<a name="l00061"></a>00061 <span class="comment">///</span> |
|
<a name="l00062"></a>00062 <span class="comment">/// \author Mike McCauley (mikem@open.com.au)</span> |
|
<a name="l00063"></a>00063 <span class="comment"></span><span class="comment">// Copyright (C) 2009 Mike McCauley</span> |
|
<a name="l00064"></a>00064 <span class="comment">// $Id: AccelStepper.h,v 1.2 2010/10/24 07:46:18 mikem Exp mikem $</span> |
|
<a name="l00065"></a>00065 |
|
<a name="l00066"></a>00066 <span class="preprocessor">#ifndef AccelStepper_h</span> |
|
<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="preprocessor">#define AccelStepper_h</span> |
|
<a name="l00068"></a>00068 <span class="preprocessor"></span> |
|
<a name="l00069"></a>00069 <span class="preprocessor">#include <stdlib.h></span> |
|
<a name="l00070"></a>00070 <span class="preprocessor">#include <wiring.h></span> |
|
<a name="l00071"></a>00071 |
|
<a name="l00072"></a>00072 <span class="comment">// These defs cause trouble on some versions of Arduino</span> |
|
<a name="l00073"></a>00073 <span class="preprocessor">#undef round</span> |
|
<a name="l00074"></a>00074 <span class="preprocessor"></span><span class="comment"></span> |
|
<a name="l00075"></a>00075 <span class="comment">/////////////////////////////////////////////////////////////////////</span> |
|
<a name="l00076"></a>00076 <span class="comment">/// \class AccelStepper AccelStepper.h <AccelStepper.h></span> |
|
<a name="l00077"></a>00077 <span class="comment">/// \brief Support for stepper motors with acceleration etc.</span> |
|
<a name="l00078"></a>00078 <span class="comment">///</span> |
|
<a name="l00079"></a>00079 <span class="comment">/// This defines a single 2 or 4 pin stepper motor, or stepper moter with fdriver chip, with optional</span> |
|
<a name="l00080"></a>00080 <span class="comment">/// acceleration, deceleration, absolute positioning commands etc. Multiple</span> |
|
<a name="l00081"></a>00081 <span class="comment">/// simultaneous steppers are supported, all moving </span> |
|
<a name="l00082"></a>00082 <span class="comment">/// at different speeds and accelerations. </span> |
|
<a name="l00083"></a>00083 <span class="comment">///</span> |
|
<a name="l00084"></a>00084 <span class="comment">/// \par Operation</span> |
|
<a name="l00085"></a>00085 <span class="comment">/// This module operates by computing a step time in milliseconds. The step</span> |
|
<a name="l00086"></a>00086 <span class="comment">/// time is recomputed after each step and after speed and acceleration</span> |
|
<a name="l00087"></a>00087 <span class="comment">/// parameters are changed by the caller. The time of each step is recorded in</span> |
|
<a name="l00088"></a>00088 <span class="comment">/// milliseconds. The run() function steps the motor if a new step is due.</span> |
|
<a name="l00089"></a>00089 <span class="comment">/// The run() function must be called frequently until the motor is in the</span> |
|
<a name="l00090"></a>00090 <span class="comment">/// desired position, after which time run() will do nothing.</span> |
|
<a name="l00091"></a>00091 <span class="comment">///</span> |
|
<a name="l00092"></a>00092 <span class="comment">/// \par Positioning</span> |
|
<a name="l00093"></a>00093 <span class="comment">/// Positions are specified by a signed long integer. At</span> |
|
<a name="l00094"></a>00094 <span class="comment">/// construction time, the current position of the motor is consider to be 0. Positive</span> |
|
<a name="l00095"></a>00095 <span class="comment">/// positions are clockwise from the initial position; negative positions are</span> |
|
<a name="l00096"></a>00096 <span class="comment">/// anticlockwise. The curent position can be altered for instance after</span> |
|
<a name="l00097"></a>00097 <span class="comment">/// initialization positioning.</span> |
|
<a name="l00098"></a>00098 <span class="comment">///</span> |
|
<a name="l00099"></a>00099 <span class="comment">/// \par Caveats</span> |
|
<a name="l00100"></a>00100 <span class="comment">/// This is an open loop controller: If the motor stalls or is oversped,</span> |
|
<a name="l00101"></a>00101 <span class="comment">/// AccelStepper will not have a correct </span> |
|
<a name="l00102"></a>00102 <span class="comment">/// idea of where the motor really is (since there is no feedback of the motor's</span> |
|
<a name="l00103"></a>00103 <span class="comment">/// real position. We only know where we _think_ it is, relative to the</span> |
|
<a name="l00104"></a>00104 <span class="comment">/// initial starting point).</span> |
|
<a name="l00105"></a>00105 <span class="comment">///</span> |
|
<a name="l00106"></a>00106 <span class="comment">/// The fastest motor speed that can be reliably supported is 1000 steps per</span> |
|
<a name="l00107"></a>00107 <span class="comment">/// second (1 step every millisecond). However any speed less than that down</span> |
|
<a name="l00108"></a>00108 <span class="comment">/// to very slow speeds (much less than one per second) are supported,</span> |
|
<a name="l00109"></a>00109 <span class="comment">/// provided the run() function is called frequently enough to step the</span> |
|
<a name="l00110"></a>00110 <span class="comment">/// motor whenever required.</span> |
|
<a name="l00111"></a><a class="code" href="classAccelStepper.html">00111</a> <span class="comment"></span><span class="keyword">class </span><a class="code" href="classAccelStepper.html" title="Support for stepper motors with acceleration etc.">AccelStepper</a> |
|
<a name="l00112"></a>00112 { |
|
<a name="l00113"></a>00113 <span class="keyword">public</span>:<span class="comment"></span> |
|
<a name="l00114"></a>00114 <span class="comment"> /// Constructor. You can have multiple simultaneous steppers, all moving</span> |
|
<a name="l00115"></a>00115 <span class="comment"> /// at different speeds and accelerations, provided you call their run()</span> |
|
<a name="l00116"></a>00116 <span class="comment"> /// functions at frequent enough intervals. Current Position is set to 0, target</span> |
|
<a name="l00117"></a>00117 <span class="comment"> /// position is set to 0. MaxSpeed and Acceleration default to 1.0.</span> |
|
<a name="l00118"></a>00118 <span class="comment"> /// The motor pins will be initialised to OUTPUT mode during the</span> |
|
<a name="l00119"></a>00119 <span class="comment"> /// constructor by a call to enableOutputs().</span> |
|
<a name="l00120"></a>00120 <span class="comment"> /// \param[in] pins Number of pins to interface to. 1, 2 or 4 are</span> |
|
<a name="l00121"></a>00121 <span class="comment"> /// supported. 1 means a stepper driver (with Step and Direction pins)</span> |
|
<a name="l00122"></a>00122 <span class="comment"> /// 2 means a 2 wire stepper. 4 means a 4 wire stepper.</span> |
|
<a name="l00123"></a>00123 <span class="comment"> /// Defaults to 4 pins.</span> |
|
<a name="l00124"></a>00124 <span class="comment"> /// \param[in] pin1 Arduino digital pin number for motor pin 1. Defaults</span> |
|
<a name="l00125"></a>00125 <span class="comment"> /// to pin 2. For a driver (pins==1), this is the Step input to the driver. Low to high transition means to step)</span> |
|
<a name="l00126"></a>00126 <span class="comment"> /// \param[in] pin2 Arduino digital pin number for motor pin 2. Defaults</span> |
|
<a name="l00127"></a>00127 <span class="comment"> /// to pin 3. For a driver (pins==1), this is the Direction input the driver. High means forward.</span> |
|
<a name="l00128"></a>00128 <span class="comment"> /// \param[in] pin3 Arduino digital pin number for motor pin 3. Defaults</span> |
|
<a name="l00129"></a>00129 <span class="comment"> /// to pin 4.</span> |
|
<a name="l00130"></a>00130 <span class="comment"> /// \param[in] pin4 Arduino digital pin number for motor pin 4. Defaults</span> |
|
<a name="l00131"></a>00131 <span class="comment"> /// to pin 5.</span> |
|
<a name="l00132"></a>00132 <span class="comment"></span> <a class="code" href="classAccelStepper.html#a1290897df35915069e5eca9d034038c">AccelStepper</a>(uint8_t pins = 4, uint8_t pin1 = 2, uint8_t pin2 = 3, uint8_t pin3 = 4, uint8_t pin4 = 5); |
|
<a name="l00133"></a>00133 <span class="comment"></span> |
|
<a name="l00134"></a>00134 <span class="comment"> /// Set the target position. The run() function will try to move the motor</span> |
|
<a name="l00135"></a>00135 <span class="comment"> /// from the current position to the target position set by the most</span> |
|
<a name="l00136"></a>00136 <span class="comment"> /// recent call to this function.</span> |
|
<a name="l00137"></a>00137 <span class="comment"> /// \param[in] absolute The desired absolute position. Negative is</span> |
|
<a name="l00138"></a>00138 <span class="comment"> /// anticlockwise from the 0 position.</span> |
|
<a name="l00139"></a>00139 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#ce236ede35f87c63d18da25810ec9736">moveTo</a>(<span class="keywordtype">long</span> absolute); |
|
<a name="l00140"></a>00140 <span class="comment"></span> |
|
<a name="l00141"></a>00141 <span class="comment"> /// Set the target position relative to the current position</span> |
|
<a name="l00142"></a>00142 <span class="comment"> /// \param[in] relative The desired position relative to the current position. Negative is</span> |
|
<a name="l00143"></a>00143 <span class="comment"> /// anticlockwise from the current position.</span> |
|
<a name="l00144"></a>00144 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#68942c66e78fb7f7b5f0cdade6eb7f06">move</a>(<span class="keywordtype">long</span> relative); |
|
<a name="l00145"></a>00145 <span class="comment"></span> |
|
<a name="l00146"></a>00146 <span class="comment"> /// Poll the motor and step it if a step is due, implementing</span> |
|
<a name="l00147"></a>00147 <span class="comment"> /// accelerations and decelerations to achive the ratget position. You must call this as</span> |
|
<a name="l00148"></a>00148 <span class="comment"> /// fequently as possible, but at least once per minimum step interval,</span> |
|
<a name="l00149"></a>00149 <span class="comment"> /// preferably in your main loop.</span> |
|
<a name="l00150"></a>00150 <span class="comment"> /// \return true if the motor is at the target position.</span> |
|
<a name="l00151"></a>00151 <span class="comment"></span> <span class="keywordtype">boolean</span> <a class="code" href="classAccelStepper.html#608b2395b64ac15451d16d0371fe13ce">run</a>(); |
|
<a name="l00152"></a>00152 <span class="comment"></span> |
|
<a name="l00153"></a>00153 <span class="comment"> /// Poll the motor and step it if a step is due, implmenting a constant</span> |
|
<a name="l00154"></a>00154 <span class="comment"> /// speed as set by the most recent call to setSpeed().</span> |
|
<a name="l00155"></a>00155 <span class="comment"> /// \return true if the motor was stepped.</span> |
|
<a name="l00156"></a>00156 <span class="comment"></span> <span class="keywordtype">boolean</span> <a class="code" href="classAccelStepper.html#a4a6bdf99f698284faaeb5542b0b7514">runSpeed</a>(); |
|
<a name="l00157"></a>00157 <span class="comment"></span> |
|
<a name="l00158"></a>00158 <span class="comment"> /// Sets the maximum permitted speed. the run() function will accelerate</span> |
|
<a name="l00159"></a>00159 <span class="comment"> /// up to the speed set by this function.</span> |
|
<a name="l00160"></a>00160 <span class="comment"> /// \param[in] speed The desired maximum speed in steps per second. Must</span> |
|
<a name="l00161"></a>00161 <span class="comment"> /// be > 0. Speeds of more than 1000 steps per second are unreliable. </span> |
|
<a name="l00162"></a>00162 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#bee8d466229b87accba33d6ec929c18f">setMaxSpeed</a>(<span class="keywordtype">float</span> <a class="code" href="classAccelStepper.html#4f0989d0ae264e7eadfe1fa720769fb6">speed</a>); |
|
<a name="l00163"></a>00163 <span class="comment"></span> |
|
<a name="l00164"></a>00164 <span class="comment"> /// Sets the acceleration and deceleration parameter.</span> |
|
<a name="l00165"></a>00165 <span class="comment"> /// \param[in] acceleration The desired acceleration in steps per second</span> |
|
<a name="l00166"></a>00166 <span class="comment"> /// per second. Must be > 0.</span> |
|
<a name="l00167"></a>00167 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#dfb19e3cd2a028a1fe78131787604fd1">setAcceleration</a>(<span class="keywordtype">float</span> acceleration); |
|
<a name="l00168"></a>00168 <span class="comment"></span> |
|
<a name="l00169"></a>00169 <span class="comment"> /// Sets the desired constant speed for use with runSpeed().</span> |
|
<a name="l00170"></a>00170 <span class="comment"> /// \param[in] speed The desired constant speed in steps per</span> |
|
<a name="l00171"></a>00171 <span class="comment"> /// second. Positive is clockwise. Speeds of more than 1000 steps per</span> |
|
<a name="l00172"></a>00172 <span class="comment"> /// second are unreliable. Very slow speeds may be set (eg 0.00027777 for</span> |
|
<a name="l00173"></a>00173 <span class="comment"> /// once per hour, approximately. Speed accuracy depends on the Arduino</span> |
|
<a name="l00174"></a>00174 <span class="comment"> /// crystal. Jitter depends on how frequently you call the runSpeed() function.</span> |
|
<a name="l00175"></a>00175 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#e79c49ad69d5ccc9da0ee691fa4ca235">setSpeed</a>(<span class="keywordtype">float</span> speed); |
|
<a name="l00176"></a>00176 <span class="comment"></span> |
|
<a name="l00177"></a>00177 <span class="comment"> /// The most recently set speed</span> |
|
<a name="l00178"></a>00178 <span class="comment"> /// \return the most recent speed in steps per second</span> |
|
<a name="l00179"></a>00179 <span class="comment"></span> <span class="keywordtype">float</span> <a class="code" href="classAccelStepper.html#4f0989d0ae264e7eadfe1fa720769fb6">speed</a>(); |
|
<a name="l00180"></a>00180 <span class="comment"></span> |
|
<a name="l00181"></a>00181 <span class="comment"> /// The distance from the current position to the target position.</span> |
|
<a name="l00182"></a>00182 <span class="comment"> /// \return the distance from the current position to the target position</span> |
|
<a name="l00183"></a>00183 <span class="comment"> /// in steps. Positive is clockwise from the current position.</span> |
|
<a name="l00184"></a>00184 <span class="comment"></span> <span class="keywordtype">long</span> <a class="code" href="classAccelStepper.html#748665c3962e66fbc0e9373eb14c69c1">distanceToGo</a>(); |
|
<a name="l00185"></a>00185 <span class="comment"></span> |
|
<a name="l00186"></a>00186 <span class="comment"> /// The most recently set target position.</span> |
|
<a name="l00187"></a>00187 <span class="comment"> /// \return the target position</span> |
|
<a name="l00188"></a>00188 <span class="comment"> /// in steps. Positive is clockwise from the 0 position.</span> |
|
<a name="l00189"></a>00189 <span class="comment"></span> <span class="keywordtype">long</span> <a class="code" href="classAccelStepper.html#96685e0945b7cf75d5959da679cd911e">targetPosition</a>(); |
|
<a name="l00190"></a>00190 |
|
<a name="l00191"></a>00191 <span class="comment"></span> |
|
<a name="l00192"></a>00192 <span class="comment"> /// The currently motor position.</span> |
|
<a name="l00193"></a>00193 <span class="comment"> /// \return the current motor position</span> |
|
<a name="l00194"></a>00194 <span class="comment"> /// in steps. Positive is clockwise from the 0 position.</span> |
|
<a name="l00195"></a>00195 <span class="comment"></span> <span class="keywordtype">long</span> <a class="code" href="classAccelStepper.html#5dce13ab2a1b02b8f443318886bf6fc5">currentPosition</a>(); |
|
<a name="l00196"></a>00196 <span class="comment"></span> |
|
<a name="l00197"></a>00197 <span class="comment"> /// Resets the current position of the motor, so that wherever the mottor</span> |
|
<a name="l00198"></a>00198 <span class="comment"> /// happens to be right now is considered to be the new position. Useful</span> |
|
<a name="l00199"></a>00199 <span class="comment"> /// for setting a zero position on a stepper after an initial hardware</span> |
|
<a name="l00200"></a>00200 <span class="comment"> /// positioning move.</span> |
|
<a name="l00201"></a>00201 <span class="comment"> /// \param[in] position The position in steps of wherever the motor</span> |
|
<a name="l00202"></a>00202 <span class="comment"> /// happens to be right now.</span> |
|
<a name="l00203"></a>00203 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#9d917f014317fb9d3b5dc14e66f6c689">setCurrentPosition</a>(<span class="keywordtype">long</span> position); |
|
<a name="l00204"></a>00204 <span class="comment"></span> |
|
<a name="l00205"></a>00205 <span class="comment"> /// Moves the motor to the target position and blocks until it is at</span> |
|
<a name="l00206"></a>00206 <span class="comment"> /// position. Dont use this in event loops, since it blocks.</span> |
|
<a name="l00207"></a>00207 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#344f58fef8cc34ac5aa75ba4b665d21c">runToPosition</a>(); |
|
<a name="l00208"></a>00208 <span class="comment"></span> |
|
<a name="l00209"></a>00209 <span class="comment"> /// Runs at the currently selected speed until the target position is reached</span> |
|
<a name="l00210"></a>00210 <span class="comment"> /// Does not implement accelerations.</span> |
|
<a name="l00211"></a>00211 <span class="comment"></span> <span class="keywordtype">boolean</span> <a class="code" href="classAccelStepper.html#9270d20336e76ac1fd5bcd5b9c34f301">runSpeedToPosition</a>(); |
|
<a name="l00212"></a>00212 <span class="comment"></span> |
|
<a name="l00213"></a>00213 <span class="comment"> /// Moves the motor to the new target position and blocks until it is at</span> |
|
<a name="l00214"></a>00214 <span class="comment"> /// position. Dont use this in event loops, since it blocks.</span> |
|
<a name="l00215"></a>00215 <span class="comment"> /// \param[in] position The new target position.</span> |
|
<a name="l00216"></a>00216 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#176c5d2e4c2f21e9e92b12e39a6f0e67">runToNewPosition</a>(<span class="keywordtype">long</span> position); |
|
<a name="l00217"></a>00217 <span class="comment"></span> |
|
<a name="l00218"></a>00218 <span class="comment"> /// Disable motor pin outputs by setting them all LOW</span> |
|
<a name="l00219"></a>00219 <span class="comment"> /// Depending on the design of your electronics this may turn off</span> |
|
<a name="l00220"></a>00220 <span class="comment"> /// the power to the motor coils, saving power.</span> |
|
<a name="l00221"></a>00221 <span class="comment"> /// This is useful to support Arduino low power modes: disable the outputs</span> |
|
<a name="l00222"></a>00222 <span class="comment"> /// during sleep and then reenable with enableOutputs() before stepping</span> |
|
<a name="l00223"></a>00223 <span class="comment"> /// again.</span> |
|
<a name="l00224"></a>00224 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#3591e29a236e2935afd7f64ff6c22006">disableOutputs</a>(); |
|
<a name="l00225"></a>00225 <span class="comment"></span> |
|
<a name="l00226"></a>00226 <span class="comment"> /// Enable motor pin outputs by setting the motor pins to OUTPUT</span> |
|
<a name="l00227"></a>00227 <span class="comment"> /// mode. Called automatically by the constructor.</span> |
|
<a name="l00228"></a>00228 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#a279a50d30d0413f570c692cff071643">enableOutputs</a>(); |
|
<a name="l00229"></a>00229 |
|
<a name="l00230"></a>00230 <span class="keyword">protected</span>: |
|
<a name="l00231"></a>00231 <span class="comment"></span> |
|
<a name="l00232"></a>00232 <span class="comment"> /// Forces the library to compute a new instantaneous speed and set that as</span> |
|
<a name="l00233"></a>00233 <span class="comment"> /// the current speed. Calls</span> |
|
<a name="l00234"></a>00234 <span class="comment"> /// desiredSpeed(), which can be overridden by subclasses. It is called by</span> |
|
<a name="l00235"></a>00235 <span class="comment"> /// the library:</span> |
|
<a name="l00236"></a>00236 <span class="comment"> /// \li after each step</span> |
|
<a name="l00237"></a>00237 <span class="comment"> /// \li after change to maxSpeed through setMaxSpeed()</span> |
|
<a name="l00238"></a>00238 <span class="comment"> /// \li after change to acceleration through setAcceleration()</span> |
|
<a name="l00239"></a>00239 <span class="comment"> /// \li after change to target position (relative or absolute) through</span> |
|
<a name="l00240"></a>00240 <span class="comment"> /// move() or moveTo()</span> |
|
<a name="l00241"></a>00241 <span class="comment"></span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#ffbee789b5c19165846cf0409860ae79">computeNewSpeed</a>(); |
|
<a name="l00242"></a>00242 <span class="comment"></span> |
|
<a name="l00243"></a>00243 <span class="comment"> /// Called to execute a step. Only called when a new step is</span> |
|
<a name="l00244"></a>00244 <span class="comment"> /// required. Subclasses may override to implement new stepping</span> |
|
<a name="l00245"></a>00245 <span class="comment"> /// interfaces. The default calls step1(), step2() or step4() depending on the</span> |
|
<a name="l00246"></a>00246 <span class="comment"> /// number of pins defined for the stepper.</span> |
|
<a name="l00247"></a>00247 <span class="comment"> /// \param[in] step The current step phase number (0 to 3)</span> |
|
<a name="l00248"></a>00248 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#3c9a220819d2451f79ff8a0c0a395b9f">step</a>(uint8_t <a class="code" href="classAccelStepper.html#3c9a220819d2451f79ff8a0c0a395b9f">step</a>); |
|
<a name="l00249"></a>00249 |
|
<a name="l00250"></a>00250 <span class="comment"></span> |
|
<a name="l00251"></a>00251 <span class="comment"> /// Called to execute a step on a stepper drover (ie where pins == 1). Only called when a new step is</span> |
|
<a name="l00252"></a>00252 <span class="comment"> /// required. Subclasses may override to implement new stepping</span> |
|
<a name="l00253"></a>00253 <span class="comment"> /// interfaces. The default sets or clears the outputs of Step pin1 to step, </span> |
|
<a name="l00254"></a>00254 <span class="comment"> /// and sets the output of _pin2 to the desired direction. The Step pin (_pin1) is pulsed for 1 microsecond</span> |
|
<a name="l00255"></a>00255 <span class="comment"> /// which is the minimum STEP pulse width for the 3967 driver.</span> |
|
<a name="l00256"></a>00256 <span class="comment"> /// \param[in] step The current step phase number (0 to 3)</span> |
|
<a name="l00257"></a>00257 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#cc64254ea242b53588e948335fd9305f">step1</a>(uint8_t step); |
|
<a name="l00258"></a>00258 <span class="comment"></span> |
|
<a name="l00259"></a>00259 <span class="comment"> /// Called to execute a step on a 2 pin motor. Only called when a new step is</span> |
|
<a name="l00260"></a>00260 <span class="comment"> /// required. Subclasses may override to implement new stepping</span> |
|
<a name="l00261"></a>00261 <span class="comment"> /// interfaces. The default sets or clears the outputs of pin1 and pin2</span> |
|
<a name="l00262"></a>00262 <span class="comment"> /// \param[in] step The current step phase number (0 to 3)</span> |
|
<a name="l00263"></a>00263 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#88f11bf6361fe002585f731d34fe2e8b">step2</a>(uint8_t step); |
|
<a name="l00264"></a>00264 <span class="comment"></span> |
|
<a name="l00265"></a>00265 <span class="comment"> /// Called to execute a step on a 4 pin motor. Only called when a new step is</span> |
|
<a name="l00266"></a>00266 <span class="comment"> /// required. Subclasses may override to implement new stepping</span> |
|
<a name="l00267"></a>00267 <span class="comment"> /// interfaces. The default sets or clears the outputs of pin1, pin2,</span> |
|
<a name="l00268"></a>00268 <span class="comment"> /// pin3, pin4.</span> |
|
<a name="l00269"></a>00269 <span class="comment"> /// \param[in] step The current step phase number (0 to 3)</span> |
|
<a name="l00270"></a>00270 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classAccelStepper.html#49e448d179bbe4e0f8003a3f9993789d">step4</a>(uint8_t step); |
|
<a name="l00271"></a>00271 <span class="comment"></span> |
|
<a name="l00272"></a>00272 <span class="comment"> /// Compute and return the desired speed. The default algorithm uses</span> |
|
<a name="l00273"></a>00273 <span class="comment"> /// maxSpeed, acceleration and the current speed to set a new speed to</span> |
|
<a name="l00274"></a>00274 <span class="comment"> /// move the motor from teh current position to the target</span> |
|
<a name="l00275"></a>00275 <span class="comment"> /// position. Subclasses may override this to provide an alternate</span> |
|
<a name="l00276"></a>00276 <span class="comment"> /// algorithm (but do not block). Called by computeNewSpeed whenever a new speed neds to be</span> |
|
<a name="l00277"></a>00277 <span class="comment"> /// computed. </span> |
|
<a name="l00278"></a>00278 <span class="comment"></span> <span class="keyword">virtual</span> <span class="keywordtype">float</span> <a class="code" href="classAccelStepper.html#6e4bd79c395e69beee31d76d0d3287e4">desiredSpeed</a>(); |
|
<a name="l00279"></a>00279 |
|
<a name="l00280"></a>00280 <span class="keyword">private</span>:<span class="comment"></span> |
|
<a name="l00281"></a>00281 <span class="comment"> /// Number of pins on the stepper motor. Permits 2 or 4. 2 pins is a</span> |
|
<a name="l00282"></a>00282 <span class="comment"> /// bipolar, and 4 pins is a unipolar.</span> |
|
<a name="l00283"></a>00283 <span class="comment"></span> uint8_t _pins; <span class="comment">// 2 or 4</span> |
|
<a name="l00284"></a>00284 <span class="comment"></span> |
|
<a name="l00285"></a>00285 <span class="comment"> /// Arduino pin number for the 2 or 4 pins required to interface to the</span> |
|
<a name="l00286"></a>00286 <span class="comment"> /// stepper motor.</span> |
|
<a name="l00287"></a>00287 <span class="comment"></span> uint8_t _pin1, _pin2, _pin3, _pin4; |
|
<a name="l00288"></a>00288 <span class="comment"></span> |
|
<a name="l00289"></a>00289 <span class="comment"> /// The current absolution position in steps.</span> |
|
<a name="l00290"></a>00290 <span class="comment"></span> <span class="keywordtype">long</span> _currentPos; <span class="comment">// Steps</span> |
|
<a name="l00291"></a>00291 <span class="comment"></span> |
|
<a name="l00292"></a>00292 <span class="comment"> /// The target position in steps. The AccelStepper library will move the</span> |
|
<a name="l00293"></a>00293 <span class="comment"> /// motor from teh _currentPos to the _targetPos, taking into account the</span> |
|
<a name="l00294"></a>00294 <span class="comment"> /// max speed, acceleration and deceleration</span> |
|
<a name="l00295"></a>00295 <span class="comment"></span> <span class="keywordtype">long</span> _targetPos; <span class="comment">// Steps</span> |
|
<a name="l00296"></a>00296 <span class="comment"></span> |
|
<a name="l00297"></a>00297 <span class="comment"> /// The current motos speed in steps per second</span> |
|
<a name="l00298"></a>00298 <span class="comment"> /// Positive is clockwise</span> |
|
<a name="l00299"></a>00299 <span class="comment"></span> <span class="keywordtype">float</span> _speed; <span class="comment">// Steps per second</span> |
|
<a name="l00300"></a>00300 <span class="comment"></span> |
|
<a name="l00301"></a>00301 <span class="comment"> /// The maximum permitted speed in steps per second. Must be > 0.</span> |
|
<a name="l00302"></a>00302 <span class="comment"></span> <span class="keywordtype">float</span> _maxSpeed; |
|
<a name="l00303"></a>00303 <span class="comment"></span> |
|
<a name="l00304"></a>00304 <span class="comment"> /// The acceleration to use to accelerate or decelerate the motor in steps</span> |
|
<a name="l00305"></a>00305 <span class="comment"> /// per second per second. Must be > 0</span> |
|
<a name="l00306"></a>00306 <span class="comment"></span> <span class="keywordtype">float</span> _acceleration; |
|
<a name="l00307"></a>00307 <span class="comment"></span> |
|
<a name="l00308"></a>00308 <span class="comment"> /// The current interval between steps in milliseconds.</span> |
|
<a name="l00309"></a>00309 <span class="comment"></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _stepInterval; |
|
<a name="l00310"></a>00310 <span class="comment"></span> |
|
<a name="l00311"></a>00311 <span class="comment"> /// The last step time in milliseconds</span> |
|
<a name="l00312"></a>00312 <span class="comment"></span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> _lastStepTime; |
|
<a name="l00313"></a>00313 }; |
|
<a name="l00314"></a>00314 |
|
<a name="l00315"></a>00315 <span class="preprocessor">#endif </span> |
|
</pre></div></div> |
|
<hr size="1"><address style="text-align: right;"><small>Generated on Sun Oct 24 18:22:50 2010 for AccelStepper by |
|
<a href="http://www.doxygen.org/index.html"> |
|
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address> |
|
</body> |
|
</html>
|
|
|