INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Winkelencoder
13.10.2014, 17:41
Beitrag #1
Winkelencoder
Hallo zusammen,
verzweifle grad am oben genannten Bauteil dem Winkelencoder, habe das Bauteil soweit "richtig" angeschlossen (die Auswertung der Drehung funktioniert) nur wenn es um die Funktion des Buttons geht entsteht folgendes Problem :
Fasse ich den Encoder an zeigt er mir bereits an das der Knopf gedrückt und wieder losgelassen wurde.

Benutzt habe ich folgenden Code aus dem Netz, wobei nur die Pinbelegung geändert wurde.

Code:
int dpInEncoderA=4;
int dpInEncoderB=3;
int dpInEncoderPress=2;
static void _ResetPins()
{
// Rotary encoder input lines
// Configure as input, turn on pullup resistors
pinMode(dpInEncoderA, INPUT);
digitalWrite(dpInEncoderA, HIGH);
pinMode(dpInEncoderB, INPUT);
digitalWrite(dpInEncoderB, HIGH);
pinMode(dpInEncoderPress, INPUT);
digitalWrite(dpInEncoderPress, HIGH);
}
void _lowlevel_ReadEncoder(int &rotate, int& press)
{
rotate = (digitalRead(dpInEncoderB) * 2) + digitalRead(dpInEncoderA);
press = digitalRead(dpInEncoderPress);
}
void ReadEncoder()
{
int Position, Press;
int isForward = 0;

_ResetPins();
Serial.println("Reading the encoder... press a key to abort.");
_lowlevel_ReadEncoder(Position, Press);
while (!Serial.available())
{
int Position2, Press2;
do
{
_lowlevel_ReadEncoder(Position2, Press2);
} while ((Position2 == Position) && (Press2 == Press));
if (Position2 != Position)
{
// "Forward" is shown by the position going from (0 to 1) or (1 to 3)
// or (3 to 2) or (2 to 0). Anything else indicates that the user is
// turning the device the other way. Remember: this is Gray code, not
// binary.
int isFwd = ((Position == 0) && (Position2 == 1)) ||
((Position == 1) && (Position2 == 3)) ||
((Position == 3) && (Position2 == 2)) ||
((Position == 2) && (Position2 == 0));
Serial.print(isFwd ? "FWD " : "BWD ");
}
if (Press2 != Press)
{
Serial.println(Press ? "Press " : "Release ");
}
Position = Position2;
Press = Press2;
}
}
void setup()
{
// configure the pinsFile: Unsaved Document 1 Page 2 of 2
_ResetPins();
// init serial communication
Serial.begin(115200);
Serial.println("Ready to begin")
;
}
void loop() {
ReadEncoder(); }


Vielen Dank schon mal im Vorraus
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.10.2014, 18:09
Beitrag #2
RE: Winkelencoder
Versuch mal:
pinMode(dpInEncoderA, INPUT_PULLUP);
pinMode(dpInEncoderB, INPUT_PULLUP);

im void.setup

VG
Nimes
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.10.2014, 19:31
Beitrag #3
RE: Winkelencoder
das macht keinen Unterschied.

pinMode(dpInEncoderA, INPUT_PULLUP);

macht genau dasselbe wie

pinMode(dpInEncoderA, INPUT);
digitalWrite(dpInEncoderA, HIGH);


es sind nur beide Schritte in 1 zusammengefasst.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.10.2014, 00:23
Beitrag #4
RE: Winkelencoder
Vielen Dank für die schnellen antworten nach ewigem hin & her funktioniert nun und ich habe eigentlich nix gross verändert (vielleicht war ich auch nur falsch geladen ^^).

MfG Sven
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste