Arduino MEGA 2560:我希望在旋转编码器上按下按钮时执行中断。我有代码在工作。但是,如果我向Adafruit的FT6206库添加函数调用,则MEGA 2560会挂起。 (这证明Serial.println命令文本在显示的中间中断了。)为什么?
硬件设置:旋转编码器按钮有两个引脚:一侧通过上拉电源连接到中断引脚,另一侧接地。
未连接其他硬件或屏蔽。硬件设置仅是连接至MEGA 2560的旋转编码器,以最简单的形式演示该问题。但是,在安装TFT显示屏护罩时,我也会遇到同样的问题。
MEGA 2560是INLAND品牌。旋转编码器来自Adafruit。
代码如下:
#include "Adafruit_FT6206.h"
// Global Variables
const byte RotarybuttonPin = 21;
volatile byte Rotarybutton_Pressed_Flag;
TS_Point touchpoint;
Adafruit_FT6206 ctp = Adafruit_FT6206();
void setup() {
ctp.begin(70);
Serial.begin(115200);
pinMode(RotarybuttonPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(RotarybuttonPin), Button_Pin_ISR, LOW);
}
void Button_Pin_ISR() {Rotarybutton_Pressed_Flag = 1;}
void loop() {
Serial.println("In Loop!");
touchpoint = WAIT_FOR_SCREEN_TOUCH();
}
TS_Point WAIT_FOR_SCREEN_TOUCH() {
CHECK_ROTARY_ENCODER();
Serial.println("Entering 'While'");
//This next line locks the MEGA 2560 up with ctp function call
while (!ctp.touched()) {CHECK_ROTARY_ENCODER();}
return (touchpoint);
}
void CHECK_ROTARY_ENCODER() {
if (Rotarybutton_Pressed_Flag) {
Serial.println("PRESSED");
Rotarybutton_Pressed_Flag = 0;
}
else {Serial.println("NOT PRESSED");}
delay(190);
}
答案 0 :(得分:0)
发现了问题,并希望与社区分享解决方案。
MEGA2560具有六个中断引脚:2、3、18、19、20、21。但是,当使用FT6205(属于Adafruit的2.8英寸TFT屏蔽罩)时,中断引脚20和21将无法使用。由I2C总线使用。中断仅限于引脚2、3、18和19。
此限制有点问题,因为TFT屏蔽层会阻止轻松访问引脚2和3。但是,可以使用#22规格的导线与屏蔽层共享插头。
引脚18和19不受TFT屏蔽的限制,可以使用。但是,在检测顺时针和逆时针旋转编码器运动时,我想使用这些引脚作为中断。