После инициализации дисплея в сериал порт сперва выводятся крякозябры и затем ничего

Доброго времени суток. Стараюсь максимально точно передать проблему.
Разбираюсь с работой дисплея (вот он) на ST7735
Для отслеживания этапов работы скетча обычно использую вывод в сериал порт. Допустим самый простой скетч, который выводит при загрузке “Начало1”, спит 3 сек, выводит “Начало2”, спит 5 сек, инициализирует дисплей, запускает вывод в сериал порт строк из массива, и затем в цикле выводит какое-то слово.
Если без инициализации дисплея, то все выводится хорошо. Как только дисплей инициализируется, то возможны варианты:

  1. Если без сна выводить слова “Начало1” и “Начало2”, и инициализировать дисплей то сразу после закрякозябренной инфы про плату уже ничего не выводится.
  2. Если поставить сон между этими словами, то они выведутся и после инициализации дисплея выведется пару крякозябр и больше ничего. Возможно и в первом случае эти крякозябры выводятся, но как их распознать среди других - не знаю.
  3. Если закоментить инициализацию дисплея, то все работает.
    Ниже пример тестового кода:
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
// Обьявляю массив
char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"};
// Обьявляю пины
  #define TFT_CS         D2
  #define TFT_RST        D6                                            
  #define TFT_DC         D1

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
  
void setup() {
  Serial.begin(115200);
  Serial.println("Begin1");
  delay(3000);
  Serial.println("Begin2"); 
  delay(5000);         // ставлю разные периоды сна, вдруг больше напечатается
//  tft.initR(INITR_BLACKTAB);    // вот тут, если раскоментить, перестает выводится в сериал порт
// небольшой массив для печати 
for (int i = 0; i < 6; i++){
   Serial.println(myStrings[i]);
   delay(3000);
   }  
}

void loop() {
Serial.println("da");
delay(3000);
}

Хотелось бы понять в чем дело и как сделать, чтобы в сериал порт выводилось нормально и после инициализации дисплея.

1 пин это что такое?

Это взято из библиотеки ST7735. Там указываются три пина на плате, которые нужны для работы дисплея. Тут у меня ESP8266

Давай еще спрошу. Какую функцию выполняет пин 1 в твоей плате? Ты инструкцию на плату читал или в тупую долбишь непонятно что?

Практически в тупую. Я в железе не особо то и разбираюсь. Смотрю инструкции, пробую понять, но не особо. Потому подключаю так, как там написано. Вроде это какой-то " Выбор передачи данных или команд: команда при низком уровне, данные при высоком уровне". Взято отсюда:
http://wiki.amperka.ru/продукты:itead-display-1n8in
Отсюда:
https://lesson.iarduino.ru/page/podklyuchaem-cvetnoy-displey-1-8-tft-ili9163-st7735r-sd-k-arduino/
Вот на форуме:

И ещё несколько подобных статей.
На дисплее это A0
Вот вся схема подключения дисплея:
LED — 3V
SCK — D5
SDA — D7
A0 — D1
RESET — 3V (можно подключить к D6)
CS — D2
GND — G
VCC — 3V

dc это data/command. В терминологии дисплея - А0
Убери его с D1

1 лайк

Похоже на то. Вы читали описание своей платы? Пин D1 уже занят выводом в сериал. А вы пытаетесь и дисплей на него посадить

и сериал при этом использовать

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

2 лайка

А какая цель использования дисплея?

Спасибо, перенес на D3. Все работает )

Научиться работать с дисплеем. Может где пригодится. Вернее планов много, больше, чем у Наполеона. НО ни времени, ни таланта особо не хватает ))) Так что может зачем-то и пригодится. В первую очередь с какими-нибудь датчиками.