Белый экран в TFT 1.44 ST7735

tft

Я только что купил 3-й TFT и при всех моих попытках получаю белый экран. Не знаю, что я делаю не так!

На этот раз я купил его и следовал их инструкциям руководство

Я создал эту схему с помощью Fritzing, который использую и сам, но все равно снова вижу белый экран

Вот несколько фотографий того, что отображает TFT.

Наконец, я также использовал рекомендуемый тестовый код, который указан в: Файл > Примеры > Библиотека Adafruit ST7735 и ST7789 > graphicstest

Кроме того, я немного изменил комментарий. Вот код, который я использую:

/**************************************************************************
  This is a library for several Adafruit displays based on ST77* drivers.

  Works with the Adafruit 1.8" TFT Breakout w/SD card
    ----> http://www.adafruit.com/products/358
  The 1.8" TFT shield
    ----> https://www.adafruit.com/product/802
  The 1.44" TFT breakout
    ----> https://www.adafruit.com/product/2088
  as well as Adafruit raw 1.8" TFT display
    ----> http://www.adafruit.com/products/618

  Check out the links above for our tutorials and wiring diagrams.
  These displays use SPI to communicate, 4 or 5 pins are required to
  interface (RST is optional).

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 **************************************************************************/

#include <Adafruit_GFX.h>    // Базовая графическая библиотека
#include <Adafruit_ST7735.h> // Аппаратная библиотека для ST7735
#include <Adafruit_ST7789.h> // Аппаратная библиотека для ST7789
#include <SPI.h>

#ifdef ADAFRUIT_HALLOWING
  #define TFT_CS        39 // Освящение выводов управления дисплеем: выбор чипа
  #define TFT_RST       37 // Сброс дисплея
  #define TFT_DC        38 // Отображение данных/выбор команды
  #define TFT_BACKLIGHT  7 // Вывод подсветки дисплея
#elif defined(ESP8266)
  #define TFT_CS         4
  #define TFT_RST        16                                            
  #define TFT_DC         5
#else
  // Для коммутационной платы можно использовать любые 2 или 3 контакта.
  // Эти контакты также подходят для 1,8-дюймового экрана TFT.
  #define TFT_CS        10
  #define TFT_RST        9 // Или установите значение -1 и подключите к контакту RESET Arduino
  #define TFT_DC         8
#endif

// ВАРИАНТ 1 (рекомендуется) — использовать выводы HARDWARE SPI, которые уникальны
// для каждой платы и не может быть переназначен. Для Arduino Uno: MOSI = контакт 11 и
// SCLK = контакт 13. Это самый быстрый режим работы и требуется, если
// с помощью карты microSD коммутационной платы.

// Для 1,44" и 1,8" TFT с ST7735 (включая HalloWing) используйте:
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// Для 1,54-дюймового TFT с ST7789:
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

// ВАРИАНТ 2 позволяет взаимодействовать с дисплеем с помощью ЛЮБЫХ ДВУХ или ТРЕХ КОНТАКТОВ,
// Компромисс в том, что производительность не такая высокая, как у аппаратного SPI выше.
//#define TFT_MOSI 11 // Вывод данных
//#define TFT_SCLK 13 // Тактовый выход
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

float p = 3.1415926;

