Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
416 lines (386 sloc) 8.33 KB
/**
* \par Copyright (C), 2012-2016, MakeBlock
* \class MeStepper
* \brief Driver for Me Stepper device.
* @file MeStepper.h
* @author MakeBlock
* @version V1.0.3
* @date 2016/01/20
* @brief Header for MeStepper.cpp module
*
* \par Copyright
* This software is Copyright (C), 2012-2016, MakeBlock. Use is subject to license \n
* conditions. The main licensing options available are GPL V2 or Commercial: \n
*
* \par Open Source Licensing GPL V2
* This is the appropriate option if you want to share the source code of your \n
* application with everyone you distribute it to, and you also want to give them \n
* the right to share who uses it. If you wish to use this software under Open \n
* Source Licensing, you must contribute all your source code to the open source \n
* community in accordance with the GPL Version 2 when your application is \n
* distributed. See http://www.gnu.org/copyleft/gpl.html
*
* \par Description
* This file is a drive for Me Stepper device.
*
* \par Method List:
*
* 1. void MeStepper::setpin(uint8_t dir_data, uint8_t step_data);
* 2. void MeStepper::moveTo(long absolute);
* 3. void MeStepper::move(long relative);
* 4. boolean MeStepper::run();
* 5. boolean MeStepper::runSpeed();
* 6. void MeStepper::setMaxSpeed(float speed);
* 7. void MeStepper::setAcceleration(float acceleration);
* 8. void MeStepper::setSpeed(float speed);
* 9. float MeStepper::speed();
* 10. long MeStepper::distanceToGo();
* 11. long MeStepper::targetPosition();
* 12. long MeStepper::currentPosition();
* 13. void MeStepper::setCurrentPosition(long position);
* 14. void MeStepper::runToPosition();
* 15. boolean MeStepper::runSpeedToPosition();
* 16. void MeStepper::runToNewPosition(long position);
* 17. void MeStepper::disableOutputs();
* 18. void MeStepper::enableOutputs();
*
* \par History:
* <pre>
* `<Author>` `<Time>` `<Version>` `<Descr>`
* Mark Yan 2015/10/09 1.0.0 Bulid the new
* Mark Yan 2015/10/29 1.0.1 Fix minor errors in format
* forfish 2015/11/11 1.0.2 Add description.
* Mark Yan 2016/01/20 1.0.3 Fix minor errors in comment.
* </pre>
*/
#ifndef MeStepper_h
#define MeStepper_h
#include "MePort.h"
#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#include "stdlib.h"
#include "wiring.h"
#endif
// These defs cause trouble on some versions of Arduino
#undef round
/**
* Class: MeStepper
* \par Description
* Declaration of Class MeStepper.
*/
class MeStepper:public MePort
{
public:
/**
* Alternate Constructor which can call your own function to map the stepper to arduino port,
* no pins are used or initialized here.
* \param[in]
* None
*/
MeStepper();
/**
* Alternate Constructor which can call your own function to map the stepper to arduino port,
* the slot2 pin will be used here since specify slot is not be set.
* \param[in]
* port - RJ25 port from PORT_1 to M2
*/
MeStepper(uint8_t port);
/**
* \par Function
* setpin
* \par Description
* Set pin for Stepper.
* \param[in]
* dir_data - The direction data of Stepper's movement.
* \param[in]
* step_data - The command data for Stepper.
* \par Output
* None
* \par Return
* None
* \par Others
* None
*/
void setpin(uint8_t dir_data, uint8_t step_data);
/**
* \par Function
* moveTo
* \par Description
* Stepper moves to the aim.
* \param[in]
* absolute - The absolute length to Stepper's movement.
* \par Output
* None
* \par Return
* None
* \par Others
* None
*/
void moveTo(long absolute);
/**
* \par Function
* move
* \par Description
* Stepper moves to the aim.
* \param[in]
* relative - The relative length to Stepper's movement.
* \par Output
* None
* \par Return
* None
* \par Others
* None
*/
void move(long relative);
/**
* \par Function
* run
* \par Description
* Stepper's status----run or not.
* \param[in]
* None
* \par Output
* None
* \par Return
* Return the status.
* \par Others
* None
*/
boolean run();
/**
* \par Function
* runSpeed
* \par Description
* The speed of Stepper's running.
* \param[in]
* None
* \par Output
* None
* \par Return
* Return true or false.
* \par Others
* None
*/
boolean runSpeed();
/**
* \par Function
* setMaxSpeed
* \par Description
* Set Max Speed for Stepper.
* \param[in]
* None
* \par Output
* None
* \par Return
* None
* \par Others
* None
*/
void setMaxSpeed(float speed);
/**
* \par Function
* setAcceleration
* \par Description
* Set Acceleration for Stepper.
* \param[in]
* acceleration - The acceleration for Stepper.
* \par Output
* None
* \par Return
* None
* \par Others
* None
*/
void setAcceleration(float acceleration);
/**
* \par Function
* setSpeed
* \par Description
* Set Speed for Stepper.
* \param[in]
* speed - The speed of Stepper.
* \par Output
* None
* \par Return
* None
* \par Others
* None
*/
void setSpeed(float speed);
/**
* \par Function
* speed
* \par Description
* The Speed of Stepper.
* \param[in]
* None
* \par Output
* None
* \par Return
* Return the Stepper's speed.
* \par Others
* None
*/
float speed();
/**
* \par Function
* distanceToGo
* \par Description
* The distance that Stepper should go.
* \param[in]
* None
* \par Output
* None
* \par Return
* Return the length of Stepper's running.
* \par Others
* None
*/
long distanceToGo();
/**
* \par Function
* targetPosition
* \par Description
* Stepper goes to target position.
* \param[in]
* None
* \par Output
* None
* \par Return
* Return the position of Stepper.
* \par Others
* None
*/
long targetPosition();
/**
* \par Function
* currentPosition
* \par Description
* Stepper's current position.
* \param[in]
* None
* \par Output
* None
* \par Return
* Return the current position of Stepper.
* \par Others
* None
*/
long currentPosition();
/**
* \par Function
* setCurrentPosition
* \par Description
* Set Stepper's current position.
* \param[in]
* position - The current position for Stepper.
* \par Output
* None
* \par Return
* Return the current position of Stepper.
* \par Others
* None
*/
void setCurrentPosition(long position);
/**
* \par Function
* runToPosition
* \par Description
* Stepper runs to position.
* \param[in]
* None
* \par Output
* None
* \par Return
* None
* \par Others
* None
*/
void runToPosition();
/**
* \par Function
* runSpeedToPosition
* \par Description
* The speed of Stepper on the way to position.
* \param[in]
* None
* \par Output
* None
* \par Return
* Return true or false.
* \par Others
* None
*/
boolean runSpeedToPosition();
/**
* \par Function
* runToNewPosition
* \par Description
* The Stepper runs to new position.
* \param[in]
* None
* \par Output
* None
* \par Return
* None
* \par Others
* None
*/
void runToNewPosition(long position);
void disableOutputs();
void enableOutputs();
protected:
/**
* \par Function
* computeNewSpeed
* \par Description
* Compute New Speed of Stepper.
* \param[in]
* None
* \par Output
* None
* \par Return
* None
* \par Others
* None
*/
void computeNewSpeed();
/**
* \par Function
* step
* \par Description
* Stepper runs step by step.
* \param[in]
* None
* \par Output
* None
* \par Return
* None
* \par Others
* None
*/
virtual void step();
private:
static volatile uint8_t _dir_data;
static volatile uint8_t _step_data;
uint8_t _dir; // 2 or 4
long _currentPos; // Steps
long _targetPos; // Steps
float _speed; // Steps per second
float _maxSpeed;
float _acceleration;
unsigned long _stepInterval;
unsigned long _lastStepTime;
/// The step counter for speed calculations
long _n;
/// Initial step size in microseconds
float _c0;
/// Last step size in microseconds
float _cn;
/// Min step size in microseconds based on maxSpeed
float _cmin; // at max speed
uint8_t _dirPin, _stpPin;
};
#endif