我有一个arduino uno R3和旋转编码器的解决方案,每次你顺时针旋转编码器和逆时针旋转时减量。这个问题的所有其他解决方案都很复杂,令人不满意,所以我自己解决了它。下面您可以看到代码清单,您应该能够将其复制并粘贴到新的草图文件中并上传,而不会出现任何问题。谢谢,卡梅伦带
//rotary encoder
int pin1 = 2;//a
int pin2 = 3;//b
int reset = 11;
int previousA;
int previousB;
int counter = 20;
void setup()
{
Serial.begin(9600);
pinMode(pin1,INPUT);
pinMode(pin2,INPUT);
pinMode(reset,INPUT);
digitalWrite(pin1,HIGH);
digitalWrite(pin2,HIGH);
attachInterrupt(0,encoderRead,CHANGE);
attachInterrupt(1,encoderRead,CHANGE);
}
void loop()
{
if(digitalRead(reset) == LOW)
counter = 20;
}
void encoderRead()
{
int a = digitalRead(pin1);
int b = digitalRead(pin2);
//Serial.print(digitalRead(pin1));
//Serial.print(digitalRead(pin2));
//Serial.println();
if(previousA == HIGH && previousB == HIGH)
{
if(a == LOW && b == HIGH)
{
counter += 1;
Serial.println(counter);
}
else if(a == HIGH && b == LOW)
{
counter -= 1;
Serial.println(counter);
}
}
previousA = digitalRead(pin1);
previousB = digitalRead(pin2);
}
将旋转编码器外部引脚(当看带有三个引脚的一侧时)连接到arduino上的输入2和3,如果您在编码器上有一个按钮,则将开关的一个引脚连接到arduino上的引脚11,带上拉电阻(10k应该足够)从该引脚连接到Vdd和编码器开关的另一个引脚接地。将一侧编码器的中间引脚用三脚连接到地。一旦上传到arduino打开串行监视器和旋转编码器。