Arduino uno和旋转编码器

时间:2014-08-09 17:59:36

标签: arduino-uno

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

1 个答案:

答案 0 :(得分: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从该引脚到Vdd的上拉电阻(10k应该足够),编码器的另一个引脚接地。将编码器的中间引脚连接到一侧,三个引脚接地。 一旦上传到arduino,打开串口监视器并转动旋转编码器。