首页 文章

MEGA 2560:当使用带中断的代码调用Adafruit FT6206 ctp函数时崩溃

提问于
浏览
0

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);

}

1 回答

  • 0

    发现了这个问题,并希望与社区分享解决方案 .

    MEGA2560有六个中断引脚:2,3,18,19,20,21 . 但是,当使用属于Adafruit的2.8“TFT屏蔽的FT6205时,中断引脚20和21变得不可用,因为它们被I2C总线 . 中断仅限于引脚2,3,18和19 .

    这种限制有点问题,因为TFT屏蔽块可以方便地接触引脚2和3.但是,可以使用#22规格的电线与屏蔽共用一个插头引脚 .

    引脚18和19不被TFT屏蔽阻挡,可以使用 . 但是,我想在检测顺时针和逆时针旋转编码器运动时使用这些引脚进行中断 .

相关问题