void setup(void) {
  Serial.begin(9600);
  Serial.print(F("Hello! ST77xx TFT Test"));

#ifdef ADAFRUIT_HALLOWING
  // HalloWing — это особый случай. Он использует дисплей ST7735R, как и
  // разделительная плата, но ориентация и управление подсветкой разные.
  tft.initR(INITR_HALLOWING);        // Инициализировать экран, ориентированный на HalloWing
  pinMode(TFT_BACKLIGHT, OUTPUT);
  digitalWrite(TFT_BACKLIGHT, HIGH); // Подсветка включена
#else
  // Используйте этот инициализатор, если используете 1,8-дюймовый TFT-экран:
 // tft.initR(INITR_BLACKTAB); // Микросхема Init ST7735S, черная вкладка

  // ИЛИ использовать этот инициализатор (раскомментировать), если используется 1,44-дюймовый TFT:
  tft.initR(INITR_144GREENTAB); // Микросхема Init ST7735R, зеленая вкладка

  // ИЛИ использовать этот инициализатор (раскомментировать), если используется 0,96-дюймовый TFT 180x60:
  //tft.initR(INITR_MINI160x80); // Инициализация мини-дисплея ST7735S

  // ИЛИ использовать этот инициализатор (раскомментировать), если используется 1,54-дюймовый TFT 240x240:
  //tft.init(240, 240); // Инициализация ST7789 240x240
#endif

  Serial.println(F("Initialized"));

  uint16_t time = millis();
  tft.fillScreen(ST77XX_BLACK);
  time = millis() - time;

  Serial.println(time, DEC);
  delay(500);

  // большой блок текста
  tft.fillScreen(ST77XX_BLACK);
  testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE);
  delay(1000);

  // функция печати tft!
  tftPrintTest();
  delay(4000);

  // один пиксель
  tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN);
  delay(500);

  // проверка отрисовки линии
  testlines(ST77XX_YELLOW);
  delay(500);

  // оптимизированные линии
  testfastlines(ST77XX_RED, ST77XX_BLUE);
  delay(500);

  testdrawrects(ST77XX_GREEN);
  delay(500);

  testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA);
  delay(500);

  tft.fillScreen(ST77XX_BLACK);
  testfillcircles(10, ST77XX_BLUE);
  testdrawcircles(10, ST77XX_WHITE);
  delay(500);

  testroundrects();
  delay(500);

  testtriangles();
  delay(500);

  mediabuttons();
  delay(500);

  Serial.println("done");
  delay(1000);
}

void loop() {
  tft.invertDisplay(true);
  delay(500);
  tft.invertDisplay(false);
  delay(500);
}

void testlines(uint16_t color) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, 0, x, tft.height()-1, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, 0, tft.width()-1, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, 0, 0, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(0, tft.height()-1, x, 0, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
    delay(0);
  }
  for (int16_t y=0; y < tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
    delay(0);
  }
}

void testdrawtext(char *text, uint16_t color) {
  tft.setCursor(0, 0);
  tft.setTextColor(color);
  tft.setTextWrap(true);
  tft.print(text);
}

void testfastlines(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t y=0; y < tft.height(); y+=5) {
    tft.drawFastHLine(0, y, tft.width(), color1);
  }
  for (int16_t x=0; x < tft.width(); x+=5) {
    tft.drawFastVLine(x, 0, tft.height(), color2);
  }
}

void testdrawrects(uint16_t color) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x < tft.width(); x+=6) {
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
  }
}

void testfillrects(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=tft.width()-1; x > 6; x-=6) {
    tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
  }
}

void testfillcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=radius; x < tft.width(); x+=radius*2) {
    for (int16_t y=radius; y < tft.height(); y+=radius*2) {
      tft.fillCircle(x, y, radius, color);
    }
  }
}

void testdrawcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
    for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
      tft.drawCircle(x, y, radius, color);
    }
  }
}

void testtriangles() {
  tft.fillScreen(ST77XX_BLACK);
  int color = 0xF800;
  int t;
  int w = tft.width()/2;
  int x = tft.height()-1;
  int y = 0;
  int z = tft.width();
  for(t = 0 ; t <= 15; t++) {
    tft.drawTriangle(w, y, y, x, z, x, color);
    x-=4;
    y+=4;
    z-=4;
    color+=100;
  }
}

void testroundrects() {
  tft.fillScreen(ST77XX_BLACK);
  int color = 100;
  int i;
  int t;
  for(t = 0 ; t <= 4; t+=1) {
    int x = 0;
    int y = 0;
    int w = tft.width()-2;
    int h = tft.height()-2;
    for(i = 0 ; i <= 16; i+=1) {
      tft.drawRoundRect(x, y, w, h, 5, color);
      x+=2;
      y+=3;
      w-=4;
      h-=6;
      color+=1100;
    }
    color+=100;
  }
}

