KY-040 Rotary Encoder
|
06.01.2021, 17:12
Beitrag #1
|
|||
|
|||
KY-040 Rotary Encoder
Könnt ihr bitte mal meinen code anschauen.
Ich benutze IDE 1.8.13 Encoder.h aus der IDE von Paul Stoffregen ver. 1.4.1 1. Drehe ich am KY-040, so zählt er bei jedem Raster 2 Impules 2. Ist das auswerten und entprellen des Tasters am KY-040 so sinnvoll gelöst oder gibt es eine bessere Lösung? Code: #include <Encoder.h> Vielen Dank für eure Hilfe Harry Wenn etwas nicht funktioniert -> Kondensator hinzufügen ![]() |
|||
06.01.2021, 17:21
Beitrag #2
|
|||
|
|||
RE: KY-040 Rotary Encoder
Ich habe mit der Lib noch nicht gearbeitet. Es gibt aber durchaus die Möglichkeit mehrerer Impulse zwischen 2 Rastungen.
Literatur: hier und hier. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
07.01.2021, 09:00
Beitrag #3
|
|||
|
|||
RE: KY-040 Rotary Encoder
Soweit ich das erinnere, kann man das Verhalten in der Library einstellen.
Gruß Dieter I2C = weniger ist mehr: weniger Kabel, mehr Probleme. ![]() |
|||
07.01.2021, 11:28
Beitrag #4
|
|||
|
|||
RE: KY-040 Rotary Encoder
Servus!
Hab mir aus meinen Test rausgesucht, hab ich damals auf ESP-32 am laufen gehabt - hier nur der Rotary Teil Code: #define CLK 39 Gruß aus Wiener Neustadt Toni ================================================================= Seit die Mathematiker über die Relativitätstheorie hergefallen sind, verstehe ich sie selbst nicht mehr. Wer Rechtschreibfehler findet darf sie behalten ![]() |
|||
07.01.2021, 12:01
(Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2021 12:04 von Harry.)
Beitrag #5
|
|||
|
|||
RE: KY-040 Rotary Encoder
@Dieter
Wo muss ich da nachschauen und die Änderung vornehmen? In der Encoder.h im Libary Verzeichnis? @Toni So etwas ähnliches hatte ich auch gefunden, die Erkennung der Drehrichtung war aber nicht immer richtig. Jetzt hatte ich 2 Optionen. Die mit Lib, welche immer 2 zählt, oder ohne und Erkennungsfehler. Ich benutze jetzt die ohne, da diese inzwischen funktioniert. Der Fehler lag nicht am code sondern am Serial.print. Mein Beispiel, welches ich im Internet gefunden hatte, hatte zu viele Serial.print und daduch ist beim drehen das Timing durcheinander gekommen. Mal sehen ob der code noch funktioniert wenn ich ihn in mein Programm einbaue oder ob es wieder Timingfehler gibt. In diesem Fall werde ich mir nach dem Tip von Dieter noch einmal die Encoder.h anschauen. Wäre es einen Alternative clk und dt auf Interrupts zu legen falls es bei der Erkennung der Drehrichtung zu Probleme kommt oder ändert dies nichts? Wie entprellt ihr eure Taster? Ist das so ok oder gibt es elegantere Lösungen? Vielen Dank für eure Anregungen, hier mein momentan funktionierender code: Code: int Counter = 0; Wenn etwas nicht funktioniert -> Kondensator hinzufügen ![]() |
|||
07.01.2021, 12:28
(Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2021 12:31 von Tommy56.)
Beitrag #6
|
|||
|
|||
RE: KY-040 Rotary Encoder
Hast Du Dir mal die beiden von mir verlinkten Abhandlungen zu Encodern angeschaut? Damit habe ich bisher ohne Lib alle zum Laufen bekommen.
Gruß Tommy Edit: Beispiel Code: // Rotary encoder example. "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
07.01.2021, 15:43
Beitrag #7
|
|||
|
|||
RE: KY-040 Rotary Encoder
(07.01.2021 12:28)Tommy56 schrieb: Hast Du Dir mal die beiden von mir verlinkten Abhandlungen zu Encodern angeschaut? Hatte ich mir angeschaut, aber einiges davon noch nicht verstanden. Aus diesem Grund habe ich erst einmal andere Lösungsansätze versucht. Mir ist es wichtig, dass ich die Beispiele die ich übernehme auch verstehe. Werde mich zu späterer Zeit aber noch einmal damit auseinander setzen. Was bedeuted dies? // hat schon 10K nach VCC auf der Platine // je 1 100 nF von CLK und DT nach GND Wo die 2 x 100nF hinkommen habe ich verstanden und diese sind vermutlich zum entprellen. Das mit den 10K verstehe ich aber nicht. Harry Wenn etwas nicht funktioniert -> Kondensator hinzufügen ![]() |
|||
07.01.2021, 15:48
Beitrag #8
|
|||
|
|||
RE: KY-040 Rotary Encoder
Mein Encoder hat jeweils von A,B, SW einen 10 kOhm Widerstand gegen + (5V) schon auf der Platine drauf. Wenn Deiner das nicht hat, kannst Du ja welche ran löten.
Die bilden jeweils mit den 100nF ein RC-Glied zum Entprellen. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste