#define no_team 0
#define rotated_left 21
#define rotated_rights 22
#define p_clk 2                        
#define p_dt 3                  


void setup() {
  Serial.begin (9600);  


  attachInterrupt(digitalPinToInterrupt(p_dt), InterruptReadPinDT, CHANGE);

}

void loop() {
  switch (Encoder(no_team)) {
    case rotated_rights:
      Serial.println("rotated_right");
      break;
    case rotated_left:
      Serial.println("rotated_left");
      break;

  }

}

void InterruptReadPinDT() {

  volatile static int8_t clkStateCurrent;
  volatile static int8_t clkStateLast;


  clkStateCurrent = digitalRead(p_clk);

  if ((clkStateLast == LOW) && (clkStateCurrent == HIGH)) {

    if (digitalRead(p_dt) == HIGH) {      
      Encoder(rotated_rights);
            
    } else {
      Encoder(rotated_left);
               
    }

  }

  clkStateLast = clkStateCurrent;       

}

int8_t Encoder(int8_t Host) {

  static int8_t sPos;

  if (!Host && !sPos) {
    return 0;
  }

  else if (Host && !sPos) {
    sPos = Host;
  }
  else if (!Host && sPos) {
    Host = sPos;
    sPos = 0;
    return Host;
  }

  return 0;

}