我有一个I2C 16x2 LCD显示器连接到Arduino Uno的A4 (SDA)
和A5 (SCL)
引脚。显示没问题,它可以正常工作。
然后我将旋转编码器连接到引脚D3 (INT1)
和D4
。 INT1
引脚用作读取编码器的中断,读数通过Serial.print()
发送到串行监视器。有一个debounce CAP连接到旋转编码器。编码器引脚使用Arduino的内部上拉。
当encoderPinA
从encoderPinB
下降到HIGH
时,中断附加到读取LOW
。顺时针旋转旋转时,encoderPinA
为LOW
,逆时针旋转时,encoderPinA
为HIGH
。
现在,当主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("-");
}
答案 0 :(得分:0)
很抱歉,这个问题显然与电缆有关。
我使用相同的非屏蔽扁平电缆来执行旋转和LCD信号,并且存在一些干扰,因为当我切换到单独的电缆时,不稳定的行为消失了。