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