st7735 160 на 128 подсветка барахлит

lilik
Offline
Зарегистрирован: 19.10.2017

Argus19 пишет:

lilik пишет:

При попытке открыть экзешник (два раза левой мышкой :).

 Я проверил на двух компах с Windows 10. Программа работает.

 

Да, может в этом дело, у меня версия 8.1.

Feofan
Offline
Зарегистрирован: 28.05.2017

lilik пишет:

Да, может в этом дело, у меня версия 8.1.

W7x64 без проблем.

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:

Да, может в этом дело, у меня версия 8.1.

 Вы её случаем не из архива запускаете?

Argus19
Offline
Зарегистрирован: 08.05.2022

Дело может  быть в крупной иконке. Сделал маленькую:

https://transfiles.ru/ac952

 

 

lilik
Offline
Зарегистрирован: 19.10.2017

Argus19 пишет:

lilik пишет:

Да, может в этом дело, у меня версия 8.1.

 Вы её случаем не из архива запускаете?

Нет, разархивировал.

lilik
Offline
Зарегистрирован: 19.10.2017

Argus19 пишет:

Дело может  быть в крупной иконке. Сделал маленькую:

https://transfiles.ru/ac952

 

 

Да, теперь открылось, попробую использовать.

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:

Да, теперь открылось, попробую использовать.

 Программа передаёт в СОМ-порт байтовый массив. Не строку.

 

lilik
Offline
Зарегистрирован: 19.10.2017

Argus19 пишет:

lilik пишет:

Да, теперь открылось, попробую использовать.

 Программа передаёт в СОМ-порт байтовый массив. Не строку.

 

А я думаю, чего не идёт картинка :)

Перегрузил скетч, пошло дело, но с цветами явно не то. Кролик вечерний получается.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

lilik пишет:

Кролик вечерний получается.

вечерний - это под тёмным (грибным) соусом? )))

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:

Перегрузил скетч, пошло дело, но с цветами явно не то. Кролик вечерний получается.

 Перегрузил, надо понимать - переписал под приём байтового массива без скобок, запятых и символа конца строки?

 Попробую написать отдельную программу для проверки перекодировки. Со временем не очень.

 

lilik
Offline
Зарегистрирован: 19.10.2017

Argus19 пишет:

 

 Перегрузил, надо понимать - переписал под приём байтового массива без скобок, запятых и символа конца строки?

 

 

Да, только чего тут переписывать - просто лишнее убирать.

С цветами из 888 в 565 

Есть в библиотеке под экранчик такая функция в одну строчку:

1// Pass 8-bit (each) R,G,B, get back 16-bit packed color
2uint16_t Adafruit_ST7735::Color565(uint8_t r, uint8_t g, uint8_t b)
3{
4  return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
5}

Тут она не поможет?

lilik
Offline
Зарегистрирован: 19.10.2017

И второй момент, как меня уже поправили в версии со строкой-массивом, байты должны идти не 1,2 - 3,4 - 5,6... а 2,1 - 4,3 - 6,5...

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:

И второй момент, как меня уже поправили в версии со строкой-массивом, байты должны идти не 1,2 - 3,4 - 5,6... а 2,1 - 4,3 - 6,5...

 У меня пока идут 1 байт: "R"+3 старших разряда "G", 2 байт: 3 младших разряда "G" + "B".

Нашёл ошибку в перекодировке. Поправил. Добавил загрузку картинок в формате .png.

https://drive.google.com/file/d/1lN8YkH4mGF5FudZlpdLlWZfP8gTnY_ig/view?usp=sharing

 

lilik
Offline
Зарегистрирован: 19.10.2017

Да, теперь всё работает в правильных цветах.

lilik
Offline
Зарегистрирован: 19.10.2017

В "пнж формате" ещё не пробовал.

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:

В "пнж формате" ещё не пробовал.

формат .png подразумевает прозрачность, но на таком дисплее сие не возможно. Поэтому, будет просто не прозрачная картинка.

 Можно добавить формат .webp,  но это только для Win10

 В любом случае, изображение становится обычным растровым и оно передаётся в ардуинку.

 

lilik
Offline
Зарегистрирован: 19.10.2017

В экранчике можно управлять каждым пикселем индивидуально, при желании можно и без фона передавать картинку, но зачем это надо?

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:

В экранчике можно управлять каждым пикселем индивидуально, при желании можно и без фона передавать картинку, но зачем это надо?

 Как я понимаю, можно накладывать изображения.

Приведите, пожалуйста ваш новый скетч.

 

lilik
Offline
Зарегистрирован: 19.10.2017

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

А так авторы библиотеки  реализовали подход в этой функции для одноцветного изображения:

01// Draw a 1-bit image (bitmap) at the specified (x,y) position from the
02// provided bitmap buffer (must be PROGMEM memory) using the specified
03// foreground color (unset bits are transparent).
04void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
05 const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) {
06 
07  int16_t i, j, byteWidth = (w + 7) / 8;
08  uint8_t byte;
09 
10  for(j=0; j<h; j++) {
11    for(i=0; i<w; i++) {
12      if(i & 7) byte <<= 1;
13      else      byte   = pgm_read_byte(bitmap + j * byteWidth + i / 8);
14      if(byte & 0x80) drawPixel(x+i, y+j, color);
15    }
16  }
17}

и с учётом фона в этой:

01// Draw a 1-bit image (bitmap) at the specified (x,y) position from the
02// provided bitmap buffer (must be PROGMEM memory) using the specified
03// foreground (for set bits) and background (for clear bits) colors.
04void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
05 const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) {
06 
07  int16_t i, j, byteWidth = (w + 7) / 8;
08  uint8_t byte;
09 
10  for(j=0; j<h; j++) {
11    for(i=0; i<w; i++ ) {
12      if(i & 7) byte <<= 1;
13      else      byte   = pgm_read_byte(bitmap + j * byteWidth + i / 8);
14      if(byte & 0x80) drawPixel(x+i, y+j, color);
15      else            drawPixel(x+i, y+j, bg);
16    }
17  }
18}

Ну, а я уже добавил возможность выделять контур изображения и соответственно ещё 2 цвета добавлять.

lilik
Offline
Зарегистрирован: 19.10.2017

Хотя контур может быть и 4 цветным.

Argus19
Offline
Зарегистрирован: 08.05.2022

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

 

lilik
Offline
Зарегистрирован: 19.10.2017

:)

 Я использовал Ардуино для раскраски ч\б изображений и вывода их на эранчик. А как можно использовать совместно ПК, ардуино и st7735 я не думал.

Argus19
Offline
Зарегистрирован: 08.05.2022

Можно подумать о взаимодействии ПК с ардуино. Например, ардуино посылает запрос картинки и программа на ПК его отправляет. Я это делал для OLED дисплея. 

Мне ещё не пришёл этот дисплейчик, поэтому, пока поиграть с ним не могу. Прикрепите ваш скетч, который работает с моей программой. Поиграю, когда дойдёт посылка.

 

lilik
Offline
Зарегистрирован: 19.10.2017

Argus19 пишет:

Можно подумать о взаимодействии ПК с ардуино...  Прикрепите ваш скетч, который работает с моей программой... 

01#include <Adafruit_GFX.h>    // Core graphics library
02#include <Adafruit_ST7735.h> // Hardware-specific library
03#include <SPI.h>
04#define TFT_CS     10
05#define TFT_RST    9 
06#define TFT_DC     8
07 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);
08 void setup ()
09{
10  // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
11 tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
12 tft.fillScreen(ST7735_BLACK);
13 tft.setRotation(0);//ориентация экрана
14 Serial.begin(115200);
15tft.setAddrWindow(0,0,127,159);//
16}
17void loop()
18{
19 
20CheckSerial();
21 
22}
23///////////////////////////////////////////////////////////////////////////////////////////////////////
24 
25void  CheckSerial()
26{
27 //////////////////////////////////////////////////////////////////////////////
28  SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
29  digitalWrite(TFT_DC, HIGH);
30  digitalWrite(TFT_CS, LOW);
31 while (Serial.available())//считываем данные пока они поступают
32  {
33    SPI.transfer((byte)Serial.read());
34  }
35 digitalWrite(TFT_CS, HIGH);
36  SPI.endTransaction();
37}
38////////////////////////////////////////////////////////////////////////////////

Самый короткий скетч из экспериментальных. Кстати как вариант приложений для ПК - приложение в котором мы что нибудь рисуем на  виртуальном экране, а потом отсылаем нарисованное в реальный экран.

Argus19
Offline
Зарегистрирован: 08.05.2022

Спасибо.

lilik пишет:

[Кстати как вариант приложений для ПК - приложение в котором мы что нибудь рисуем на  виртуальном экране, а потом отсылаем нарисованное в реальный экран.

 Не очень понял. Что подразумевается под виртуальным и реальным экранами?

lilik
Offline
Зарегистрирован: 19.10.2017

Типа такого известного концепта-бейджа:

Сначала рисуем-пишем на виртуальном бейдже, потом выводим на реальный по шнуру, но интереснее вариант с блютуз модулем :)

Хотя, кому как.

lilik
Offline
Зарегистрирован: 19.10.2017

Ещё вариант использования раскрашек - создание графических меню.

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:

1#include <Adafruit_GFX.h>    // Core graphics library
2#include <Adafruit_ST7735.h> // Hardware-specific library
3#include <SPI.h>

Самый короткий скетч из экспериментальных.

Я скачал библиотеку отсюда:

https://github.com/adafruit/Adafruit-ST7735-Library

При компиляции требует библиотеку: Adafruit_SPITFT.h>

 С какого ресурса вы скачали вашу версию библиотеки?

 

lilik
Offline
Зарегистрирован: 19.10.2017

https://disk.yandex.ru/d/6KNzHer4pSnOkg

https://disk.yandex.ru/d/yh6ZMsAZbWon4w

Я не могу вспомнить, выше ссылки на архивы библиотек которые у меня стоят.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Argus19 пишет:

lilik пишет:

1#include <Adafruit_GFX.h>    // Core graphics library
2#include <Adafruit_ST7735.h> // Hardware-specific library
3#include <SPI.h>

Самый короткий скетч из экспериментальных.

Я скачал библиотеку отсюда:

https://github.com/adafruit/Adafruit-ST7735-Library

При компиляции требует библиотеку: Adafruit_SPITFT.h>

 С какого ресурса вы скачали вашу версию библиотеки?

 

там жеж

Argus19
Offline
Зарегистрирован: 08.05.2022

Спасибо.

 

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:

  // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT

1<span style="font-family:Verdana, Geneva, Arial, sans-serif;font-size:12px;"></span>

 В коде библиотек написано, что они работают и с 1.44" и с 1.88", на я этой фразы не нашёл. Где вы почерпнули это выражение?

Мне пришёл дисплей 1.44". Подозреваю, его нужно инициализировать иначе. 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Argus19 пишет:

lilik пишет:

  // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT

1<span style="font-family:Verdana, Geneva, Arial, sans-serif;font-size:12px;"></span>

 В коде библиотек написано, что они работают и с 1.44" и с 1.88", на я этой фразы не нашёл. Где вы почерпнули это выражение?

Мне пришёл дисплей 1.44". Подозреваю, его нужно инициализировать иначе. 

они разные бывают, если будет в зеркалке, посмотрю, как я инициализировал

Argus19
Offline
Зарегистрирован: 08.05.2022

ua6em пишет:

они разные бывают, если будет в зеркалке, посмотрю, как я инициализировал

 У меня слева и внизу остаются чёрные полосы. Изображение не повёрнуто. Заливал скетч и пробовал рано утром. Ещё не всё доделано. Вечером доколдую с программой на ПК. Сделаю под два размера дисплея:128Х160 и 128Х128. В принципе, можно добавить размеры под 2.4" И 3.5". компу всё-равно, какой длины массив байт передавать.

 

lilik
Offline
Зарегистрирован: 19.10.2017

Argus19 пишет:

lilik пишет:

  // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT

1<span style="font-family:Verdana, Geneva, Arial, sans-serif;font-size:12px;"></span>

 В коде библиотек написано, что они работают и с 1.44" и с 1.88", на я этой фразы не нашёл. Где вы почерпнули это выражение?

Мне пришёл дисплей 1.44". Подозреваю, его нужно инициализировать иначе. 

 

В базовом примере библиотеки скорее всего. Вот он.

Мои дисплеи, вот они, слева направо:

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Цитата:

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

я в библиотеке функцию инициализации дисплея новую написал, пока не увидел, что можно было обойтись стандартными )))

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:

Мои дисплеи, вот они, слева направо:

Спасибо всем за подсказки. Мне пришёл дисплей 1.44". Инициализация:

 

lilik
Offline
Зарегистрирован: 19.10.2017

Симпатично.