void tftPrintTest() {
  tft.setTextWrap(false);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 30);
  tft.setTextColor(ST77XX_RED);
  tft.setTextSize(1);
  tft.println("Hello World!");
  tft.setTextColor(ST77XX_YELLOW);
  tft.setTextSize(2);
  tft.println("Hello World!");
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextSize(3);
  tft.println("Hello World!");
  tft.setTextColor(ST77XX_BLUE);
  tft.setTextSize(4);
  tft.print(1234.567);
  delay(1500);
  tft.setCursor(0, 0);
  tft.fillScreen(ST77XX_BLACK);
  tft.setTextColor(ST77XX_WHITE);
  tft.setTextSize(0);
  tft.println("Hello World!");
  tft.setTextSize(1);
  tft.setTextColor(ST77XX_GREEN);
  tft.print(p, 6);
  tft.println(" Want pi?");
  tft.println(" ");
  tft.print(8675309, HEX); // вывести 8 675 309 в HEX!
  tft.println(" Print HEX!");
  tft.println(" ");
  tft.setTextColor(ST77XX_WHITE);
  tft.println("Sketch has been");
  tft.println("running for: ");
  tft.setTextColor(ST77XX_MAGENTA);
  tft.print(millis() / 1000);
  tft.setTextColor(ST77XX_WHITE);
  tft.print(" seconds.");
}

void mediabuttons() {
  // играть
  tft.fillScreen(ST77XX_BLACK);
  tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
  delay(500);
  // Пауза
  tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
  tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
  delay(500);
  // воспроизвести цвет
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
  delay(50);
  // цвет паузы
  tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
  // воспроизвести цвет
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
}

Пожалуйста, не помечайте этот вопрос как повторяющийся, потому что я посмотрел на другого парня, который использовал другое руководство. То, которое использую я, опубликовано компанией, у которой я купил TFT.

, 👍0

Обсуждение

Белый экран = дисплей не инициализируется. Трижды проверьте проводку и код., @Majenko

вы вставили SD-карту? если да то удали, @Juraj

Юрай - Да, я делал это и без него, но результат все тот же. не знаю очень обидно., @Noajm IsMy Name

Маженко - Спасибо за комментарий, но я не эксперт, и я сделал то же самое, что и должен, несколько раз следил за руководством, и я загрузил несколько фотографий того, что проводка ... Извините, я не уверен, что делать дальше, @Noajm IsMy Name

ваш Arduino здесь тоже Arduino Micro, как в следующем вопросе?, @Juraj

@Glorfindel Эй, если вы все еще ищете вопросы для редактирования, перейдите к моему недавнему заданному вопросу, я уверен, что вы найдете общий или отсутствующий период, который нужно исправить. Я думаю, это твоя работа! Путь!, @Noajm IsMy Name

@Juraj Да такой же, @Noajm IsMy Name


1 ответ


Лучший ответ:

2

Я хотел бы предложить некоторые изменения в вашем коде, например

Ваш код:

/*************************************************** **********************************
Это библиотека для нескольких дисплеев Adafruit на основе драйверов ST77*.

Работает с Adafruit 1.8" TFT Breakout с SD-картой
----> http://www.adafruit.com/products/358
1,8-дюймовый экран TFT
----> https://www.adafruit.com/product/802
Прорыв 1,44-дюймового TFT
----> https://www.adafruit.com/product/2088
а также Adafru это необработанный 1,8-дюймовый TFT-дисплей
----> http://www.adafruit.com/products/618

Проверьте ссылки выше для наших руководств и электрических схем.
Эти дисплеи используют SPI для связи, для связи требуется 4 или 5 контактов.
интерфейс (RST опционально).

Adafruit вкладывает время и ресурсы, предоставляя этот открытый исходный код,
пожалуйста, поддержите Adafruit и оборудование с открытым исходным кодом, купив
продукты от Adafruit!

Написано Лимором Фридом/Ладьядой для Adafruit Industries.
Лицензия MIT, весь приведенный выше текст должен быть включен в любое распространение
******************************************************* ************************/

