带LCD的Arduino UNO,来自旋转编码器的奇怪读数

时间:2017-09-02 09:57:16

标签: arduino interrupt

我有一个I2C 16x2 LCD显示器连接到Arduino Uno的A4 (SDA)A5 (SCL)引脚。显示没问题,它可以正常工作。

然后我将旋转编码器连接到引脚D3 (INT1)D4INT1引脚用作读取编码器的中断,读数通过Serial.print()发送到串行监视器。有一个debounce CAP连接到旋转编码器。编码器引脚使用Arduino的内部上拉。

encoderPinAencoderPinB下降到HIGH时,中断附加到读取LOW。顺时针旋转旋转时,encoderPinALOW,逆时针旋转时,encoderPinAHIGH

现在,当主loop中没有任何内容时,顺时针旋转旋转时,串行监视器上会显示++++++++++个符号,逆时针旋转时会显示----------个符号,我应该这样做。

但如果我取消注释那些打印到LCD的那两行,我开始从旋转编码器获得不稳定的读数,如:-++-++-++-+++-++-+++-++--+

发生了什么事? LCD是否会干扰中断引脚?

#define encoderPinA 4
#define encoderPinB 3

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(encoderPinA, INPUT_PULLUP);
  pinMode(encoderPinB, INPUT_PULLUP);
  attachInterrupt (digitalPinToInterrupt(encoderPinB), readEncoder, FALLING);
}

void loop() {
  //lcd.setCursor(0, 0);
  //lcd.print("test");
}

void readEncoder() {
  if (digitalRead(encoderPinA) == LOW) Serial.print("+");
  else Serial.print("-");
}

1 个答案:

答案 0 :(得分:0)

很抱歉,这个问题显然与电缆有关。

我使用相同的非屏蔽扁平电缆来执行旋转和LCD信号,并且存在一些干扰,因为当我切换到单独的电缆时,不稳定的行为消失了。