Go Down

Topic: Encoder-Funktion erweitern um +100 / -100 (Read 576 times) previous topic - next topic

derHerrKohler

Hallo und guten Morgen zusammen,
ich habe ein Problem mit einem Encoder und wäre über einen Ansatz dankbar.
Hier erstmal der vorhandene Code:
Code: [Select]

void encoderReadShots(){
  // ENCODER
  state = (digitalRead(PIN_HIGHBIT) << 1) | digitalRead(PIN_LOWBIT);
  count += encoderStates[prevState][state];
  if (state != prevState) {
    encoder = count/2;
  }
  prevState = state;
}

Das funktioniert auch schon sehr gut, drehe ich an meinem Encoder, wird der Wert 'encoder' verändert.
Nun habe ich aber einen Wunsch. Ich möchte eine Funktion haben, die den Wert encoder um sagen wir mal 100 erhöht. Wenn ich es einfach dazu zähle, wird beim nächsten Encoder drehen wieder da weiter gemacht wo ich war und das will ich nicht.

Hat hier jemand einen Tip?

Viele Grüße,
Stefan

Joghurt

Das hab ich jetzt nicht ganz verstanden, was genau hast Du vor?

Hast Du uns mal Deinen kompletten Code?

derHerrKohler

Das ist schon der komplette relevante code.

Ich habe einen encoder mit 2 Ausgängen. Mit dem Code lese ich den Wert aus. wenn ich dran drehe, wird der Wert "encoder" um eins erhöht oder verniedrigt (das ist nicht das richtige Wort, aber ihr wisst was ich meine)

Nun habe ich einen Taster und der soll mit den Wert um 100 erhöhen. Das ist auch kein Problem (encoder += 100), aber wenn ich dann wieder am Encoder drehe, funktioniert das natürlich nicht mehr.


maverick1509

So ganz klar ist es mir nicht.
Aber ich denke eine zusätzliche Variable einfügen.
In der kann man dann beide Werte addieren?


MueThoS

Ich glaube ich weiss was er meint.
Er möchte halt nicht ne stunde drehen um den Wert um 100 zu erhöhen.
Also will er einen Taster haben der direkt um 100 nach oben springt.
Und für die Feineinstellung will er wieder drehen.

Ich verstehe leider nicht was genau sein Code macht.
Aber das kann so wohl nicht gehen.
Weil er macht ja beim Taster:
encode +100
nur wenn er dann wieder dreht passiert ja folgendes:
encoder = count/2;
Und da count ja nicht mit geändert wurde wird encoder wieder auf count/2 gesetzt.
Oder sehe ich das falsch.

derHerrKohler

Vielen Dank für den Tip mit der zusätzlichen Variablen. Das ist spitze, genau das habe ich gebraucht. Läuft :-)

Manchmal sind es die einfachen Sachen, die einem einfach nicht in den Sinn kommen...

sth77

Brauchst du die 100 Schritte nur in eine Richtung oder in beide, demnach +/-100? In dem Fall könntest du dir überlegen, diese Taste als eine Art Shift-Taste zu nutzen, d.h. wenn sie gedrückt ist und nach rechts gedreht wird +100, wenn sie gedrückt wird und der encoder nach links gedreht wird somit -100.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

derHerrKohler

Das ist eine schöne Idee, aber ich habe hier noch ein Display mit 'related buttons' drunter, demnach ist ein +100 und ein -100 - Button vorhanden

Go Up