Вы правильно понимаете стратегию, но двигаться в этом направлении я не стал, старожилы форума забраковали попиксельный подход из-за крайне низкой скорости вывода (нужно передавать координаты каждого пикселя, а не целой области ).
А так авторы библиотеки реализовали подход в этой функции для одноцветного изображения:
// Draw a 1-bit image (bitmap) at the specified (x,y) position from the
// provided bitmap buffer (must be PROGMEM memory) using the specified
// foreground color (unset bits are transparent).
void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color) {
int16_t i, j, byteWidth = (w + 7) / 8;
uint8_t byte;
for(j=0; j<h; j++) {
for(i=0; i<w; i++) {
if(i & 7) byte <<= 1;
else byte = pgm_read_byte(bitmap + j * byteWidth + i / 8);
if(byte & 0x80) drawPixel(x+i, y+j, color);
}
}
}
и с учётом фона в этой:
// Draw a 1-bit image (bitmap) at the specified (x,y) position from the
// provided bitmap buffer (must be PROGMEM memory) using the specified
// foreground (for set bits) and background (for clear bits) colors.
void Adafruit_GFX::drawBitmap(int16_t x, int16_t y,
const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg) {
int16_t i, j, byteWidth = (w + 7) / 8;
uint8_t byte;
for(j=0; j<h; j++) {
for(i=0; i<w; i++ ) {
if(i & 7) byte <<= 1;
else byte = pgm_read_byte(bitmap + j * byteWidth + i / 8);
if(byte & 0x80) drawPixel(x+i, y+j, color);
else drawPixel(x+i, y+j, bg);
}
}
}
Ну, а я уже добавил возможность выделять контур изображения и соответственно ещё 2 цвета добавлять.
Вопрос в том, как использовать ардуино. Изображения занимают очень много места. При автономной работе их можно подгружать из флэшки или внешней памяти. При совместной работе с ПК, можно передавать данные в ПК и получать от него изображения.
Можно подумать о взаимодействии ПК с ардуино. Например, ардуино посылает запрос картинки и программа на ПК его отправляет. Я это делал для OLED дисплея.
Мне ещё не пришёл этот дисплейчик, поэтому, пока поиграть с ним не могу. Прикрепите ваш скетч, который работает с моей программой. Поиграю, когда дойдёт посылка.
Можно подумать о взаимодействии ПК с ардуино... Прикрепите ваш скетч, который работает с моей программой...
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void setup ()
{
// Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
tft.fillScreen(ST7735_BLACK);
tft.setRotation(0);//ориентация экрана
Serial.begin(115200);
tft.setAddrWindow(0,0,127,159);//
}
void loop()
{
CheckSerial();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void CheckSerial()
{
//////////////////////////////////////////////////////////////////////////////
SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
digitalWrite(TFT_DC, HIGH);
digitalWrite(TFT_CS, LOW);
while (Serial.available())//считываем данные пока они поступают
{
SPI.transfer((byte)Serial.read());
}
digitalWrite(TFT_CS, HIGH);
SPI.endTransaction();
}
////////////////////////////////////////////////////////////////////////////////
Самый короткий скетч из экспериментальных. Кстати как вариант приложений для ПК - приложение в котором мы что нибудь рисуем на виртуальном экране, а потом отсылаем нарисованное в реальный экран.
[Кстати как вариант приложений для ПК - приложение в котором мы что нибудь рисуем на виртуальном экране, а потом отсылаем нарисованное в реальный экран.
Не очень понял. Что подразумевается под виртуальным и реальным экранами?
они разные бывают, если будет в зеркалке, посмотрю, как я инициализировал
У меня слева и внизу остаются чёрные полосы. Изображение не повёрнуто. Заливал скетч и пробовал рано утром. Ещё не всё доделано. Вечером доколдую с программой на ПК. Сделаю под два размера дисплея:128Х160 и 128Х128. В принципе, можно добавить размеры под 2.4" И 3.5". компу всё-равно, какой длины массив байт передавать.
// Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
В коде библиотек написано, что они работают и с 1.44" и с 1.88", на я этой фразы не нашёл. Где вы почерпнули это выражение?
Мне пришёл дисплей 1.44". Подозреваю, его нужно инициализировать иначе.
В базовом примере библиотеки скорее всего. Вот он.
/***************************************************
This is a library for the Adafruit 1.8" SPI display.
This library 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> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>
// For the breakout, you can use any 2 or 3 pins
// These pins will also work for the 1.8" TFT shield
#define TFT_CS 10
#define TFT_RST 9 // you can also connect this to the Arduino reset
// in which case, set this #define pin to 0!
#define TFT_DC 8
// Option 1 (recommended): must use the hardware SPI pins
// (for UNO thats sclk = 13 and sid = 11) and pin 10 must be
// an output. This is much faster - also required if you want
// to use the microSD card (see the image drawing example)
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
// Option 2: use any pins but a little slower!
#define TFT_SCLK 13 // set these to be whatever pins you like!
#define TFT_MOSI 11 // set these to be whatever pins you like!
//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("Hello! ST7735 TFT Test");
// Use this initializer if you're using a 1.8" TFT
tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
// Use this initializer (uncomment) if you're using a 1.44" TFT
//tft.initR(INITR_144GREENTAB); // initialize a ST7735S chip, black tab
Serial.println("Initialized");
uint16_t time = millis();
tft.fillScreen(ST7735_BLACK);
time = millis() - time;
Serial.println(time, DEC);
delay(500);
// large block of text
tft.fillScreen(ST7735_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. ", ST7735_WHITE);
delay(1000);
// tft print function!
tftPrintTest();
delay(4000);
// a single pixel
tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN);
delay(500);
// line draw test
testlines(ST7735_YELLOW);
delay(500);
// optimized lines
testfastlines(ST7735_RED, ST7735_BLUE);
delay(500);
testdrawrects(ST7735_GREEN);
delay(500);
testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
delay(500);
tft.fillScreen(ST7735_BLACK);
testfillcircles(10, ST7735_BLUE);
testdrawcircles(10, ST7735_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(ST7735_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(0, 0, x, tft.height()-1, color);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(0, 0, tft.width()-1, y, color);
}
tft.fillScreen(ST7735_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(tft.width()-1, 0, 0, y, color);
}
tft.fillScreen(ST7735_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(0, tft.height()-1, x, 0, color);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
}
tft.fillScreen(ST7735_BLACK);
for (int16_t x=0; x < tft.width(); x+=6) {
tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
}
for (int16_t y=0; y < tft.height(); y+=6) {
tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
}
}
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(ST7735_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(ST7735_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(ST7735_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(ST7735_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(ST7735_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(ST7735_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(ST7735_RED);
tft.setTextSize(1);
tft.println("Hello World!");
tft.setTextColor(ST7735_YELLOW);
tft.setTextSize(2);
tft.println("Hello World!");
tft.setTextColor(ST7735_GREEN);
tft.setTextSize(3);
tft.println("Hello World!");
tft.setTextColor(ST7735_BLUE);
tft.setTextSize(4);
tft.print(1234.567);
delay(1500);
tft.setCursor(0, 0);
tft.fillScreen(ST7735_BLACK);
tft.setTextColor(ST7735_WHITE);
tft.setTextSize(0);
tft.println("Hello World!");
tft.setTextSize(1);
tft.setTextColor(ST7735_GREEN);
tft.print(p, 6);
tft.println(" Want pi?");
tft.println(" ");
tft.print(8675309, HEX); // print 8,675,309 out in HEX!
tft.println(" Print HEX!");
tft.println(" ");
tft.setTextColor(ST7735_WHITE);
tft.println("Sketch has been");
tft.println("running for: ");
tft.setTextColor(ST7735_MAGENTA);
tft.print(millis() / 1000);
tft.setTextColor(ST7735_WHITE);
tft.print(" seconds.");
}
void mediabuttons() {
// play
tft.fillScreen(ST7735_BLACK);
tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);
delay(500);
// pause
tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE);
tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN);
tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN);
delay(500);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE);
delay(50);
// pause color
tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED);
tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN);
}
Мои дисплеи, вот они, слева направо:
Внутри библиотеки, что я ссылку давал, там есть подсказки где какая строка какой дисплей инициализирует. Я это увидел гораздо позже, когда уже заработало методом тыка.
Внутри библиотеки, что я ссылку давал, там есть подсказки где какая строка какой дисплей инициализирует. Я это увидел гораздо позже, когда уже заработало методом тыка.
я в библиотеке функцию инициализации дисплея новую написал, пока не увидел, что можно было обойтись стандартными )))
Спасибо всем за подсказки. Мне пришёл дисплей 1.44". Инициализация:
// Use this initializer (uncomment) if you're using a 1.44" TFT
//tft.initR(INITR_144GREENTAB); // initialize a ST7735S chip, black tab
отработала отлично.
Подшаманил программу получилось так:
Не знаю, ближайший побольше в пикселях - 240*240 на st7789. Может его закажу.
Сама идея с графическим меню интересна. Подразумевает появление других заставок и работы уже на их фоне. Но графика жрёт ресурсы. Профессиональные системы состоят из контроллера и панели управления со связью между ними. Контроллер - тупа железяка, а панель управления, например, Siemens с установленной на неё Windiws CE, выводит кнопки, графики и пр. + тачскрин.
Вспомнились фоторамки. Интересно, что у них внутри и нельзя ли их перепрограммировать под свои нужды?
Это всего лишь дисплей. Это не панель управления. Т.е. к нему нужно что-то, типа, ESP32, чтобы сделать его полноценной панелью управления, связанной с ардуиной.
Тут придётся хранить ни ч\б картинки с экран размером, а отдельные картинки-иконки - что потребует других способов раскрашивания изображений, например, для совмещения фона экрана и фона картинки.
Это всего лишь дисплей. Это не панель управления. Т.е. к нему нужно что-то, типа, ESP32, чтобы сделать его полноценной панелью управления, связанной с ардуиной.
Это всего лишь дисплей. Это не панель управления. Т.е. к нему нужно что-то, типа, ESP32, чтобы сделать его полноценной панелью управления, связанной с ардуиной.
Nextion?
Ого! Отличный вариант! Надо почитать повнимательнее. У него есть UART, значит, можно организовать двунаправленную связь с ардуиной. На Nextion картинки и графики, на ардуинке датчики и исполнительные устройства.
Я не покупал и подобным не пользовался. Для этих экранов своё ПО для их программирования. Как я понял есть у китайцев варианты экранов для своего ПО и для буржуйского (важно не перепутать при заказе ). Тут на форуме, наверное, есть фанатики Nextion. Может прояснят детали.
Я не покупал и подобным не пользовался. Для этих экранов своё ПО для их программирования. Как я понял есть у китайцев варианты экранов для своего ПО и для буржуйского (важно не перепутать при заказе ). Тут на форуме, наверное, есть фанатики Nextion. Может прояснят детали.
встречал ILI9341 с тачскрином в который загружаются картинки, с пользователем общаются по Serial на 115200, и какое то ПО под него было
При попытке открыть экзешник (два раза левой мышкой :).
Я проверил на двух компах с Windows 10. Программа работает.
Да, может в этом дело, у меня версия 8.1.
Да, может в этом дело, у меня версия 8.1.
W7x64 без проблем.
Да, может в этом дело, у меня версия 8.1.
Вы её случаем не из архива запускаете?
Дело может быть в крупной иконке. Сделал маленькую:
https://transfiles.ru/ac952
Да, может в этом дело, у меня версия 8.1.
Вы её случаем не из архива запускаете?
Нет, разархивировал.
Дело может быть в крупной иконке. Сделал маленькую:
https://transfiles.ru/ac952
Да, теперь открылось, попробую использовать.
Да, теперь открылось, попробую использовать.
Программа передаёт в СОМ-порт байтовый массив. Не строку.
Да, теперь открылось, попробую использовать.
Программа передаёт в СОМ-порт байтовый массив. Не строку.
А я думаю, чего не идёт картинка :)
Перегрузил скетч, пошло дело, но с цветами явно не то. Кролик вечерний получается.
Кролик вечерний получается.
вечерний - это под тёмным (грибным) соусом? )))
Перегрузил скетч, пошло дело, но с цветами явно не то. Кролик вечерний получается.
Перегрузил, надо понимать - переписал под приём байтового массива без скобок, запятых и символа конца строки?
Попробую написать отдельную программу для проверки перекодировки. Со временем не очень.
Перегрузил, надо понимать - переписал под приём байтового массива без скобок, запятых и символа конца строки?
Да, только чего тут переписывать - просто лишнее убирать.
С цветами из 888 в 565
Есть в библиотеке под экранчик такая функция в одну строчку:
Тут она не поможет?
И второй момент, как меня уже поправили в версии со строкой-массивом, байты должны идти не 1,2 - 3,4 - 5,6... а 2,1 - 4,3 - 6,5...
И второй момент, как меня уже поправили в версии со строкой-массивом, байты должны идти не 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
Да, теперь всё работает в правильных цветах.
В "пнж формате" ещё не пробовал.
В "пнж формате" ещё не пробовал.
формат .png подразумевает прозрачность, но на таком дисплее сие не возможно. Поэтому, будет просто не прозрачная картинка.
Можно добавить формат .webp, но это только для Win10
В любом случае, изображение становится обычным растровым и оно передаётся в ардуинку.
В экранчике можно управлять каждым пикселем индивидуально, при желании можно и без фона передавать картинку, но зачем это надо?
В экранчике можно управлять каждым пикселем индивидуально, при желании можно и без фона передавать картинку, но зачем это надо?
Как я понимаю, можно накладывать изображения.
Приведите, пожалуйста ваш новый скетч.
Вы правильно понимаете стратегию, но двигаться в этом направлении я не стал, старожилы форума забраковали попиксельный подход из-за крайне низкой скорости вывода (нужно передавать координаты каждого пикселя, а не целой области ).
А так авторы библиотеки реализовали подход в этой функции для одноцветного изображения:
и с учётом фона в этой:
Ну, а я уже добавил возможность выделять контур изображения и соответственно ещё 2 цвета добавлять.
Хотя контур может быть и 4 цветным.
Вопрос в том, как использовать ардуино. Изображения занимают очень много места. При автономной работе их можно подгружать из флэшки или внешней памяти. При совместной работе с ПК, можно передавать данные в ПК и получать от него изображения.
:)
Я использовал Ардуино для раскраски ч\б изображений и вывода их на эранчик. А как можно использовать совместно ПК, ардуино и st7735 я не думал.
Можно подумать о взаимодействии ПК с ардуино. Например, ардуино посылает запрос картинки и программа на ПК его отправляет. Я это делал для OLED дисплея.
Мне ещё не пришёл этот дисплейчик, поэтому, пока поиграть с ним не могу. Прикрепите ваш скетч, который работает с моей программой. Поиграю, когда дойдёт посылка.
Можно подумать о взаимодействии ПК с ардуино... Прикрепите ваш скетч, который работает с моей программой...
Самый короткий скетч из экспериментальных. Кстати как вариант приложений для ПК - приложение в котором мы что нибудь рисуем на виртуальном экране, а потом отсылаем нарисованное в реальный экран.
Спасибо.
[Кстати как вариант приложений для ПК - приложение в котором мы что нибудь рисуем на виртуальном экране, а потом отсылаем нарисованное в реальный экран.
Не очень понял. Что подразумевается под виртуальным и реальным экранами?
Типа такого известного концепта-бейджа:
Сначала рисуем-пишем на виртуальном бейдже, потом выводим на реальный по шнуру, но интереснее вариант с блютуз модулем :)
Хотя, кому как.
Ещё вариант использования раскрашек - создание графических меню.
Самый короткий скетч из экспериментальных.
Я скачал библиотеку отсюда:
https://github.com/adafruit/Adafruit-ST7735-Library
При компиляции требует библиотеку: Adafruit_SPITFT.h>
С какого ресурса вы скачали вашу версию библиотеки?
https://disk.yandex.ru/d/6KNzHer4pSnOkg
https://disk.yandex.ru/d/yh6ZMsAZbWon4w
Я не могу вспомнить, выше ссылки на архивы библиотек которые у меня стоят.
Самый короткий скетч из экспериментальных.
Я скачал библиотеку отсюда:
https://github.com/adafruit/Adafruit-ST7735-Library
При компиляции требует библиотеку: Adafruit_SPITFT.h>
С какого ресурса вы скачали вашу версию библиотеки?
там жеж
Спасибо.
// Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
В коде библиотек написано, что они работают и с 1.44" и с 1.88", на я этой фразы не нашёл. Где вы почерпнули это выражение?
Мне пришёл дисплей 1.44". Подозреваю, его нужно инициализировать иначе.
// Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
В коде библиотек написано, что они работают и с 1.44" и с 1.88", на я этой фразы не нашёл. Где вы почерпнули это выражение?
Мне пришёл дисплей 1.44". Подозреваю, его нужно инициализировать иначе.
они разные бывают, если будет в зеркалке, посмотрю, как я инициализировал
они разные бывают, если будет в зеркалке, посмотрю, как я инициализировал
У меня слева и внизу остаются чёрные полосы. Изображение не повёрнуто. Заливал скетч и пробовал рано утром. Ещё не всё доделано. Вечером доколдую с программой на ПК. Сделаю под два размера дисплея:128Х160 и 128Х128. В принципе, можно добавить размеры под 2.4" И 3.5". компу всё-равно, какой длины массив байт передавать.
// Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
В коде библиотек написано, что они работают и с 1.44" и с 1.88", на я этой фразы не нашёл. Где вы почерпнули это выражение?
Мне пришёл дисплей 1.44". Подозреваю, его нужно инициализировать иначе.
В базовом примере библиотеки скорее всего. Вот он.
Мои дисплеи, вот они, слева направо:
Внутри библиотеки, что я ссылку давал, там есть подсказки где какая строка какой дисплей инициализирует. Я это увидел гораздо позже, когда уже заработало методом тыка.
я в библиотеке функцию инициализации дисплея новую написал, пока не увидел, что можно было обойтись стандартными )))
Мои дисплеи, вот они, слева направо:
Спасибо всем за подсказки. Мне пришёл дисплей 1.44". Инициализация:
Симпатично.
Я тоже чуть изменил вариант раскрашки в меню - теперь трансформируется сам рисунок при переборе пунктов.
Интересно.
Нет желания попробовать дисплей побольше?
Интересно.
Нет желания попробовать дисплей побольше?
Не знаю, ближайший побольше в пикселях - 240*240 на st7789. Может его закажу.
Не знаю, ближайший побольше в пикселях - 240*240 на st7789. Может его закажу.
Сама идея с графическим меню интересна. Подразумевает появление других заставок и работы уже на их фоне. Но графика жрёт ресурсы. Профессиональные системы состоят из контроллера и панели управления со связью между ними. Контроллер - тупа железяка, а панель управления, например, Siemens с установленной на неё Windiws CE, выводит кнопки, графики и пр. + тачскрин.
Вспомнились фоторамки. Интересно, что у них внутри и нельзя ли их перепрограммировать под свои нужды?
ближайший с тачскрином ILI9341 320x240
ближайший с тачскрином ILI9341 320x240
Это всего лишь дисплей. Это не панель управления. Т.е. к нему нужно что-то, типа, ESP32, чтобы сделать его полноценной панелью управления, связанной с ардуиной.
ближайший с тачскрином ILI9341 320x240
Тут придётся хранить ни ч\б картинки с экран размером, а отдельные картинки-иконки - что потребует других способов раскрашивания изображений, например, для совмещения фона экрана и фона картинки.
ближайший с тачскрином ILI9341 320x240
Это всего лишь дисплей. Это не панель управления. Т.е. к нему нужно что-то, типа, ESP32, чтобы сделать его полноценной панелью управления, связанной с ардуиной.
Nextion?
Это всего лишь дисплей. Это не панель управления. Т.е. к нему нужно что-то, типа, ESP32, чтобы сделать его полноценной панелью управления, связанной с ардуиной.
Nextion?
Ого! Отличный вариант! Надо почитать повнимательнее. У него есть UART, значит, можно организовать двунаправленную связь с ардуиной. На Nextion картинки и графики, на ардуинке датчики и исполнительные устройства.
Такой пойдёт?
https://aliexpress.ru/item/1005003540731943.html?spm=.list.36.5e1e722cCz...
Такой пойдёт?
https://aliexpress.ru/item/1005003540731943.html?spm=.list.36.5e1e722cCz...
Я не покупал и подобным не пользовался. Для этих экранов своё ПО для их программирования. Как я понял есть у китайцев варианты экранов для своего ПО и для буржуйского (важно не перепутать при заказе ). Тут на форуме, наверное, есть фанатики Nextion. Может прояснят детали.
Спросил продавца. Он написал, что подойдёт стандартное ПО.
Я заказал. Придёт - посмотрим.
Такой пойдёт?
https://aliexpress.ru/item/1005003540731943.html?spm=.list.36.5e1e722cCz...
Я не покупал и подобным не пользовался. Для этих экранов своё ПО для их программирования. Как я понял есть у китайцев варианты экранов для своего ПО и для буржуйского (важно не перепутать при заказе ). Тут на форуме, наверное, есть фанатики Nextion. Может прояснят детали.
встречал ILI9341 с тачскрином в который загружаются картинки, с пользователем общаются по Serial на 115200, и какое то ПО под него было
Вот обширная тема фанатов аналога Nextion (DWIN дисплеи). Посмотрел цены, не очень они ниже :)
https://arduino.ru/forum/apparatnye-voprosy/dwin-dgus-displei-hmi