Magnetic Encoder auslesen

Hallo alle zusammen. Ich habe hier ein Problem. Ich habe einen DC Motor wo hinten dran ein Magnetic Encoder drauf ist. Jetzt hatte ich versucht ihn mit dem Code auszulesen. Der Motor hat 6 Adern, wovon eine gelb (1) ist und der rest ist weiss. Die gelbe und die daneben (2) ist plus und minus vom motor. Denke also das die andren 4 adern vom Encoder sind.

/*
Pay attention to the interrupt pin,please check which microcontroller you use.
http://arduino.cc/en/Reference/AttachInterrupt
*/
  
//The sample code for driving one way motor encoder
const byte encoder0pinA = 2;//A pin -> the interrupt pin 2
const byte encoder0pinB = 4;//B pin -> the digital pin 4
byte encoder0PinALast;
int duration;//the number of the pulses
boolean Direction;//the rotation direction 
   
   
void setup()
{  
  Serial.begin(57600);//Initialize the serial port
  EncoderInit();//Initialize the module
}
   
void loop()
{
  Serial.print("Pulse:");
  Serial.println(duration);
  duration = 0;
  delay(100);
}
   
void EncoderInit()
{
  Direction = true;//default -> Forward  
  pinMode(encoder0pinB,INPUT);  
  attachInterrupt(0, wheelSpeed, CHANGE);//int.0 
}
   
void wheelSpeed()
{
  int Lstate = digitalRead(encoder0pinA);
  if((encoder0PinALast == LOW) && Lstate==HIGH)
  {
    int val = digitalRead(encoder0pinB);
    if(val == LOW && Direction)
    {
      Direction = false; //Reverse
    }
    else if(val == HIGH && !Direction)
    {
      Direction = true;  //Forward
    }
  }
  encoder0PinALast = Lstate;
   
  if(!Direction)  duration++;
  else  duration--;
}

Da wird mir aber immernur 0 angezeigt. Kann ich den dafür eigentlich verwenden? Braucht ihr bilder von dem Encoder?

beste grüße Matze

Der Typ des Encoders wäre nett.

Der Code wird generell falsch sein, aber Interrupts sind für so was gar nicht nicht gut. Das kann man locker mit Pollen machen.

Am besten geht es über einen Timer-Interrupt. Dieser Code ist für den Fall dass das ein ganz normaler Drehencoder ist mit zwei phasenverschobenen Signalen: http://www.meinduino.de/arduino-grundlagen/2014/09/20/drehencoder1.html http://www.meinduino.de/arduino-grundlagen/2014/09/21/drehencoder2.html

Teil 1 beschreibt die Theorie und hat einen einfachen Code wo in loop() abgefragt wird. In Teil 2 ist dann der bessere Code.

http://www.mikrocontroller.net/articles/Drehgeber

Hat sich bei mir gut bewährt. Muss aber an den Arduino Aufbau angepasst werden

Der Encoder hat wahrscheinlich eine Spannungsversorgung und 2 Ausgänge.

grüße Uwe

Hallo, danke erstmal für die Antworten.
Genau Uwe, 2 der 6 sind die Spannungsversorgung für den Encoder und die letzten beiden sind die 2 Ausgänge.
Wie der encoder heißt, weiß ich nicht.
Ist von einem Philips FC9910 Saugroboter der Antrieb.

1+2 sind die Spannung für den Motor.
3+4 ist so wie ich das sagen würde, die Spannung für den Encoder.
5+6 sollten demnach die Ausgänge vom Encoder sein.

Ungefähr so sieht er aus

Ungefähr so sieht er aus

Was heißt das? So oder nicht so? DIe Platine hat eine Elektrolytkondensator vorgesehen. Darum ist die Polarität der Versorgungsspannung leicht zu erkennen.

Sorry, genauso sieht er aus.