Pages: [1]   Go Down
Author Topic: Fragen zu Encoder  (Read 457 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Germany
Offline Offline
Edison Member
*
Karma: 47
Posts: 2317
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie kann man dieses Problem lösen?
Softwareseitig. Vermutlich... smiley-wink

Ohne Blick auf den Code, ggf. ein Schaltplan dazu, lässt sich auf deine Frage keine konkrete Antwort finden.
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das ist mein Code zum Auswerten des Encoders:
Code:
  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:
  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, "->");
  }
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Und das machen die Funktionen "Ausgabe" und "AusgabeLoeschen":
Code:
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);
}
Logged

Pages: [1]   Go Up
Jump to: