#include #include #include "encoder.h" int8_t DrehgeberPosition; int8_t DrehgeberMax = 127; int8_t DrehgeberMin = -127; #define DDR(x) (*(&x-1)) #define Port(x) (*(&x)) #define PIN(x) (*(&x-2)) #define PHASE_A PIN(ENC_A_PORT) & (1<= iButtonDebounceCycles && (! BUTTONPRESSED)) { buttonState = ButtonState_Released; if(buttonPressed != ButtonPressed_Long) buttonPressed = ButtonPressed_Short; } if(iButtonPressedCounter >= iButtonPressedLongCycles) { buttonPressed = ButtonPressed_Long; } break; case ButtonState_Released: iButtonPressedCounter = 0; buttonState = ButtonState_Unpressed; break; } } #if defined (SingleStep) int8_t EncodeRead(void) { int8_t val; cli(); val = enc_delta; enc_delta = 0; sei(); return val; } #elif defined (TwoStep) int8_t EncodeRead(void) { int8_t val; cli(); val = enc_delta; enc_delta = val & 1; sei(); return val >> 1; } #elif defined (FourStep) int8_t EncodeRead(void) { int8_t val; cli(); val = enc_delta; enc_delta = val & 3; sei(); return val >> 2; } #endif int8_t EncoderRead(char Ueberlauf) { DrehgeberPosition += EncodeRead(); if(DrehgeberPosition > DrehgeberMax) { if(Ueberlauf) DrehgeberPosition = DrehgeberPosition - DrehgeberMax + DrehgeberMin - 1; else DrehgeberPosition = DrehgeberMax; } if(DrehgeberPosition < DrehgeberMin) { if(Ueberlauf) DrehgeberPosition = DrehgeberPosition + DrehgeberMax - DrehgeberMin + 1; else DrehgeberPosition = DrehgeberMin; } return(DrehgeberPosition); } void EncoderWrite(int8_t EncoderPos) { DrehgeberPosition = EncoderPos; } void EncoderMinMax(int8_t EncoderMin, int8_t EncoderMax) { DrehgeberMin = EncoderMin; DrehgeberMax = EncoderMax; if(DrehgeberPosition > DrehgeberMax) DrehgeberPosition = DrehgeberMax; if(DrehgeberPosition < DrehgeberMin) DrehgeberPosition = DrehgeberMin; } tEButtonPressedState EncoderGetButtonState(void) { tEButtonPressedState retVal = buttonPressed; buttonPressed = ButtonPressed_Unpressed; return retVal; }