我有一个 arduino uno R3 和旋转编码器的解决方案,每次顺时针旋转编码器时都会计数,逆时针旋转时会减少。这个问题的所有其他解决方案都非常复杂且不令人满意,所以我自己解决了。下面你可以看到代码清单,你应该可以复制并粘贴到一个新的草图文件中并上传没有任何问题。谢谢,卡梅伦腰带
问问题
1611 次
1 回答
0
//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 后,打开串行监视器并转动旋转编码器。
于 2014-08-09T17:59:52.720 回答