Create first draft of library
This commit is contained in:
commit
e214413705
|
@ -0,0 +1,81 @@
|
|||
|
||||
#include "IteadDualStepperShield.h"
|
||||
|
||||
IteadDualStepperShield::IteadDualStepperShield () {}
|
||||
|
||||
void IteadDualStepperShield::setup () {
|
||||
pinMode(_directionA, OUTPUT);
|
||||
pinMode(_directionB, OUTPUT);
|
||||
pinMode(_stepA, OUTPUT);
|
||||
pinMode(_stepB, OUTPUT);
|
||||
setDir(0, 1);
|
||||
setDir(1, 1);
|
||||
}
|
||||
|
||||
void IteadDualStepperShield::setDir (uint8_t motor, uint8_t dir) {
|
||||
if (motor == 0) {
|
||||
directionA = dir;
|
||||
digitalWrite(_directionA, directionA > 0 ? HIGH : LOW);
|
||||
} else if (motor == 1) {
|
||||
directionB = dir;
|
||||
digitalWrite(_directionB, directionB > 0 ? HIGH : LOW);
|
||||
}
|
||||
}
|
||||
|
||||
void IteadDualStepperShield::setSpeed (uint8_t motor, uint16_t rpm) {
|
||||
uint32_t usPerStep = 60000000 / ((uint32_t) revsteps * (uint32_t) rpm);
|
||||
if (motor == 0) {
|
||||
_usStepA = usPerStep;
|
||||
} else if (motor == 1) {
|
||||
_usStepB = usPerStep;
|
||||
}
|
||||
}
|
||||
|
||||
void IteadDualStepperShield::_micro (uint8_t motor) {
|
||||
uint8_t stepPin = motor == 0 ? _stepA : _stepB;
|
||||
uint32_t usStep = motor == 0 ? _usStepA : _usStepB;
|
||||
digitalWrite(stepPin, HIGH);
|
||||
delayMicroseconds(usStep);
|
||||
digitalWrite(stepPin, LOW);
|
||||
delayMicroseconds(usStep);
|
||||
}
|
||||
|
||||
//full
|
||||
void IteadDualStepperShield::_single (uint8_t motor) {
|
||||
uint8_t stepPin = motor == 0 ? _stepA : _stepB;
|
||||
uint32_t usStep = motor == 0 ? _usStepA : _usStepB;
|
||||
for (uint8_t i = 0; i < _microsteps; i++) {
|
||||
digitalWrite(stepPin, HIGH);
|
||||
delayMicroseconds(usStep);
|
||||
digitalWrite(stepPin, LOW);
|
||||
delayMicroseconds(usStep);
|
||||
}
|
||||
}
|
||||
void IteadDualStepperShield::_both () {
|
||||
for (uint8_t i = 0; i < _microsteps; i++) {
|
||||
digitalWrite(_stepA, HIGH);
|
||||
digitalWrite(_stepB, HIGH);
|
||||
delayMicroseconds(_usStepA);
|
||||
digitalWrite(_stepA, LOW);
|
||||
digitalWrite(_stepB, LOW);
|
||||
delayMicroseconds(_usStepA);
|
||||
}
|
||||
}
|
||||
void IteadDualStepperShield::step (uint8_t motor, uint16_t steps, uint8_t dir) {
|
||||
uint8_t stepPin = motor == 0 ? _stepA : _stepB;
|
||||
setDir(motor, dir);
|
||||
for (int i = 0; i < steps; i++) {
|
||||
_single(stepPin);
|
||||
}
|
||||
}
|
||||
void IteadDualStepperShield::onestep (uint8_t motor, uint8_t dir) {
|
||||
uint8_t stepPin = motor == 0 ? _stepA : _stepB;
|
||||
setDir(motor, dir);
|
||||
_single(stepPin);
|
||||
}
|
||||
|
||||
void IteadDualStepperShield::stepBoth (uint16_t steps) {
|
||||
for (int i = 0; i < steps; i++) {
|
||||
_both();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
#ifndef IteadDualStepperShield_h
|
||||
#define IteadDualStepperShield_h
|
||||
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
class IteadDualStepperShield {
|
||||
private:
|
||||
const uint8_t _microsteps = 8; //8 or 16
|
||||
const uint8_t _directionA = 3;
|
||||
const uint8_t _directionB = 7;
|
||||
const uint8_t _stepA = 2;
|
||||
const uint8_t _stepB = 6;
|
||||
|
||||
void _single(uint8_t motor);
|
||||
void _micro(uint8_t motor);
|
||||
void _both();
|
||||
|
||||
uint32_t _usStepA = 300;
|
||||
uint32_t _usStepB = 300;
|
||||
|
||||
public:
|
||||
IteadDualStepperShield();
|
||||
|
||||
uint16_t revsteps = 200; // # steps per revolution
|
||||
|
||||
volatile uint8_t directionA = 1;
|
||||
volatile uint8_t directionB = 1;
|
||||
void setup();
|
||||
|
||||
void setDir(uint8_t motor, uint8_t dir);
|
||||
void setSpeed(uint8_t motor, uint16_t speed);
|
||||
|
||||
//full
|
||||
void step(uint8_t motor, uint16_t steps, uint8_t dir);
|
||||
void stepBoth(uint16_t steps);
|
||||
void onestep(uint8_t motor, uint8_t dir);
|
||||
|
||||
void release();
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue