Arduino TFT Touch Shield: วาดแบบวนซ้ำ

ฉันกำลังพยายามสร้างเมนูด้วยทัชแพด TFT ตอนนี้ปัญหาของฉันคือฉันไม่สามารถวาดอะไรในฟังก์ชันลูปได้

ถ้าฉันเขียนฟังก์ชันการวาดใดๆ ในลูป หน้าจอจะเปลี่ยนเป็นสีขาว ฉันคิดว่าเป็นเพราะหน้าจอต้องใช้เวลาพอสมควรในการสร้างขึ้น ดังนั้นฉันจึงเพิ่มความล่าช้า (1,000) แต่แล้วหน้าจอก็กะพริบทุกวินาทีซึ่งเห็นได้ชัดว่าไม่ใช่สิ่งที่ฉันต้องการ

สิ่งที่ผิดปกติต่อไปคือโปรแกรมหยุดทำงานเมื่อฉันวาดเมื่อสัมผัสหน้าจอ ในโค้ดด้านล่างฉันมีฟังก์ชันการวาดสามฟังก์ชัน สองคนกำลังทำงานอยู่ คนหนึ่งไม่ทำงาน (ดูความคิดเห็น)

#include <SeeedTouchScreen.h>

#include <TFTConsole.h>
#include <Adafruit_TFTLCD.h>
#include <Adafruit_GFX.h>


#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4

#define TS_MINX 169
#define TS_MINY 208
#define TS_MAXX 1781
#define TS_MAXY 1820

#define YP A2  // must be an analog pin, use "An" notation!
#define XM A3  // must be an analog pin, use "An" notation!
#define YM 8   // can be a digital pin
#define XP 9   // can be a digital pin

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
TouchScreen ts = TouchScreen(XP, YP, XM, YM);
boolean touched = false;


void setup() {
  Serial.begin(9600);
  Serial.print("Starting...");

  tft.reset();

  tft.begin(0x9325);

  tft.setRotation(1);

  tft.fillScreen(BLACK);

  //Print "PPM CO" Text
  tft.setCursor(50, 30);
  tft.setTextColor(GREEN);
  tft.setTextSize(3);
  tft.print("Hello World"); //<- this is displayed fine
  delay(1000);
}
boolean first = true;
void loop() {
  if (first) {
    first = false;
    tft.drawCircle(119, 160, 20, random(0xFFFF)); //<- This is also displayed
  }


  Point p = ts.getPoint();


  p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);
  p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320);
  if (p.x <= 240 && p.y <= 320 && p.x >= 0 && p.y >= 0) {
    Serial.println("don't touch me!");
    touched = true;
  }
  else {
    touched = false;
  }
  if (touched) {

    tft.drawCircle(119, 180, 20, RED); //<- This is not displayed and makes the screen flash
    delay(1000);
  }


  //tft.fillScreen(BLUE);
  //delay(500);

}

เฉพาะในกรณีที่ฉันมี DrawCircle สุดท้ายภายในโค้ด ตัวแปร สัมผัส จะไม่เปลี่ยนกลับเป็นเท็จหากฉันหยุดสัมผัสจอแสดงผล

ไม่มีใครมีเงื่อนงำสิ่งที่ฉันทำผิด?

อัปเดต: ฉันหยุดการแสดงผลไม่ให้กะพริบโดยปล่อยให้เหตุการณ์ที่แตะเกิดขึ้นเพียงครั้งเดียวเมื่อมีการแตะจอแสดงผล แต่ฉันยังคงประสบปัญหาว่าไม่มีอะไรถูกดึงออกมา...

void loop() {
  //Touchposition bestimmen
  Point p = ts.getPoint();
  p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);
  p.y = map(p.y, TS_MINY, TS_MAXY, 0, 320);
  if (p.x <= 240 && p.y <= 320 && p.x >= 0 && p.y >= 0) {
    if (released) {
      touched = true;
      released = false;
    }
  }
  else {
    //Serial.println("Touch me where I like it!");
    touched = false;
    released = true;
  }
  if (touched && !released) {
    Serial.println("don't touch me!");
    drawButton(100, 100, "Manuell");
    touched = false;
    delay(500);
  }

}

person user7408924    schedule 14.06.2017    source แหล่งที่มา


คำตอบ (1)


ฉันสังเกตเห็นว่าจอแสดงผล TFT และหน้าจอสัมผัสใช้พินอะนาล็อกร่วมกัน ฉันคิดว่านี่ทำให้เกิดปัญหา ดังนั้นฉันจึงแบ่งโค้ดของฉันเป็นส่วนที่ใช้จัดการหน้าจอสัมผัส จากนั้นฉันสามารถกำหนดพินให้กับจอภาพ TFT ใหม่และวาดลงไปได้ ฉันไม่รู้ว่าทฤษฎีนี้สมเหตุสมผลหรือไม่ แต่มันได้ผล:

 void loop() {
  //Touchposition bestimmen
  if (ts.isTouching()) {
    Point p = ts.getPoint();
    p.x = map(p.x, TS_MINX, TS_MAXX, 0, 240);
    p.y = map(p.x, TS_MINY, TS_MAXY, 0, 320);
    if (released) {
      released = false;
    }
  }
  else {
    //Serial.println("Touch me where I like it!");
    released = true;
  }

  if (ts.isTouching() && !released) {
    //re assing pins to tft because they are also used by the touchscreen
    Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
    Serial.println("don't touch me!");
    drawButton(100, 100, "Manuell");
    touched = false;
  }
}

funton DrawButton มีฟังก์ชันการวาดหลายอย่าง

person user7408924    schedule 15.06.2017