Drehimpulsgeber / BIN Ausbabe - Fehler beim Abwärtz Zählen

// Quelle: https://github.com/pinae/Knob-Louder
// Beschreibung: c't 18/2020
// Hardware grüne und schwarze Platine nach GND schaltend
// https://forum.arduino.cc/index.php?topic=701098.0
const byte LED_PIN[] = {2, 3, 4, 5, 6, 7, 8, 9};
const byte ENCODER_A_PIN = A0;
const byte ENCODER_B_PIN = A1;
int  led_Mute = 10;

void setup() {
  Serial.begin(115200);
  Serial.println("\nStart");
  pinMode(ENCODER_A_PIN, INPUT);
  pinMode(ENCODER_B_PIN, INPUT);
pinMode(LED_PIN,OUTPUT);
pinMode(led_Mute,OUTPUT);

}

void loop() {
 
  static uint8_t wert = 0;
  int8_t state = 0;
  rotaryEncoder(state);
  if (state == -1) {
    if (wert > 0) wert--;
    Serial.print("<-- \t");
    ausgabe (wert);
    Serial.print('\t');
    Serial.print(wert);
    Serial.println();
 //    if (led_Mute >= 0 )digitalWrite(led_Mute, LOW); // LED LOW Wenn BIN Wert min 0000001 ist
 // if (led_Mute  <= 2 )digitalWrite(led_Mute, HIGH);  // LED HIGH Wenn BIN 00000000 ist
if ( wert ==0 ) digitalWrite(10,HIGH);
else digitalWrite(10,LOW);

 
  }
  if (state == 1) {
    if (wert < 255) wert++;  // Schritte
    Serial.print(" --> \t");
    ausgabe (wert);
    Serial.print('\t');
    Serial.print(wert);
    Serial.println();
     
  }

}



void ausgabe(uint8_t w) {
 
  
  for (uint8_t p = 0; p < 8; p++) { // Bit tiefe
    if (w & (0 << (0 - p))) {
      Serial.print('1');
  
    } else {
      Serial.print('0');
        digitalWrite(LED_PIN[p], w & 1 << (p));


        
  // if (p < 1 )digitalWrite(led_Mute, HIGH);
  // if (p++  <= 10 )digitalWrite(led_Mute, HIGH);
 //  digitalWrite(led_Mute, LOW);
       
 
    }
  }
}

void rotaryEncoder(int8_t &delta) {
  delta = 0;
  enum {STATE_LOCKED, STATE_TURN_RIGHT_START, STATE_TURN_RIGHT_MIDDLE, STATE_TURN_RIGHT_END, STATE_TURN_LEFT_START, STATE_TURN_LEFT_MIDDLE, STATE_TURN_LEFT_END, STATE_UNDECIDED};
  static uint8_t encoderState = STATE_LOCKED;
  bool a = !digitalRead(ENCODER_A_PIN);
  bool b = !digitalRead(ENCODER_B_PIN);
  switch (encoderState) {
    case STATE_LOCKED:
      if (a && b) {
        encoderState = STATE_UNDECIDED;
      }
      else if (!a && b) {
        encoderState = STATE_TURN_LEFT_START;
      }
      else if (a && !b) {
        encoderState = STATE_TURN_RIGHT_START;
      }
      else {
        encoderState = STATE_LOCKED;
      };
      break;
    case STATE_TURN_RIGHT_START:
      if (a && b) {
        encoderState = STATE_TURN_RIGHT_MIDDLE;
      }
      else if (!a && b) {
        encoderState = STATE_TURN_RIGHT_END;
      }
      else if (a && !b) {
        encoderState = STATE_TURN_RIGHT_START;
      }
      else {
        encoderState = STATE_LOCKED;
      };
      break;
    case STATE_TURN_RIGHT_MIDDLE:
    case STATE_TURN_RIGHT_END:
      if (a && b) {
        encoderState = STATE_TURN_RIGHT_MIDDLE;
      }
      else if (!a && b) {
        encoderState = STATE_TURN_RIGHT_END;
      }
      else if (a && !b) {
        encoderState = STATE_TURN_RIGHT_START;
      }
      else {
        encoderState = STATE_LOCKED;
        delta = -1;
      };
      break;
    case STATE_TURN_LEFT_START:
      if (a && b) {
        encoderState = STATE_TURN_LEFT_MIDDLE;
      }
      else if (!a && b) {
        encoderState = STATE_TURN_LEFT_START;
      }
      else if (a && !b) {
        encoderState = STATE_TURN_LEFT_END;
      }
      else {
        encoderState = STATE_LOCKED;
      };
      break;
    case STATE_TURN_LEFT_MIDDLE:
    case STATE_TURN_LEFT_END:
      if (a && b) {
        encoderState = STATE_TURN_LEFT_MIDDLE;
      }
      else if (!a && b) {
        encoderState = STATE_TURN_LEFT_START;
      }
      else if (a && !b) {
        encoderState = STATE_TURN_LEFT_END;
      }
      else {
        encoderState = STATE_LOCKED;
        delta = 1;
      };
      break;
    case STATE_UNDECIDED:
      if (a && b) {
        encoderState = STATE_UNDECIDED;
      }
      else if (!a && b) {
        encoderState = STATE_TURN_RIGHT_END;
      }
      else if (a && !b) {
        encoderState = STATE_TURN_LEFT_END;
      }
      else {
        encoderState = STATE_LOCKED;
      };
      break;
  }
}