#include <QuadratureCounter4X.h>
#include <StepCounter.h>
#include <InputPin.h>
#include <Timers.h>
#include <inc/hw_gpio.h>
#include "driverlib/interrupt.h"
QuadratureCounter4X::QuadratureCounter4X(
InputPin* aPin1,
InputPin* aPin2,
float ascale ) {
pin1 = aPin1;
pin2 = aPin2;
scale = ascale;
pinsU.bothPins = 0;
pin1->enableBothEdgeInterrupt();
pin2->enableBothEdgeInterrupt();
pin1->stepCounter = this;
pin2->stepCounter = this; };
QuadratureCounter4X::~QuadratureCounter4X() {
#ifdef DebugDelete
Serial.println( " delete QuadratureCounter4X" );
#endif
delete pin1;
delete pin2; };
void
QuadratureCounter4X::pinISR( InputPin* pin ) {
if ( pin == pin1 ) {
pinsU.st.pin1 = pin1->readPin();
switch ( pinsU.bothPins ) {
case 1 :
case 2 :
adjust( 1 );
// stepCount++;
break;
case 0 :
case 3 :
adjust( -1 );
// stepCount--;
}; }
else {
pinsU.st.pin2 = pin2->readPin();
switch ( pinsU.bothPins ) {
case 0 :
case 3 :
adjust( 1 );
// stepCount++;
break;
case 1 :
case 2 :
adjust( -1 );
// stepCount--;
}; }; };