Stepan Lapshinov

Переключиться на Русский (ru)

Work with incremental encoders.

  • Code for Arduino with two connected encoders (only use channels A and B)

#define encoder1PinA 2                  // А  pin 2 interrupt
#define encoder1PinB 4                  // B  pin 4
#define encoder2PinA 3                  // А  pin 3 interrupt
#define encoder2PinB 5                  // B  pin 5

volatile long encoder1Pos = 0;        
volatile long encoder2Pos = 0;        

void setup() {
pinMode(encoder1PinA, INPUT);
pinMode(encoder1PinB, INPUT);
pinMode(encoder2PinA, INPUT);
pinMode(encoder2PinB, INPUT);
attachInterrupt(0, Encoder1, RISING); 
attachInterrupt(1, Encoder2, RISING); 

Serial.begin (9600);

}

void Encoder1()
{
  if (digitalRead(encoder1PinA) == HIGH)
{
  if (digitalRead(encoder1PinB) == LOW)
  {
    encoder1Pos = encoder1Pos + 1;         // clockwise
  }
  else
  {
    encoder1Pos = encoder1Pos - 1;         // counterclockwise
  }
}

}

void Encoder2()
{
if (digitalRead(encoder2PinA) == HIGH)
{
  if (digitalRead(encoder2PinB) == LOW)
  {
    encoder2Pos = encoder2Pos + 1;         // clockwise
  }
  else
  {
    encoder2Pos = encoder2Pos - 1;         // counterclockwise
  }
}

}





void loop ()
{
Serial.print(encoder1Pos);
Serial.print("        ");
Serial.print(encoder2Pos);
Serial.println("");


}