Go Down

Topic: Fragen zu Encoder (Read 516 times) previous topic - next topic

Karlsa

Hallo zusammen,

ich habe in meinem Projekt einen Encoder mit dem ich z.B in einem Menü scrollen kann (Anzeige an einem Display). Das mit dem Encoder auswerten klappt eigentlich wunderbar, aber das Problem ist, wenn ich schnell am Encoder drehe stimmt die Reihenfolge der Anzeige nicht mehr.

Gebe ich einen Wert am Monitor aus geht das auch wunderbar. Kann schnell drehen und der Wert ändert sich immer richtig.

Wie kann man dieses Problem lösen?

sth77


Wie kann man dieses Problem lösen?

Softwareseitig. Vermutlich... ;)

Ohne Blick auf den Code, ggf. ein Schaltplan dazu, lässt sich auf deine Frage keine konkrete Antwort finden.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Karlsa

Das ist mein Code zum Auswerten des Encoders:
Code: [Select]
  if (digitalRead(A)==HIGH && digitalRead(B)==LOW && speicherA==0 && speicherB==0)
  {
    auswahl++;
    auswahl = auswahl % 4;
    speicherA=1;
    speicherB=0;
  }
  else if (digitalRead(A)==HIGH && digitalRead(B)==HIGH && speicherA==1 && speicherB==0)
  {
    auswahl++;
    auswahl = auswahl % 4;
    speicherA=1;
    speicherB=1;
  }
  else if (digitalRead(A)==LOW && digitalRead(B)==HIGH && speicherA==1 && speicherB==1 )
  {
    auswahl++;
    auswahl = auswahl % 4;
    speicherA=0;
    speicherB=1;
  }
  else if (digitalRead(A)==LOW && digitalRead(B)==LOW && speicherA==0 && speicherB==1 )
  {
    auswahl++;
    auswahl = auswahl % 4;
    speicherA=0;
    speicherB=0;
  }
 
else if (digitalRead(A)==LOW && digitalRead(B)==HIGH && speicherA==0 && speicherB==0)
  {
    auswahl--;
    auswahl = auswahl % 4;
    speicherA=0;
    speicherB=1;
  }
  else if (digitalRead(A)==HIGH && digitalRead(B)==HIGH && speicherA==0 && speicherB==1)
  {
    auswahl--;
    auswahl = auswahl % 4;
    speicherA=1;
    speicherB=1;
  }
  else if (digitalRead(A)==HIGH && digitalRead(B)==LOW && speicherA==1 && speicherB==1)
  {
    auswahl--;
    auswahl = auswahl % 4;
    speicherA=1;
    speicherB=0;
  }
  else if (digitalRead(A)==LOW && digitalRead(B)==LOW && speicherA==1 && speicherB==0)
  {
    auswahl--;
    auswahl = auswahl % 4;
    speicherA=0;
    speicherB=0;
  }


Und bei einer Änderung von "auswahl" soll das auf dem Display passieren:
Code: [Select]
  if (auswahl == 0)
  {
    Ausgabe(0x01, 0x02, "->");
    AusgabeLoeschen(0x01, 0x0B, "->");
    AusgabeLoeschen(0x10, 0x0B, "->");
  }
  else if (auswahl == 1)
  {
    Ausgabe(0x01, 0x0B, "->");
    AusgabeLoeschen(0x01, 0x02, "->");
    AusgabeLoeschen(0x07, 0x0B, "->");
  }
  else if (auswahl == 2)
  {
    Ausgabe(0x07, 0x0B, "->");
    AusgabeLoeschen(0x01, 0x0B, "->");
    AusgabeLoeschen(0x10, 0x0B, "->");
  }
  else if (auswahl == 3)
  {
    Ausgabe(0x10, 0x0B, "->");
    AusgabeLoeschen(0x07, 0x0B, "->");
    AusgabeLoeschen(0x01, 0x02, "->");
  }

Karlsa

Und das machen die Funktionen "Ausgabe" und "AusgabeLoeschen":
Code: [Select]
void Ausgabe(int y, int x, char* text)
{
  Serial1.write(0x73);
  Serial1.write(y);
  Serial1.write(x);
  Serial1.write(0x03);
  Serial1.write(zero);
  Serial1.write(zero);
  Serial1.write(text);
  Serial1.write(zero);
  delay(50);
}
 
void AusgabeLoeschen(int y, int x, char* zeichen)
{
  Serial1.write(0x73);
  Serial1.write(y);
  Serial1.write(x);
  Serial1.write(0x03);
  Serial1.write(0xFF);
  Serial1.write(0xFF);
  Serial1.write(zeichen);
  Serial1.write(zero);
  delay(50);
}

Go Up