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("");
}