Files
AsteleMotor/stepper.h
2019-05-06 19:06:49 +02:00

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);
};