farmbot-arduino-firmware/src/MovementEncoder.h

88 lines
1.9 KiB
C
Raw Normal View History

2015-10-29 16:50:09 -06:00
/*
2019-12-02 14:07:28 -07:00
* MovementEncoder.h
2015-10-29 16:50:09 -06:00
*
* Created on: 29 okt 2015
* Author: Tim Evers
*/
2019-12-02 14:07:28 -07:00
#ifndef MovementENCODER_H_
#define MovementENCODER_H_
2015-10-29 16:50:09 -06:00
#include "Arduino.h"
//#include "CurrentState.h"
//#include "ParameterList.h"
#include "pins.h"
#include "Config.h"
#include <stdio.h>
#include <stdlib.h>
2018-01-29 13:59:02 -07:00
#include <SPI.h>
2019-12-02 14:07:28 -07:00
#include "MovementAxis.h"
2015-10-29 16:50:09 -06:00
2019-12-02 14:07:28 -07:00
class MovementEncoder
2017-04-19 08:12:12 -06:00
{
2015-10-29 16:50:09 -06:00
public:
2019-12-02 14:07:28 -07:00
MovementEncoder();
2015-10-29 16:50:09 -06:00
2017-04-19 08:12:12 -06:00
void loadPinNumbers(int channelA, int channelB, int channelAQ, int channelBQ);
2019-02-07 18:43:28 -07:00
void loadSettings(int encType, long scaling, int invert);
2015-10-29 16:50:09 -06:00
2018-01-29 13:59:02 -07:00
// Load the id for the motor dynamics lab encoder
void loadMdlEncoderId(MdlSpiEncoders encoder);
2017-04-19 08:12:12 -06:00
void setPosition(long newPosition);
long currentPosition();
long currentPositionRaw();
2015-10-29 16:50:09 -06:00
2017-05-28 14:54:58 -06:00
void checkEncoder(bool channelA, bool channelB, bool channelAQ, bool channelBQ);
void processEncoder();
2017-04-19 08:12:12 -06:00
void readChannels();
2017-05-02 12:35:16 -06:00
void setChannels(bool channelA, bool channelB, bool channelAQ, bool channelBQ);
2017-04-19 08:12:12 -06:00
void shiftChannels();
void test();
2015-10-29 16:50:09 -06:00
2019-10-22 12:06:55 -06:00
void setMovementDirection(bool up);
void setEnable(bool enable);
void setStepDecay(float stepDecay);
float getMissedSteps();
void checkMissedSteps();
2015-10-29 16:50:09 -06:00
private:
2017-04-19 08:12:12 -06:00
// pin settings
2019-12-02 14:07:28 -07:00
int pinChannelA = 0;
int pinChannelAQ = 0;
int pinChannelB = 0;
int pinChannelBQ = 0;
2017-04-19 08:12:12 -06:00
// channels
2019-12-02 14:07:28 -07:00
bool prvValChannelA = false;
bool prvValChannelB = false;
bool curValChannelA = false;
bool curValChannelB = false;
2017-04-19 08:12:12 -06:00
2019-12-02 14:07:28 -07:00
bool readChannelA = false;
bool readChannelAQ = false;
bool readChannelB = false;
bool readChannelBQ = false;
2017-04-19 08:12:12 -06:00
// encoder
2019-12-02 14:07:28 -07:00
long position = 0;
long scalingFactor = 0;
float floatScalingFactor = 0;
int encoderType = 0;
int encoderInvert = 0;
2018-01-29 13:59:02 -07:00
2019-10-22 12:06:55 -06:00
2019-12-02 14:07:28 -07:00
float missedSteps = 0;
long encoderLastPosition = 0;
float encoderStepDecay = 0;
bool encoderEnabled = false;
bool encoderMovementUp = false;
2019-10-22 12:06:55 -06:00
2018-01-29 13:59:02 -07:00
MdlSpiEncoders mdlEncoder = _MDL_X1;
2015-10-29 16:50:09 -06:00
};
2019-12-02 14:07:28 -07:00
#endif /* MovementENCODER_H_ */