Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带LCD的Arduino UNO,来自旋转编码器的奇怪读数_Arduino_Interrupt - Fatal编程技术网

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

带LCD的Arduino UNO,来自旋转编码器的奇怪读数,arduino,interrupt,Arduino,Interrupt,我有一个I2C 16x2液晶显示器连接到Arduino Uno的A4(SDA)和A5(SCL)引脚。显示器没有问题,工作正常 然后我有一个旋转编码器连接到引脚D3(INT1)和D4。INT1引脚用作中断以读取编码器,并且读取通过Serial.print()发送到串行监视器。旋转编码器上连接有去盎司盖。编码器引脚使用Arduino的内部上拉 当encoderPinB从HIGH下降到LOW时,中断连接到readencoderPinA。顺时针转动转盘时,encoderPinA为LOW,逆时针转动时,e

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

然后我有一个旋转编码器连接到引脚
D3(INT1)
D4
INT1
引脚用作中断以读取编码器,并且读取通过
Serial.print()
发送到串行监视器。旋转编码器上连接有去盎司盖。编码器引脚使用Arduino的内部上拉

encoderPinB
HIGH
下降到
LOW
时,中断连接到read
encoderPinA
。顺时针转动转盘时,
encoderPinA
LOW
,逆时针转动时,
encoderPinA
HIGH

现在,当主
循环中没有任何内容时,顺时针旋转旋转时,串行监视器上会出现
++++++
符号,逆时针旋转时会出现
-->
符号,这是我应该看到的

但是如果我取消对打印到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("-");
}
#定义编码器PINA 4
#定义encoderPinB 3
#包括
液晶I2C液晶显示器(0x27,2,1,0,4,5,6,7,3,正极);
无效设置(){
Serial.begin(9600);
lcd.begin(16,2);
pinMode(编码器pina,输入\上拉);
pinMode(encoderPinB,输入\上拉);
连接中断(数字插针中断(编码器PINB)、读编码器、下降);
}
void循环(){
//lcd.setCursor(0,0);
//lcd.打印(“测试”);
}
void readEncoder(){
如果(digitalRead(encoderPinA)=低)串行打印(“+”);
else序列号。打印(“-”);
}

对不起,各位,这个问题显然与电缆有关

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