#include <Adafruit_GFX.h>    // Базовая графическая библиотека
#include <Adafruit_ST7735.h> // Аппаратная библиотека для ST7735
#include <Adafruit_ST7789.h> // Аппаратная библиотека для ST7789
#include <SPI.h>

#ifdef ADAFRUIT_HALLOWING
  #define TFT_CS        39 // Освящение выводов управления дисплеем: выбор чипа
  #define TFT_RST       37 // Сброс дисплея
  #define TFT_DC        38 // Отображение данных/выбор команды
  #define TFT_BACKLIGHT  7 // Вывод подсветки дисплея
#elif defined(ESP8266)
  #define TFT_CS         4
  #define TFT_RST        16                                            
  #define TFT_DC         5
#else
  // Для коммутационной платы можно использовать любые 2 или 3 контакта.
  // Эти контакты также подходят для 1,8-дюймового экрана TFT.
  #define TFT_CS        10
  #define TFT_RST        9 // Или установите значение -1 и подключите к контакту RESET Arduino
  #define TFT_DC         8
#endif

// ВАРИАНТ 1 (рекомендуется) — использовать выводы HARDWARE SPI, которые уникальны
// для каждой платы и не может быть переназначен. Для Arduino Uno: MOSI = контакт 11 и
// SCLK = контакт 13. Это самый быстрый режим работы и требуется, если
// с помощью карты microSD коммутационной платы.

// Для 1,44" и 1,8" TFT с ST7735 (включая HalloWing) используйте:
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// Для 1,54-дюймового TFT с ST7789:
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

// ВАРИАНТ 2 позволяет взаимодействовать с дисплеем с помощью ЛЮБЫХ ДВУХ или ТРЕХ КОНТАКТОВ,
// Компромисс в том, что производительность не такая высокая, как у вышеописанного аппаратного SPI.
//#define TFT_MOSI 11 // Вывод данных
//#define TFT_SCLK 13 // Тактовый выход
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

предлагаемые изменения:

/*************************************************** **********************************
Это библиотека для нескольких дисплеев Adafruit на основе драйверов ST77*.

Работает с Adafruit 1.8" TFT Breakout с SD-картой
----> http://www.adafruit.com/products/358
1,8-дюймовый экран TFT
----> https://www.adafruit.com/product/802
Прорыв 1,44-дюймового TFT
----> https://www.adafruit.com/product/2088
а также необработанный 1,8-дюймовый TFT-дисплей Adafruit
----> http://www.adafruit.com/products/618

Проверьте ссылки выше для наших руководств и электрических схем.
Эти дисплеи используют SPI для связи, для связи требуется 4 или 5 контактов.
интерфейс (RST опционально).

Adafruit вкладывает время и ресурсы, предоставляя этот открытый исходный код,
пожалуйста, поддержите Adafruit и оборудование с открытым исходным кодом, купив
продукты от Adafruit!

Написано Лимором Фридом/Ладьядой для Adafruit Industries.
Лицензия MIT, весь приведенный выше текст должен быть включен в любое распространение
******************************************************* ************************/

#include <Adafruit_GFX.h>    // Базовая графическая библиотека
#include <Adafruit_ST7735.h> // Аппаратная библиотека для ST7735
#include <Adafruit_ST7789.h> // Аппаратная библиотека для ST7789
#include <SPI.h>

  #define TFT_CS        10
  #define TFT_RST        9 // Или установите значение -1 и подключите к контакту RESET Arduino
  #define TFT_DC         8

