4 Bit Display, Rotary und USB HID (Arduino Uno), Menü auswählen und USB HID senden

Erst mal danke fürs ansehen und Du hast natürlich recht, das muss viel weiter oben passieren, nicht da wo man schon mitten im Ablauf ist...
Leider ist die Lösung nicht ganz so einfach, es führt zum selben Ergebnis wie zuvor "eeeeeeeeeeeeee"
Aber Du hast mich in die richtiger Richtung geschubst:

if (encoderPos <= 3 && !digitalRead(encoderPinSW))
  {
    vorhin = jetzt; // Monoflop retriggern
    lcd.setCursor(0, 0);
    lcd.print(text2[encoderPos]);
  }

  
  if (lastReportedPos != encoderPos)
  {

natürlich braucht man noch ein weiteres Array:

  const char * text2[5] = {"Menueauswahl treffen", "Menueauswahl treffen", "Menueauswahl treffen", "Menueauswahl treffen", "Menueausw Test"};

Dennoch hab ich noch ein paar Problemchen, wie dass -wenn man Mute aktiviert hat- und dabei rotiert > "Menueausw Test" dann auftaucht, anstelle von > " Mute aktiv " -der Text aus der Muteposition - angezeigt wird, da muss ich noch schauen ob ich das auch lösen kann.

Hier dann der nun komplette aktuelle Code:

#include <LiquidCrystal.h>
const int rs = 4, en = 5, d4 = 6, d5 = 7, d6 = 8, d7 = 9;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

const byte encoderPinA = 2;
const byte encoderPinB = 3;
const byte encoderPinSW = 10;
volatile int8_t encoderPos = 0;          // a counter for the dial
int8_t lastReportedPos = -1;             // change management
bool rotating = false;                   // debounce management
bool neuePosition = false;
boolean A_set = false;                   // interrupt service routine vars
boolean B_set = false;                   // interrupt service routine vars
bool mutePos = false;
bool displayOn = true;

void setup() {
  lcd.begin(20, 2);

  pinMode(encoderPinA, INPUT_PULLUP);
  pinMode(encoderPinB, INPUT_PULLUP);
  pinMode(encoderPinSW, INPUT_PULLUP);

  attachInterrupt(0, doEncoderA, CHANGE); // encoder pin on interrupt 0 (pin 2)
  attachInterrupt(1, doEncoderB, CHANGE); // encoder pin on interrupt 1 (pin 3)

  Serial.begin(9600);                     // output
}

void loop()
{
  const char * text[5] = {"     Filter  1      ", "     Filter  2     ", "     Filter  3    ", "    Pass through    ", "        Mute        "};
  const char * text2[5] = {"Menueauswahl treffen", "Menueauswahl treffen", "Menueauswahl treffen", "Menueauswahl treffen", "Menueausw Test"};
  const uint8_t code[5][8] = {
    {0, 0,  8, 40, 0, 0, 0, 0},
    {0, 0, 21, 40, 0, 0, 0, 0},
    {0, 0, 23, 40, 0, 0, 0, 0},
    {0, 0, 28, 40, 0, 0, 0, 0},
    {0, 0, 29, 40, 0, 0, 0, 0}
    };
  rotating = true;  // reset the debouncer
  uint32_t jetzt = millis();
  static uint32_t vorhin = jetzt;
  const uint32_t intervall = 5000;        // Abschaltzeit nach Inaktivität in ms
  uint32_t jetzt2 = millis();
  static uint32_t vorhin2 = jetzt2;
  const uint32_t intervall2 = 20;         // Entprellen
  if (encoderPos <= 3 && !digitalRead(encoderPinSW))
  {
    vorhin = jetzt; // Monoflop retriggern
    lcd.setCursor(0, 0);
    lcd.print(text2[encoderPos]);
  }

  
  if (lastReportedPos != encoderPos)
  {
    lastReportedPos = encoderPos;
    vorhin = jetzt; // Monoflop retriggern
    displayOn = true;
    lcd.setCursor(0, 1);
    if (encoderPos < 0 && mutePos == false) encoderPos = 0;
    if (encoderPos <= 3 && mutePos == true) encoderPos = 4;                
    if (encoderPos > 4) encoderPos = 4;
    if (mutePos == false)
    lcd.print(text[encoderPos]);
    if (encoderPos <= 3)
    lcd.setCursor(0, 0);
    lcd.print(text2[encoderPos]);
    neuePosition = true;
    if (encoderPos >3 && mutePos == true)
    {
    lcd.print("     Mute aktiv     ");
    }
  }
  if (displayOn && encoderPos <= 3 && mutePos == false && neuePosition && !digitalRead(encoderPinSW)) // nur beim Tastendruck des Encoders werden die Zeichen verschickt
  {
    neuePosition = false;
    Serial.write(code[encoderPos], 8);
    releaseKey();

  }
  if (encoderPos <= 3 && jetzt - vorhin >= intervall)
  {
    lcd.setCursor(0, 1);
    lcd.print("                    ");
    lcd.setCursor(0, 0);
    lcd.print("                    ");
    displayOn = false;
  }
  if (encoderPos == 4)
  {
    static bool tik = false;
    static bool tak = false;
    if (!digitalRead(encoderPinSW))
      {
        if (!tik && !tak)
          {
            vorhin2 = jetzt2;              // Monoflop retriggern für Entprellen
            tik = true;
            tak = true;
            lcd.setCursor(0, 1);
            lcd.print("     Mute aktiv     ");
            lcd.setCursor(0, 0);
            lcd.print(" Mute Deaktivieren! ");
            Serial.write(code[encoderPos], 8);
            releaseKey();
            mutePos = true;
          }
            else if (!tik && tak && jetzt2 - vorhin2 >= intervall2)
          {
            tik = true;
            tak = false;
            lcd.setCursor(0, 1);
            lcd.print("  Mute deaktiviert  ");
            lcd.setCursor(0, 0);
            lcd.print("  Mute deaktiv Test ");
            Serial.write(code[encoderPos], 8);
            releaseKey();
            mutePos = false;
          }
      }
         else
          {
            tik = false;
          }
  }
}
void releaseKey() {
  uint8_t keyNone[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
  Serial.write(keyNone, 8);                  // Send Release key
}

                                             
void doEncoderA()                            // Interrupt on A changing state
{
  if ( rotating ) delay (1);                 // wait a little until the bouncing is done
  if ( digitalRead(encoderPinA) != A_set ) 
  { // debounce once more
    A_set = !A_set;                                      
    if ( A_set && !B_set )                   // adjust counter + if A leads B
      encoderPos += 1;
    rotating = false;                        // no more debouncing until loop() hits again
  }
}

                                             
void doEncoderB()                            // Interrupt on B changing state, same as A above
{                         
  if ( rotating ) delay (1);
  if ( digitalRead(encoderPinB) != B_set ) 
  {
    B_set = !B_set;                                   
    if ( B_set && !A_set )                   //  adjust counter - 1 if B leads A
      encoderPos -= 1;
    rotating = false;
  }
}