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

Das ist schon sehr nah dran, aber ich glaube jetzt prellt der Taster, ab und an kommt es dennoch mal dazu, dass 2x das Mute bei einem Druck gewechselt wird.

Ich hab jetzt noch ein Monoflop eingebaut:

{
  const char * text[5] = {"Filter 1", "Filter 2", "Filter 3", "Filter 4", "  Mute  "};
  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 = 50;  // Abschaltzeit nach Inaktivität in ms
  if (lastReportedPos != encoderPos)
  {
    lastReportedPos = encoderPos;
    vorhin = jetzt; // Monoflop retriggern
    lcd.setCursor(0, 0);
    lcd.print("12345678901234567890");
    //    lcd.setCursor(6, 1);
    //    lcd.print("                    ");
    lcd.setCursor(6, 1);
    if (encoderPos < 0) encoderPos = 0;
    if (encoderPos > 4) encoderPos = 4;
    lcd.print(text[encoderPos]);
    neuePosition = true;
  }
  if ( 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("                    ");
  }
  if (encoderPos == 4)
  {
    static bool tik = false;
    static bool tak = false;
    if (!digitalRead(encoderPinSW))
      {
        if (!tik && !tak)
          {
            vorhin2 = jetzt2; // Monoflop retriggern
            tik = true;
            tak = true;
            lcd.setCursor(6, 1);
            lcd.print("  Mute*  ");
          }
            else if (!tik && tak && jetzt2 - vorhin2 >= intervall2)
          {
            tik = true;
            tak = false;
            lcd.setCursor(6, 1);
            lcd.print("--Mute-- ");
          }
      }
         else
          {
            tik = false;
          }
  }
}

Jetzt tut es wie es soll :+1: :+1:

Nun muss ich es nur noch schaffen, dass Zeichen auch beim 2ten mal Mute Drücken versendet werden.
Das gibt wieder was :upside_down_face: