Aktualisierung OLED durch Drehgeber

Hallo,

das sind ja satte 330ms, ja das ist zu viel. Ich habe mit meinem Handdrehencoder schon leichte Aussetzer wenn ich ihn nur aller 2ms statt 1ms Abfrage und ihn dabei sehr sehr schnell drehe. Okay - extremer Extremfall.

Ja, da kann man schon mal hinter die Kulissen schauen ob da in der Lib etwas bremst und ob das wirklich so sein muss.
Was ist das für ein OLED Display überhaupt?

Ansonsten könnte ich mir sowas als Grundgerüst durchaus vorstellen. Wobei man wie schon erwähnt immer gleiche Dinge rausnehmen sollte. Das weißt du ja schon. :wink:

void update_Display (const unsigned int interval, const int entry)                        
{
  static unsigned long last_ms = 0;  
  unsigned long ms = millis();
  
  if (ms - last_ms >= interval) {
    last_ms = ms;
    renderDisplay(entry);
  }
}


void renderDisplay(const int currentEntry)
{ 
  static int old_Entry = 888;

  if (currentEntry == old_Entry) return;

  old_Entry = currentEntry;
  
  display.setTextSize(1);
  
  switch (currentEntry)
  {
    case 0: display.setTextColor(BLACK, WHITE);
            display.setCursor(5,0);
            display.print("Entry 1");
            break;
    case 1: display.setTextColor(BLACK, WHITE);
            display.setCursor(5,15);
            display.print("Entry 2");
            break;
    case 2: display.setTextColor(BLACK, WHITE);
            display.setCursor(5,30);
            display.print("Entry 3");
            break;
    case 3: display.setTextColor(BLACK, WHITE);
            display.setCursor(5,45);
            display.print("Entry 4");
            break;
    default: break;        
  }
  display.display();

}

Dann musst du dich nur um den Aufruf kümmern, der Wert wird durchgereicht.

update_Display (500, menuEntry);    // 500ms generelles Aufrufintervall und der Wert

Innerhalb der render Funktion wird nur abgearbeitet mit neuen Wert. Sodass durchaus auch einmal alles "quasi übersprungen" wird.