Rotary encorders till B737 panel

freddehboy:
Det är kopplat rätt men den stannar, slutar läsa av efter ca halva varvet. Misstänker klapp i min koppling :frowning:
Databladet: Error

Det verkar vara ganska typisk benkonfiguration på din encoder. Koppla A till D2, B till annan pinne (behöver inte vara interrupt på den), C i mitten ska till GND.

Jag tror problemet du ser när den hänger sig beror på att du kör serial print inifrån interruptrutinen. Man ska egentligen inte göra så som jag gör i exemplet.
Det fungerar nog bara om Serial.print är klar när nästa interrupt inträffar. Dvs om man vrider sakta på encodern. Har du studsar från encodern kommer den garanterat inte vara klar när studsen kommer och då blir det nog problem.
Ett bättre sätt att göra det är att bara öka eller minska en variabel från LALT() och sedan utvärdera variabeln i lugn och ro från loop()

Exempel (ej testat):

const int MALW51A = 2; // Ext. Interrupts (int.0)
const int MALW51B = 3;
int myInterrupts = 0;

void setup() {
  Serial.begin(9600);

pinMode(MALW51A, INPUT_PULLUP);  // Ext. Interrupts (int.0)
attachInterrupt(0, LALT, CHANGE);
pinMode(MALW51B, INPUT_PULLUP);
}


void loop() {
  Serial.println(myInterrupts);
  delay(200);
}

void LALT()
{
  int MALW51Ap = digitalRead(MALW51A);
  int MALW51Bm = digitalRead(MALW51B);
    if (MALW51Ap != MALW51Bm)
    {
      myInterrupts++;
    }
    else
    {
      myInterrupts--;
    }
}

Har du lött din?

Ja och nej, jag har en encoder som jag använder till protoyper på breadboard.
Där har jag lött på anslutningstrådar på benen men i andra änden är de ju bara nedstoppade i en breadboard eller i kontakterna på en Arduino.