Rotary encorders till B737 panel

freddehboy:
Mina encorders har 24 steg där jag vill att det steget som jag nu har inställt på ska visas på serial monitor t.ex. 12 om jag har vridit fram till den medsols och -12 om jag vridit till den motsols. Går det att få till?

En encoder håller inte ordning på något speciellt steg utan genererar pulser när den vrids åt ena eller andra hållet. Den går att vrida hur många varv som helst utan att gå tillbaka till ursprungsläget.
Du kommer garanterat att missa någon puls ibland och vid andra tillfällen kommer du att få studsar som genererar dubbla pulser trots att du bara vridit den ett steg.
Självklart kommer du att kunna stega ett värde från -12 till 12 i takt med att du rattar på decodern men du kommer inte att kunna ha någon indikator på ratten som pekar på fasta värden, till sånt behöver du andra reglage.
Det låter ändå på din beskrivning som att en encoder kommer att göra jobbet.

1.)
Kort och gott, är dessa rader för att man ska ha något att utgå från, för att kortet ska veta vad som händer om man inte vrider på Encordern och hur lägena för encordern är före och efter de olika pos?

Ja, dessa finns för att det ska finnas någon historik att jämföra med för att avgöra åt vilket håll encodern vridits.

2.)
Dessa förstår jag till 40%!

Det har med att encordern vill vet när jag vrider och dess läge den hamnade på, sedan ska det fungera åt båda håll!

Hur var frågan?

Jag hade använt en annan typ av kod än den du hittat. Encoders styrs lämpligast med interrupt.
Förenklad teori som du förstår om du läst hur en rotary enkoder fungerar:

Man kopplar den ena pulspinnen på encodern till en interruptpinne på Arduino.
Den andra pulspinnen kopplar man till en annan pinne på Arduino. Behöver inte vara en interruptpinne.

Man sätter upp ett interrupt som ska triggas varje gång interruptpinnen förändras (går från låg till hög eller från hög till låg signal). Signalen på interruptpinnen kommer ju att förändras varje gång du vrider ett steg oavsett riktning.

När interruptet triggats jämför man signalen på interruptpinnen med signalen på den andra pinnen.
Om de är lika har du vridit åt ena hållet, räkna upp eller ner
Om de är olika har du vridit åt andra hållet, räkna åt andra hållet

Exempel:

const int cwPin = 2;
const int ccwPin = 3;

void setup() {
  Serial.begin(9600);
  
  pinMode(cwPin, INPUT);  
  pinMode(ccwPin, INPUT);
  digitalWrite(cwPin, HIGH);
  digitalWrite(ccwPin, HIGH);
  
  attachInterrupt(0, cw, CHANGE);
}


void loop() {
}


void cw(){
  int cwLevel = digitalRead(cwPin);
  int ccwLevel = digitalRead(ccwPin);
  if (cwLevel != ccwLevel){
      Serial.println("clockwise");
      Serial.println("");
  }
  else{
      Serial.println("counterclockwise");
      Serial.println("");
  }
}

i exemplet har jag kopplat ena pinnen till pinne D2 på Arduino som är pinnen för Interrupt 0. Vill du använda ett annat interrupt än 0 får du kolla vilken pinne som går dit.
Istället för att köra Serial.println("counterclockwise") så kan du ju stega en variabel ett steg uppåt eller nedåt och sen printa innehållet i variabeln till Serial.
Som du ser har jag ingen kod i loop() i exemplet så du kan använda all CPU-tid till annat än att polla läget på decodern. T.ex. till att uppdatera dina displayer och att läsa av läget på alla dina vippbrytare.