Pages: 1 [2]   Go Down
Author Topic: Drehimpulsgeber überempfindlich [endlich gelöst]  (Read 3008 times)
0 Members and 1 Guest are viewing this topic.
Switzerland
Offline Offline
Faraday Member
**
Karma: 112
Posts: 5298
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nach dem Datenblatt darf ein Statuswechsel erst gezählt werden, wenn seit dem letzten mehr als 2ms vergangen sind. Der Encoder eignet sich somit nur für relativ langsame Drehbewegungen (< 1200 U/min), für eine Bedienung per Hand aber mehr als ausreichend.

Du solltest jetzt einfach im Code diesen Faktor noch einbauen, z.B.:

Code:
int val;
 int encoder0PinA = 4;
 int encoder0PinB = 5;
 int encoder0Pos = 0;
 int encoder0PinALast = LOW;
 uint32_t encoder0PinALastChange = 0;
 int n = LOW;

 void setup() {
   pinMode (encoder0PinA,INPUT);
   pinMode (encoder0PinB,INPUT);
   Serial.begin (57600);
 }

 void loop() {
   n = digitalRead(encoder0PinA);
   if ((encoder0PinALast == LOW) && (n == HIGH) && (millis() - encoder0PinALastChange > 2)) {
     if (digitalRead(encoder0PinB) == LOW) {
       encoder0Pos--;
     } else {
       encoder0Pos++;
     }
     Serial.print (encoder0Pos);
     Serial.print ("/");
     encoder0PinALastChange = millis();
   }
   encoder0PinALast = n;
 }
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pylon du bist mein Held!! Der Impulsgeber zählt jetzt brav hoch und runter. Ich hätte meinen Code übrigens ganz ähnlich aufgebaut.  Aber ob es
schlussendlich funktioniert hätte ist eine andere Sache. Daher ein riesen Danke von mir.

@ ernie-berni: Danke, dass du dich mit meinem Problem befasst hast, ich hatte nur den Vorschlag von Pylon als erstes gesehen und da er auf
Anhieb funktioniert, werde ich bei diesem bleiben.
Logged

Pages: 1 [2]   Go Up
Jump to: