0

我有一个 arduino uno R3 和旋转编码器的解决方案,每次顺时针旋转编码器时都会计数,逆时针旋转时会减少。这个问题的所有其他解决方案都非常复杂且不令人满意,所以我自己解决了。下面你可以看到代码清单,你应该可以复制并粘贴到一个新的草图文件中并上传没有任何问题。谢谢,卡梅伦腰带

4

1 回答 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 回答