43 lines
1.0 KiB
C++
43 lines
1.0 KiB
C++
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
class Stepper
|
|
{
|
|
private:
|
|
volatile uint8_t * const _port;
|
|
const uint8_t _pinA;
|
|
const uint8_t _pinB;
|
|
const uint8_t _pinC;
|
|
const uint8_t _pinD;
|
|
|
|
static constexpr uint8_t acceleration = 5;
|
|
static constexpr uint8_t speedFloor = 50;
|
|
|
|
bool endlessMove = false;
|
|
bool endlessDriection = true;
|
|
|
|
uint16_t _speed = speedFloor;
|
|
uint8_t _targetSpeed = 220;
|
|
uint8_t _stepInterval = 0;
|
|
|
|
uint16_t _tickCounter = 0;
|
|
|
|
int32_t _currentStep = 0;
|
|
int32_t _targetStep = 0;
|
|
|
|
void step(bool direction);
|
|
|
|
|
|
public:
|
|
|
|
Stepper( volatile uint8_t * const port, const uint8_t pinA, const uint8_t pinB, const uint8_t pinC, const uint8_t pinD): _port(port), _pinA(pinA), _pinB(pinB), _pinC(pinC), _pinD(pinD){}
|
|
void tick();
|
|
void moveTo(const int32_t step);
|
|
void moveRelative(const int16_t dist);
|
|
void setSpeed(const uint8_t speed);
|
|
uint32_t isAt();
|
|
bool isStoped();
|
|
void setEndlesMove(bool endless, bool direction = true);
|
|
};
|