// ВАРИАНТ 1 (рекомендуется) — использовать выводы HARDWARE SPI, которые уникальны
// для каждой платы и не может быть переназначен. Для Arduino Uno: MOSI = контакт 11 и
// SCLK = контакт 13. Это самый быстрый режим работы и требуется, если
// с помощью карты microSD коммутационной платы.

// Для 1,44" и 1,8" TFT с ST7735 (включая HalloWing) используйте:
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// Для 1,54-дюймового TFT с ST7789:
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

// ВАРИАНТ 2 позволяет взаимодействовать с дисплеем с помощью ЛЮБЫХ ДВУХ или ТРЕХ КОНТАКТОВ,
// Компромисс в том, что производительность не такая высокая, как у аппаратного SPI выше.
#define TFT_MOSI 11  // Вывод данных
#define TFT_SCLK 13  // Часы вышли
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

Замените эту часть на ту, которую я предложил, поскольку Вы прокомментировали контакты SCK и MISO в своем коде, поэтому на этих контактах не происходит передача данных. Во-вторых, я также внес изменения в соответствии с конфигурацией вашего оборудования. .

,

Ты гений... ха-ха Нет больше глупого белого экрана... я вижу цветной экран, @Noajm IsMy Name

Надеюсь не буду мешать. У меня только что был запрос, и я не уверен, что это сработает. Я собирался использовать MicroSD, но, поскольку он есть, могу ли я использовать его извне? как я могу поставить звук .wav и воспроизвести его в динамике? Поскольку вы знаете проводку, я надеялся, что вы могли бы предоставить мне код, который загружает звуковой файл с этой SD-карты и выводит его на динамик, возможно, на контакт 3? Это мне очень поможет и уменьшит размер проекта, чтобы его можно было носить. Спасибо, @Noajm IsMy Name

мы не предоставляем здесь код, мы можем помочь вам с вашей проблемой и предоставить решение проблемы, но не код., @Vaibhav

хорошо, я понимаю. В любом случае, спасибо!, @Noajm IsMy Name

Может быть, я думаю, я должен спросить это, я могу использовать встроенную MicroSD извне или она будет только для загрузки изображений на TFT?, @Noajm IsMy Name

Я не понимаю этого **все еще использую встроенную карту памяти MicroSD извне**, пожалуйста, объясните, что вы ищете., @Vaibhav

Этот TFT 1.44 имеет чип для карты Micro, и мне сказали, что он предназначен для загрузки изображений .bmp на экран .. поэтому мне было интересно, могу ли я хранить там звуковые файлы .wav и выводить их на динамик через другой контакт вместо того, чтобы покупать это «Micro SD Card Breakout Board» - надеюсь, я правильно объяснил, извините за мой английский., @Noajm IsMy Name

У вас есть открытые контакты для Micro SD? Если да, то можете попробовать., @Vaibhav

Я действительно не очень хорошо разбираюсь в этих вещах, но в любом случае это нормально, ха-ха, @Noajm IsMy Name

Извините, забыл отметить как ответ!, @Noajm IsMy Name

@Vaibhav, вы решили эту проблему, переключившись на битовый SPI. вы не могли этого знать, но фотография в следующем вопросе показала Arduino Micro, а не Nano, @Juraj

@Juraj, о чем вы, ребята, говорите ... вы, ребята, очень умны, я не понимаю этих терминов. Меня затмевает!, @Noajm IsMy Name

библиотека TFT может работать с любыми контактами, если вы их укажете. Он будет использовать программный SPI. Вот почему он работал на «неправильных» контактах., @Juraj

Хорошо, я сделал много улучшений и дополнений ... и теперь я не понимаю, почему эта строка USE_ARDUINO_INTERRUPTS true означает, что мой **TFT** работает наполовину. не думаю, что вам нужен мой код, но вот он https://github.com/WorldFamousElectronics/PulseSensorPlayground/issues/101, @Noajm IsMy Name

@Juraj У меня другая проблема с последним вопросом, который я задал в своем профиле., @Noajm IsMy Name