Я тоже чуть изменил вариант раскрашки в меню - теперь трансформируется сам рисунок при переборе пунктов.

Argus19
Offline
Зарегистрирован: 08.05.2022

Интересно.

Нет желания попробовать дисплей побольше?

lilik
Offline
Зарегистрирован: 19.10.2017

Argus19 пишет:

Интересно.

Нет желания попробовать дисплей побольше?

Не знаю, ближайший побольше в пикселях -  240*240 на st7789. Может его закажу.

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:

Не знаю, ближайший побольше в пикселях -  240*240 на st7789. Может его закажу.

 Сама идея с графическим меню интересна. Подразумевает появление других заставок и работы уже на их фоне. Но графика жрёт ресурсы. Профессиональные системы состоят из контроллера и панели управления со связью между ними. Контроллер - тупа железяка, а панель управления, например, Siemens с установленной на неё Windiws CE, выводит кнопки, графики и пр. + тачскрин.

 Вспомнились фоторамки. Интересно, что у них внутри и нельзя ли их перепрограммировать под свои нужды?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ближайший с тачскрином ILI9341 320x240

Argus19
Offline
Зарегистрирован: 08.05.2022

ua6em пишет:

ближайший с тачскрином ILI9341 320x240

Это всего лишь дисплей. Это не панель управления. Т.е. к нему нужно что-то,  типа, ESP32, чтобы сделать его полноценной панелью управления, связанной с ардуиной.

 

lilik
Offline
Зарегистрирован: 19.10.2017

ua6em пишет:

ближайший с тачскрином ILI9341 320x240

Тут придётся хранить ни ч\б картинки с экран размером, а отдельные картинки-иконки - что потребует других способов раскрашивания изображений, например, для совмещения фона экрана и фона картинки. 

lilik
Offline
Зарегистрирован: 19.10.2017

Argus19 пишет:

ua6em пишет:

ближайший с тачскрином ILI9341 320x240

Это всего лишь дисплей. Это не панель управления. Т.е. к нему нужно что-то,  типа, ESP32, чтобы сделать его полноценной панелью управления, связанной с ардуиной.

 

Nextion?

Argus19
Offline
Зарегистрирован: 08.05.2022

lilik пишет:
]

Это всего лишь дисплей. Это не панель управления. Т.е. к нему нужно что-то,  типа, ESP32, чтобы сделать его полноценной панелью управления, связанной с ардуиной.

Nextion?

 Ого! Отличный вариант! Надо почитать повнимательнее. У него есть UART, значит, можно организовать двунаправленную связь с ардуиной. На Nextion картинки и графики, на ардуинке датчики и исполнительные устройства. 

 Такой пойдёт?

https://aliexpress.ru/item/1005003540731943.html?spm=.list.36.5e1e722cCz...

 

lilik
Offline
Зарегистрирован: 19.10.2017

Argus19 пишет:

 

 Такой пойдёт?

https://aliexpress.ru/item/1005003540731943.html?spm=.list.36.5e1e722cCz...

 

Я не покупал и подобным не пользовался. Для этих экранов своё ПО для их программирования. Как я понял есть у китайцев варианты экранов для своего ПО и для буржуйского (важно не перепутать при заказе ). Тут на форуме, наверное, есть фанатики Nextion. Может прояснят детали.

Argus19
Offline
Зарегистрирован: 08.05.2022

Спросил продавца. Он написал, что подойдёт стандартное ПО.

Я заказал. Придёт - посмотрим.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

lilik пишет:

Argus19 пишет:

 

 Такой пойдёт?

https://aliexpress.ru/item/1005003540731943.html?spm=.list.36.5e1e722cCz...

 

Я не покупал и подобным не пользовался. Для этих экранов своё ПО для их программирования. Как я понял есть у китайцев варианты экранов для своего ПО и для буржуйского (важно не перепутать при заказе ). Тут на форуме, наверное, есть фанатики Nextion. Может прояснят детали.

встречал ILI9341 с тачскрином в который загружаются картинки, с пользователем общаются по Serial на 115200, и какое то ПО под него было

lilik
Offline
Зарегистрирован: 19.10.2017

Вот обширная тема фанатов аналога Nextion (DWIN дисплеи). Посмотрел цены, не очень они ниже :)

https://arduino.ru/forum/apparatnye-voprosy/dwin-dgus-displei-hmi