Arduino uno和旋转编码器



我有一个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打开串行监视器和旋转编码器。

最新更新