Использование touchscreen.getpoint приводит к мгновенному сбою программы
этот код работает нормально, пока я не добавлю оператор if, окружающий метод draw screen (). при нажатии на экран программа мгновенно выходит из строя, делая экран белым. любая помощь будет признательна.
"
// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <stdint.h>
#include "TouchScreen.h"
#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
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
// D0 connects to digital pin 8 (Notice these are
// D1 connects to digital pin 9 NOT in order!)
// D2 connects to digital pin 2
// D3 connects to digital pin 3
// D4 connects to digital pin 4
// D5 connects to digital pin 5
// D6 connects to digital pin 6
// D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).
// Assign human-readable names to some common 16-bit color values:
#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);
// If using the shield, all control and data lines are fixed, and
// a simpler declaration can optionally be used:
// Adafruit_TFTLCD tft;
int six;
int hundred;
int twenty;
int ten;
int four;
int eight;
int two;
int twelve;
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
void setup()
{
Serial.begin(9600);
Serial.println(F("TFT LCD test"));
tft.reset();
uint16_t identifier = tft.readID();
tft.begin(identifier);
tft.fillScreen(BLACK);
six = random(1, 6);
eight = random(1, 8);
twenty = random(1, 20);
hundred = random(1, 100);
four = random(1, 4);
ten = random(1, 10);
two = random(1, 2);
twelve = random(1, 12);
tft.setTextColor(WHITE); tft.setTextSize(4);
drawNumbers();
}
void loop() {
six = random(1, 6);
eight = random(1, 8);
twenty = random(1, 20);
hundred = random(1, 100);
four = random(1, 4);
ten = random(1, 10);
two = random(1, 2);
twelve = random(1, 12);
if (ts.getPoint().z != 0) {
drawNumbers();
}
}
void drawNumbers() {
tft.setCursor(0, 0);
tft.fillScreen(BLACK);
tft.println("D2: " + String(two));
tft.println("D4: " + String(four));
tft.println("D6: " + String(six));
tft.println("D8: " + String(eight));
tft.println("D10: " + String(ten));
tft.println("D12: " + String(twelve));
tft.println("D20: " + String(twenty));
tft.println("D100: " + String(hundred));
}"
эта библиотека кажется в значительной степени плохо документированной, но это кажется невероятным, если это не с моей стороны.
@cptcrabcakes, 👍1
Обсуждение2 ответа
Обновлено:
- Предоставленная информация не разглашается.
Я бы подошел к проблеме так. Что делать, если что-то возвращается getPoint.
if (ts.getPoint().z != 0) {
drawNumbers();
}
Чтобы
auto pt = ts.getPoint().z;
Serial.print("Point: ");
Serial.println(pt);
if (pt != 0) {
drawNumbers();
}
Это подскажет мне, возвращаю ли я ценность или это проблема в другом месте.
Надеюсь, это поможет.
привет, прежде всего, спасибо, что ответили. Сам по себе этот метод, похоже, не является проблемой, он будет работать нормально сам по себе. Проблема в том, что при вызове оператора if и метода getpoint с сенсорным экраном происходит сбой программы. Я могу печатать с помощью этого метода без проблем., @cptcrabcakes
Проигнорируйте мой первоначальный ответ. После некоторого дополнительного тестирования класс String теперь поддерживает ваше использование. Вместо этого я добавлю чаевые., @voidPointer
@cptcrabcakes Извините, я думаю, что мой первоначальный ответ не был актуальным. Я внес поправки., @voidPointer
Последовательный монитор передает данные о точках, что заставляет меня думать, что это не настоящий сбой, просто графическая библиотека выходит из себя., @cptcrabcakes
@cptcrabcakes Вы можете получить более качественную помощь, если сможете предоставить информацию, такую как платформа, которую вы используете, например Uno, Nano и т. Д., И подробную информацию об экране в вопросе., @voidPointer
Кто-то пометил ответ как бесполезный, несмотря на то, что он помог диагностировать, где была ошибка? ОК., @voidPointer
Понял это
TFT - экран, который я использую, заставляет совместно использовать контакты, используемые для аналогового и цифрового вместе. Запустив свой метод рисования с помощью pinMode (), я настроил контакты так, чтобы они обрабатывались как на сенсорном экране.
void drawNumbers() {
pinMode (XM, OUTPUT);
pinMode (YP, OUTPUT);
tft.setCursor(0, 0);
tft.fillScreen(BLACK);
tft.println("D2: " + String(two));
tft.println("D4: " + String(four));
tft.println("D6: " + String(six));
tft.println("D8: " + String(eight));
tft.println("D10: " + String(ten));
tft.println("D12: " + String(twelve));
tft.println("D20: " + String(twenty));
tft.println("D100: " + String(hundred));
}
- Как приглушить фоновые светодиоды на TFT дисплее с помощью ILI9341
- Кнопка двойного состояния Nextion
- Увеличьте или уменьшите яркость дисплея Nextion
- mcufriend 2.4 TFT с ESP8266
- Низкая частота обновления 1,8-дюймового TFT-дисплея
- Как создавать и редактировать шрифты для библиотеки Adafruit GFX?
- Подключение нескольких TFT-панелей к Arduino Uno через SPI?
- Белый экран в TFT 1.44 ST7735
как вы можете знать, что программа потерпела крах?, @jsotola
Добро пожаловать в SE/Arduino! Пожалуйста, пройдите [экскурсию], чтобы узнать, как работает этот сайт. -- Проверьте, что возвращает
ts.getpoint ()
. -- Как кажется, модуль "Сенсорный экран" - это какая-то локальная библиотека. Не могли бы вы предоставить ссылку, пожалуйста? [Редактировать] ваш вопрос, не добавляйте комментарий., @the busybee