[英]Arduino UNO with LCD, strange readings from rotary encoder
我有一个I2C 16x2 LCD显示器连接到Arduino Uno的A4 (SDA)
和A5 (SCL)
引脚。 显示器没问题,它可以正常工作。
然后,我有一个旋转编码器连接到引脚D3 (INT1)
和D4
。 INT1
引脚用作读取编码器的中断,并且读数通过Serial.print()
发送到串行监视器。 有防抖CAP连接到旋转编码器。 编码器引脚使用Arduino的内部上拉电阻。
当encoderPinB
从HIGH
下降到LOW
时,该中断附加到读取的encoderPinA
。 顺时针旋转, 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("-");
}
抱歉,这个问题显然是电缆相关的问题。
我使用同一根非屏蔽扁平电缆来传输旋转信号和LCD信号,并且存在一些干扰,因为当我切换到单独的电缆时,不稳定的行为消失了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.