Вы правильно понимаете стратегию, но двигаться в этом направлении я не стал, старожилы форума забраковали попиксельный подход из-за крайне низкой скорости вывода (нужно передавать координаты каждого пикселя, а не целой области ).
А так авторы библиотеки реализовали подход в этой функции для одноцветного изображения:
Вопрос в том, как использовать ардуино. Изображения занимают очень много места. При автономной работе их можно подгружать из флэшки или внешней памяти. При совместной работе с ПК, можно передавать данные в ПК и получать от него изображения.
Можно подумать о взаимодействии ПК с ардуино. Например, ардуино посылает запрос картинки и программа на ПК его отправляет. Я это делал для OLED дисплея.
Мне ещё не пришёл этот дисплейчик, поэтому, пока поиграть с ним не могу. Прикрепите ваш скетч, который работает с моей программой. Поиграю, когда дойдёт посылка.
Самый короткий скетч из экспериментальных. Кстати как вариант приложений для ПК - приложение в котором мы что нибудь рисуем на виртуальном экране, а потом отсылаем нарисованное в реальный экран.
[Кстати как вариант приложений для ПК - приложение в котором мы что нибудь рисуем на виртуальном экране, а потом отсылаем нарисованное в реальный экран.
Не очень понял. Что подразумевается под виртуальным и реальным экранами?
они разные бывают, если будет в зеркалке, посмотрю, как я инициализировал
У меня слева и внизу остаются чёрные полосы. Изображение не повёрнуто. Заливал скетч и пробовал рано утром. Ещё не всё доделано. Вечером доколдую с программой на ПК. Сделаю под два размера дисплея:128Х160 и 128Х128. В принципе, можно добавить размеры под 2.4" И 3.5". компу всё-равно, какой длины массив байт передавать.
// Use this initializer if you're using a 1.8" TFT
055
tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
056
057
// Use this initializer (uncomment) if you're using a 1.44" TFT
058
//tft.initR(INITR_144GREENTAB); // initialize a ST7735S chip, black tab
059
060
Serial.println("Initialized");
061
062
uint16_t time = millis();
063
tft.fillScreen(ST7735_BLACK);
064
time = millis() - time;
065
066
Serial.println(time, DEC);
067
delay(500);
068
069
// large block of text
070
tft.fillScreen(ST7735_BLACK);
071
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);
Внутри библиотеки, что я ссылку давал, там есть подсказки где какая строка какой дисплей инициализирует. Я это увидел гораздо позже, когда уже заработало методом тыка.
Внутри библиотеки, что я ссылку давал, там есть подсказки где какая строка какой дисплей инициализирует. Я это увидел гораздо позже, когда уже заработало методом тыка.
я в библиотеке функцию инициализации дисплея новую написал, пока не увидел, что можно было обойтись стандартными )))
Не знаю, ближайший побольше в пикселях - 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
// Pass 8-bit (each) R,G,B, get back 16-bit packed color
2
uint16_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
}
Тут она не поможет?
И второй момент, как меня уже поправили в версии со строкой-массивом, байты должны идти не 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
В любом случае, изображение становится обычным растровым и оно передаётся в ардуинку.
В экранчике можно управлять каждым пикселем индивидуально, при желании можно и без фона передавать картинку, но зачем это надо?
В экранчике можно управлять каждым пикселем индивидуально, при желании можно и без фона передавать картинку, но зачем это надо?
Как я понимаю, можно накладывать изображения.
Приведите, пожалуйста ваш новый скетч.
Вы правильно понимаете стратегию, но двигаться в этом направлении я не стал, старожилы форума забраковали попиксельный подход из-за крайне низкой скорости вывода (нужно передавать координаты каждого пикселя, а не целой области ).
А так авторы библиотеки реализовали подход в этой функции для одноцветного изображения:
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).
04
void
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.
04
void
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 цвета добавлять.
Хотя контур может быть и 4 цветным.
Вопрос в том, как использовать ардуино. Изображения занимают очень много места. При автономной работе их можно подгружать из флэшки или внешней памяти. При совместной работе с ПК, можно передавать данные в ПК и получать от него изображения.
:)
Я использовал Ардуино для раскраски ч\б изображений и вывода их на эранчик. А как можно использовать совместно ПК, ардуино и st7735 я не думал.
Можно подумать о взаимодействии ПК с ардуино. Например, ардуино посылает запрос картинки и программа на ПК его отправляет. Я это делал для OLED дисплея.
Мне ещё не пришёл этот дисплейчик, поэтому, пока поиграть с ним не могу. Прикрепите ваш скетч, который работает с моей программой. Поиграю, когда дойдёт посылка.
Можно подумать о взаимодействии ПК с ардуино... Прикрепите ваш скетч, который работает с моей программой...
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);
15
tft.setAddrWindow(0,0,127,159);
//
16
}
17
void
loop
()
18
{
19
20
CheckSerial();
21
22
}
23
///////////////////////////////////////////////////////////////////////////////////////////////////////
24
25
void
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
////////////////////////////////////////////////////////////////////////////////
Самый короткий скетч из экспериментальных. Кстати как вариант приложений для ПК - приложение в котором мы что нибудь рисуем на виртуальном экране, а потом отсылаем нарисованное в реальный экран.
Спасибо.
[Кстати как вариант приложений для ПК - приложение в котором мы что нибудь рисуем на виртуальном экране, а потом отсылаем нарисованное в реальный экран.
Не очень понял. Что подразумевается под виртуальным и реальным экранами?
Типа такого известного концепта-бейджа:
Сначала рисуем-пишем на виртуальном бейдже, потом выводим на реальный по шнуру, но интереснее вариант с блютуз модулем :)
Хотя, кому как.
Ещё вариант использования раскрашек - создание графических меню.
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>
С какого ресурса вы скачали вашу версию библиотеки?
https://disk.yandex.ru/d/6KNzHer4pSnOkg
https://disk.yandex.ru/d/yh6ZMsAZbWon4w
Я не могу вспомнить, выше ссылки на архивы библиотек которые у меня стоят.
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>
С какого ресурса вы скачали вашу версию библиотеки?
там жеж
Спасибо.
// Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
1
<span style=
"font-family:Verdana, Geneva, Arial, sans-serif;font-size:12px;"
></span>
В коде библиотек написано, что они работают и с 1.44" и с 1.88", на я этой фразы не нашёл. Где вы почерпнули это выражение?
Мне пришёл дисплей 1.44". Подозреваю, его нужно инициализировать иначе.
// Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
1
<span style=
"font-family:Verdana, Geneva, Arial, sans-serif;font-size:12px;"
></span>
В коде библиотек написано, что они работают и с 1.44" и с 1.88", на я этой фразы не нашёл. Где вы почерпнули это выражение?
Мне пришёл дисплей 1.44". Подозреваю, его нужно инициализировать иначе.
они разные бывают, если будет в зеркалке, посмотрю, как я инициализировал
они разные бывают, если будет в зеркалке, посмотрю, как я инициализировал
У меня слева и внизу остаются чёрные полосы. Изображение не повёрнуто. Заливал скетч и пробовал рано утром. Ещё не всё доделано. Вечером доколдую с программой на ПК. Сделаю под два размера дисплея:128Х160 и 128Х128. В принципе, можно добавить размеры под 2.4" И 3.5". компу всё-равно, какой длины массив байт передавать.
// Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
1
<span style=
"font-family:Verdana, Geneva, Arial, sans-serif;font-size:12px;"
></span>
В коде библиотек написано, что они работают и с 1.44" и с 1.88", на я этой фразы не нашёл. Где вы почерпнули это выражение?
Мне пришёл дисплей 1.44". Подозреваю, его нужно инициализировать иначе.
В базовом примере библиотеки скорее всего. Вот он.
001
/***************************************************
002
This is a library for the Adafruit 1.8" SPI display.
003
004
This library works with the Adafruit 1.8" TFT Breakout w/SD card
005
----> <a href="http://www.adafruit.com/products/358" title="http://www.adafruit.com/products/358" rel="nofollow">http://www.adafruit.com/products/358</a>
006
The 1.8" TFT shield
007
----> <a href="https://www.adafruit.com/product/802" title="https://www.adafruit.com/product/802" rel="nofollow">https://www.adafruit.com/product/802</a>
008
The 1.44" TFT breakout
009
----> <a href="https://www.adafruit.com/product/2088" title="https://www.adafruit.com/product/2088" rel="nofollow">https://www.adafruit.com/product/2088</a>
010
as well as Adafruit raw 1.8" TFT display
011
----> <a href="http://www.adafruit.com/products/618" title="http://www.adafruit.com/products/618" rel="nofollow">http://www.adafruit.com/products/618</a>
012
013
Check out the links above for our tutorials and wiring diagrams
014
These displays use SPI to communicate, 4 or 5 pins are required to
015
interface (RST is optional)
016
Adafruit invests time and resources providing this open source code,
017
please support Adafruit and open-source hardware by purchasing
018
products from Adafruit!
019
020
Written by Limor Fried/Ladyada for Adafruit Industries.
021
MIT license, all text above must be included in any redistribution
022
****************************************************/
023
024
#include <Adafruit_GFX.h> // Core graphics library
025
#include <Adafruit_ST7735.h> // Hardware-specific library
026
#include <SPI.h>
027
028
029
// For the breakout, you can use any 2 or 3 pins
030
// These pins will also work for the 1.8" TFT shield
031
#define TFT_CS 10
032
#define TFT_RST 9 // you can also connect this to the Arduino reset
033
// in which case, set this #define pin to 0!
034
#define TFT_DC 8
035
036
// Option 1 (recommended): must use the hardware SPI pins
037
// (for UNO thats sclk = 13 and sid = 11) and pin 10 must be
038
// an output. This is much faster - also required if you want
039
// to use the microSD card (see the image drawing example)
040
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
041
042
// Option 2: use any pins but a little slower!
043
#define TFT_SCLK 13 // set these to be whatever pins you like!
044
#define TFT_MOSI 11 // set these to be whatever pins you like!
045
//Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
046
047
048
float
p = 3.1415926;
049
050
void
setup
(
void
) {
051
Serial
.begin(9600);
052
Serial
.print(
"Hello! ST7735 TFT Test"
);
053
054
// Use this initializer if you're using a 1.8" TFT
055
tft.initR(INITR_BLACKTAB);
// initialize a ST7735S chip, black tab
056
057
// Use this initializer (uncomment) if you're using a 1.44" TFT
058
//tft.initR(INITR_144GREENTAB); // initialize a ST7735S chip, black tab
059
060
Serial
.println(
"Initialized"
);
061
062
uint16_t time = millis();
063
tft.fillScreen(ST7735_BLACK);
064
time = millis() - time;
065
066
Serial
.println(time, DEC);
067
delay(500);
068
069
// large block of text
070
tft.fillScreen(ST7735_BLACK);
071
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);
072
delay(1000);
073
074
// tft print function!
075
tftPrintTest();
076
delay(4000);
077
078
// a single pixel
079
tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN);
080
delay(500);
081
082
// line draw test
083
testlines(ST7735_YELLOW);
084
delay(500);
085
086
// optimized lines
087
testfastlines(ST7735_RED, ST7735_BLUE);
088
delay(500);
089
090
testdrawrects(ST7735_GREEN);
091
delay(500);
092
093
testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
094
delay(500);
095
096
tft.fillScreen(ST7735_BLACK);
097
testfillcircles(10, ST7735_BLUE);
098
testdrawcircles(10, ST7735_WHITE);
099
delay(500);
100
101
testroundrects();
102
delay(500);
103
104
testtriangles();
105
delay(500);
106
107
mediabuttons();
108
delay(500);
109
110
Serial
.println(
"done"
);
111
delay(1000);
112
}
113
114
void
loop
() {
115
tft.invertDisplay(
true
);
116
delay(500);
117
tft.invertDisplay(
false
);
118
delay(500);
119
}
120
121
void
testlines(uint16_t color) {
122
tft.fillScreen(ST7735_BLACK);
123
for
(int16_t x=0; x < tft.width(); x+=6) {
124
tft.drawLine(0, 0, x, tft.height()-1, color);
125
}
126
for
(int16_t y=0; y < tft.height(); y+=6) {
127
tft.drawLine(0, 0, tft.width()-1, y, color);
128
}
129
130
tft.fillScreen(ST7735_BLACK);
131
for
(int16_t x=0; x < tft.width(); x+=6) {
132
tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
133
}
134
for
(int16_t y=0; y < tft.height(); y+=6) {
135
tft.drawLine(tft.width()-1, 0, 0, y, color);
136
}
137
138
tft.fillScreen(ST7735_BLACK);
139
for
(int16_t x=0; x < tft.width(); x+=6) {
140
tft.drawLine(0, tft.height()-1, x, 0, color);
141
}
142
for
(int16_t y=0; y < tft.height(); y+=6) {
143
tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
144
}
145
146
tft.fillScreen(ST7735_BLACK);
147
for
(int16_t x=0; x < tft.width(); x+=6) {
148
tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
149
}
150
for
(int16_t y=0; y < tft.height(); y+=6) {
151
tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
152
}
153
}
154
155
void
testdrawtext(
char
*text, uint16_t color) {
156
tft.setCursor(0, 0);
157
tft.setTextColor(color);
158
tft.setTextWrap(
true
);
159
tft.print(text);
160
}
161
162
void
testfastlines(uint16_t color1, uint16_t color2) {
163
tft.fillScreen(ST7735_BLACK);
164
for
(int16_t y=0; y < tft.height(); y+=5) {
165
tft.drawFastHLine(0, y, tft.width(), color1);
166
}
167
for
(int16_t x=0; x < tft.width(); x+=5) {
168
tft.drawFastVLine(x, 0, tft.height(), color2);
169
}
170
}
171
172
void
testdrawrects(uint16_t color) {
173
tft.fillScreen(ST7735_BLACK);
174
for
(int16_t x=0; x < tft.width(); x+=6) {
175
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
176
}
177
}
178
179
void
testfillrects(uint16_t color1, uint16_t color2) {
180
tft.fillScreen(ST7735_BLACK);
181
for
(int16_t x=tft.width()-1; x > 6; x-=6) {
182
tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
183
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
184
}
185
}
186
187
void
testfillcircles(uint8_t radius, uint16_t color) {
188
for
(int16_t x=radius; x < tft.width(); x+=radius*2) {
189
for
(int16_t y=radius; y < tft.height(); y+=radius*2) {
190
tft.fillCircle(x, y, radius, color);
191
}
192
}
193
}
194
195
void
testdrawcircles(uint8_t radius, uint16_t color) {
196
for
(int16_t x=0; x < tft.width()+radius; x+=radius*2) {
197
for
(int16_t y=0; y < tft.height()+radius; y+=radius*2) {
198
tft.drawCircle(x, y, radius, color);
199
}
200
}
201
}
202
203
void
testtriangles() {
204
tft.fillScreen(ST7735_BLACK);
205
int
color = 0xF800;
206
int
t;
207
int
w = tft.width()/2;
208
int
x = tft.height()-1;
209
int
y = 0;
210
int
z = tft.width();
211
for
(t = 0 ; t <= 15; t++) {
212
tft.drawTriangle(w, y, y, x, z, x, color);
213
x-=4;
214
y+=4;
215
z-=4;
216
color+=100;
217
}
218
}
219
220
void
testroundrects() {
221
tft.fillScreen(ST7735_BLACK);
222
int
color = 100;
223
int
i;
224
int
t;
225
for
(t = 0 ; t <= 4; t+=1) {
226
int
x = 0;
227
int
y = 0;
228
int
w = tft.width()-2;
229
int
h = tft.height()-2;
230
for
(i = 0 ; i <= 16; i+=1) {
231
tft.drawRoundRect(x, y, w, h, 5, color);
232
x+=2;
233
y+=3;
234
w-=4;
235
h-=6;
236
color+=1100;
237
}
238
color+=100;
239
}
240
}
241
242
void
tftPrintTest() {
243
tft.setTextWrap(
false
);
244
tft.fillScreen(ST7735_BLACK);
245
tft.setCursor(0, 30);
246
tft.setTextColor(ST7735_RED);
247
tft.setTextSize(1);
248
tft.println(
"Hello World!"
);
249
tft.setTextColor(ST7735_YELLOW);
250
tft.setTextSize(2);
251
tft.println(
"Hello World!"
);
252
tft.setTextColor(ST7735_GREEN);
253
tft.setTextSize(3);
254
tft.println(
"Hello World!"
);
255
tft.setTextColor(ST7735_BLUE);
256
tft.setTextSize(4);
257
tft.print(1234.567);
258
delay(1500);
259
tft.setCursor(0, 0);
260
tft.fillScreen(ST7735_BLACK);
261
tft.setTextColor(ST7735_WHITE);
262
tft.setTextSize(0);
263
tft.println(
"Hello World!"
);
264
tft.setTextSize(1);
265
tft.setTextColor(ST7735_GREEN);
266
tft.print(p, 6);
267
tft.println(
" Want pi?"
);
268
tft.println(
" "
);
269
tft.print(8675309, HEX);
// print 8,675,309 out in HEX!
270
tft.println(
" Print HEX!"
);
271
tft.println(
" "
);
272
tft.setTextColor(ST7735_WHITE);
273
tft.println(
"Sketch has been"
);
274
tft.println(
"running for: "
);
275
tft.setTextColor(ST7735_MAGENTA);
276
tft.print(millis() / 1000);
277
tft.setTextColor(ST7735_WHITE);
278
tft.print(
" seconds."
);
279
}
280
281
void
mediabuttons() {
282
// play
283
tft.fillScreen(ST7735_BLACK);
284
tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);
285
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);
286
delay(500);
287
// pause
288
tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE);
289
tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN);
290
tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN);
291
delay(500);
292
// play color
293
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE);
294
delay(50);
295
// pause color
296
tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED);
297
tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED);
298
// play color
299
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN);
300
}
Мои дисплеи, вот они, слева направо:
Внутри библиотеки, что я ссылку давал, там есть подсказки где какая строка какой дисплей инициализирует. Я это увидел гораздо позже, когда уже заработало методом тыка.
Внутри библиотеки, что я ссылку давал, там есть подсказки где какая строка какой дисплей инициализирует. Я это увидел гораздо позже, когда уже заработало методом тыка.
я в библиотеке функцию инициализации дисплея новую написал, пока не увидел, что можно было обойтись стандартными )))
Мои дисплеи, вот они, слева направо:
Спасибо всем за подсказки. Мне пришёл дисплей 1.44". Инициализация:
1
// Use this initializer (uncomment) if you're using a 1.44" TFT
2
//tft.initR(INITR_144GREENTAB); // initialize a ST7735S chip, black tab
3
4
отработала отлично.
5
Подшаманил программу получилось так:
Симпатично.
Я тоже чуть изменил вариант раскрашки в меню - теперь трансформируется сам рисунок при переборе пунктов.
01
// РИСУНОК контур 4 цвета - заготовка под меню
02
#include <Adafruit_GFX.h> // Core graphics library
03
#include <Adafruit_ST7735.h> // Hardware-specific library
04
#include <SPI.h>
05
#define TFT_CS 10
06
#define TFT_RST 9
07
#define TFT_DC 8
08
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
09
10
extern
const
unsigned
char
ris_1[];
11
byte
k=0;
//положение курсора
12
13
void
setup
(
void
) {
14
// Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
15
tft.initR(INITR_BLACKTAB);
// initialize a ST7735S chip, black tab
16
tft.fillScreen(ST7735_BLACK);
17
tft.setRotation(0);
//ориентация экрана
18
digitalWrite(2, HIGH);
// включить подтягивающий резистор для кнопки перебора положений курсора
19
otrisovka();
20
}
21
void
loop
() {
22
if
(digitalRead(2)==LOW){k++;
if
(k>8){k=0;}otrisovka();delay(5);}
// если курсор сдвинули кнопкой...
23
}
24
///////////////////////////////////////////////////////////////////
25
void
otrisovka (){
26
drawBitmap_(0,0,ris_1,128,160,COL1,COL2,COL3,COL4);
//фоновый рисунок обновляем по нажатию кнопки
27
}
28
/////////////////////////////////////////////////////////////////////
29
void
drawBitmap_(
int
x,
int
y,
const
uint8_t *bitmap,
int
w,
int
h,
const
uint16_t (*COLor_1)(
int
&I,
int
&J),
const
uint16_t (*COLor_2)(
int
&I,
int
&J),
const
uint16_t (*COLor_3)(
int
&I,
int
&J),
const
uint16_t (*COLor_4)(
int
&I,
int
&J)) {
30
bool
flag=
true
;
//
31
if
(x<0||x+w>128||y<0||y+h>160){
return
;}
32
tft.setAddrWindow(x,y,x+w-1,y+h-1);
33
int
byteWidth = (w + 7) / 8;
34
uint8_t byte_;uint8_t byte_st;
35
36
//
37
SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
38
digitalWrite(TFT_DC, HIGH);
39
digitalWrite(TFT_CS, LOW);
40
for
(
int
j=0; j<h; j++) {
41
for
(
int
i=0; i<w; i++) {
42
if
(i & 7) {byte_ <<= 1;byte_st <<= 1;}
43
else
{ byte_ = pgm_read_byte(bitmap + j * byteWidth + i / 8);
if
(j>0){byte_st = pgm_read_byte(bitmap + (j-1) * byteWidth + i / 8);}}
44
if
(byte_ & 0x80)
45
{
46
if
(flag||!(byte_st & 0x80)){SPI.transfer(COLor_3(i,j)>>8);SPI.transfer(COLor_3(i,j));}
//цвет контура левого верхнего плана
47
else
{ SPI.transfer(COLor_1(i,j)>>8);SPI.transfer(COLor_1(i,j));}
// цвет раскраски внутри контура
48
49
flag=
false
;
50
}
51
else
{
52
if
(!flag||byte_st & 0x80){SPI.transfer(COLor_4(i,j)>>8);SPI.transfer(COLor_4(i,j));}
//цвет контура правого нижнего плана
53
else
{SPI.transfer(COLor_2(i,j)>>8);SPI.transfer(COLor_2(i,j));}
// цвет фона
54
flag=
true
;
55
}
56
}
57
}
58
digitalWrite(TFT_CS, HIGH);
59
SPI.endTransaction();
60
///
61
}
62
/////////////////////////////////////////////////////////////////////
63
//варианты функций - раскрасок
64
const
uint16_t COL1(
int
&i,
int
&j){
// 1 позиция в аргументах - цвет раскраски изображения внутри контура
65
if
(i>5+(k%3)*40&&i<5+(k%3)*40+40&&j>7+(k/3)*52&&j<7+(k/3)*52+40){
return
tft.Color565(0,255,255);}
//условие выделения курсора в меню
66
else
{
return
tft.Color565(150+j/2,30+i,0);}
67
}
68
const
uint16_t COL2(
int
&i,
int
&j){
// 2 позиция в аргументах - цвет фона
69
return
tft.Color565(255-j/2,190-j,0);
70
}
71
const
uint16_t COL3(
int
&i,
int
&j){
// 3 позиция в аргументах - цвет контура левого верхнего плана
72
return
tft.Color565(200,200,200);
73
}
74
const
uint16_t COL4(
int
&i,
int
&j){
// 4 позиция в аргументах - цвет контура правого нижнего плана
75
return
tft.Color565(0,0,0);
76
}
77
/////////////////////////////////////////////////////////////////////
001
#include <avr/pgmspace.h>
002
003
004
const
unsigned
char
ris_1[]PROGMEM = {
005
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
006
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
007
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
008
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
009
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
010
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
011
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
012
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
013
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
014
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
015
0X00,0X00,0X00,0X70,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
016
0X00,0X00,0X01,0XF8,0X00,0X00,0X0F,0XFF,0XFF,0XF0,0X00,0X03,0X00,0X00,0X00,0X00,
017
0X00,0X00,0X03,0X9C,0X00,0X00,0X1F,0XFF,0XFF,0XF8,0X00,0X07,0X00,0X00,0X00,0X00,
018
0X00,0X00,0X07,0X8E,0X00,0X00,0X0F,0XFF,0XFF,0XF0,0X00,0X0E,0X30,0X00,0X00,0X00,
019
0X00,0X00,0X07,0X86,0X00,0X00,0X0F,0XFF,0XFF,0XF0,0X00,0X0C,0X78,0X00,0X00,0X00,
020
0X00,0X00,0X07,0X86,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFC,0X00,0X00,0X00,
021
0X00,0X00,0X06,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFE,0X00,0X00,0X00,
022
0X00,0X07,0XFC,0X03,0XFF,0X00,0X00,0X00,0X04,0XC0,0X00,0X03,0XFF,0X00,0X00,0X00,
023
0X00,0X1F,0XFE,0X07,0XFF,0X80,0X00,0X00,0XFF,0XC0,0X00,0X07,0XFF,0X80,0X00,0X00,
024
0X00,0X18,0X0F,0XDF,0X81,0XC0,0X00,0X1F,0XFF,0XC0,0X00,0X03,0XFF,0XC0,0X00,0X00,
025
0X00,0X18,0X08,0XF9,0X80,0XC0,0X03,0XFF,0XFF,0XC0,0X00,0X00,0XFF,0XE0,0X00,0X00,
026
0X00,0X18,0X09,0XF9,0X80,0XC0,0X03,0XFF,0XF8,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,
027
0X00,0X18,0X0F,0X9F,0X81,0XC0,0X03,0XFF,0X80,0X00,0X00,0X02,0X3F,0XC0,0X00,0X00,
028
0X00,0X1C,0X1E,0X07,0X81,0X80,0X03,0XFF,0XF0,0X00,0X00,0X07,0X1F,0X80,0X00,0X00,
029
0X00,0X0C,0X3C,0X01,0XC3,0X80,0X03,0XFF,0X00,0X00,0X00,0X07,0X9F,0X10,0X00,0X00,
030
0X00,0X06,0X78,0XF1,0XE7,0X00,0X00,0X00,0X03,0XC0,0X00,0X0F,0X8E,0X38,0X00,0X00,
031
0X00,0X07,0XD9,0XF9,0XBE,0X00,0X00,0X00,0X7F,0XC0,0X00,0X0F,0X06,0X7C,0X00,0X00,
032
0X00,0X03,0X99,0XF9,0X9C,0X00,0X00,0X0F,0XFF,0XC0,0X00,0X0F,0X00,0X7C,0X00,0X00,
033
0X00,0X03,0XD9,0XF9,0XBE,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X1E,0X00,0X38,0X00,0X00,
034
0X00,0X07,0X78,0XF9,0XF7,0X00,0X03,0XFF,0XFC,0X00,0X00,0X1E,0X00,0X00,0X00,0X00,
035
0X00,0X0E,0X38,0X61,0XE3,0X80,0X03,0XFF,0X00,0X00,0X00,0X1E,0X00,0X00,0X00,0X00,
036
0X00,0X0C,0X1E,0X03,0X87,0X80,0X03,0XFF,0XF0,0X00,0X00,0X1F,0X00,0X38,0XF0,0X00,
037
0X00,0X18,0X1F,0X0F,0X87,0X80,0X03,0XFF,0X80,0X00,0X00,0X0F,0X00,0X7F,0XF0,0X00,
038
0X00,0X18,0X09,0XFD,0X83,0XC0,0X00,0X70,0X01,0XC0,0X00,0X0F,0X80,0X2F,0XF0,0X00,
039
0X00,0X18,0X08,0XF9,0X80,0XC0,0X00,0X00,0X3F,0XC0,0X00,0X07,0X80,0X0F,0X80,0X00,
040
0X00,0X19,0X8F,0XFF,0X81,0XC0,0X00,0X07,0XFF,0XC0,0X00,0X07,0XE0,0X1F,0X00,0X00,
041
0X00,0X1F,0XFF,0X0F,0XFF,0X80,0X00,0XFF,0XFF,0XC0,0X00,0X03,0XF8,0XFE,0X00,0X00,
042
0X00,0X0F,0XFC,0X03,0XFF,0X80,0X03,0XFF,0XFE,0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,
043
0X00,0X01,0XC6,0X03,0X1C,0X00,0X03,0XFF,0XC0,0X00,0X00,0X00,0XFF,0XF8,0X00,0X00,
044
0X00,0X00,0X06,0X07,0X00,0X00,0X03,0XF8,0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,
045
0X00,0X00,0X07,0X06,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X00,0X00,0X00,
046
0X00,0X00,0X03,0X0E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00,0X00,0X00,
047
0X00,0X00,0X03,0X9C,0X00,0X00,0X0F,0XFF,0XFF,0XF0,0X00,0X00,0X03,0X00,0X00,0X00,
048
0X00,0X00,0X01,0XFC,0X00,0X00,0X0F,0XFF,0XFF,0XF0,0X00,0X00,0X03,0X00,0X00,0X00,
049
0X00,0X00,0X00,0XF0,0X00,0X00,0X0F,0XFF,0XFF,0XF0,0X00,0X01,0XFF,0XFC,0X00,0X00,
050
0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF8,0X00,0X01,0XFF,0XFC,0X00,0X00,
051
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
052
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
053
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
054
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
055
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
056
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
057
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
058
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
059
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
060
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
061
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
062
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
063
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
064
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
065
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
066
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
067
0X00,0X00,0X00,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X40,0X00,0X06,0X00,
068
0X00,0X00,0X01,0XE0,0X00,0X00,0X00,0X0F,0XF0,0X00,0X00,0X01,0XF0,0X00,0X0F,0X00,
069
0X00,0X00,0X03,0XF0,0X03,0X80,0X00,0X3F,0XFC,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,
070
0X00,0X00,0X07,0XF8,0X0F,0X80,0X00,0X7F,0XFE,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,
071
0X00,0X00,0X07,0XF8,0X3E,0X00,0X00,0XFF,0XFF,0X00,0X00,0X01,0XFF,0XFF,0X9F,0X80,
072
0X00,0X00,0X03,0XF0,0X78,0X00,0X01,0XFF,0XFF,0X80,0X00,0X03,0XF0,0X00,0X1F,0X00,
073
0X00,0X00,0X31,0XE0,0X18,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X07,0X60,0X00,0X36,0X00,
074
0X00,0X00,0X78,0XC0,0X0E,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X0E,0X40,0X00,0X66,0X00,
075
0X00,0X00,0XFC,0X00,0X1F,0X00,0X07,0XFF,0XFF,0XE0,0X00,0X1C,0X40,0X00,0XE6,0X00,
076
0X00,0X01,0XFE,0X00,0X7C,0X00,0X07,0XC3,0XC3,0XE0,0X01,0XF8,0X40,0X0F,0XC6,0X00,
077
0X00,0X03,0XFE,0X00,0XF0,0X00,0X07,0X81,0X81,0XE0,0X03,0XF0,0XE0,0X1F,0X86,0X00,
078
0X00,0X07,0XFC,0X00,0XC0,0X00,0X07,0X99,0X99,0XE0,0X03,0XFF,0XFF,0XFF,0X86,0X00,
079
0X00,0X0F,0XF8,0X00,0X00,0X00,0X07,0X99,0X99,0XE0,0X03,0XFF,0XFF,0XFF,0X86,0X00,
080
0X00,0X1F,0XF0,0X00,0X00,0X00,0X07,0X81,0X81,0XE0,0X01,0XF0,0X40,0X1F,0X06,0X00,
081
0X00,0X1F,0XE0,0X00,0X01,0X00,0X07,0XC1,0X83,0XE0,0X00,0XC0,0XC0,0X06,0X06,0X00,
082
0X00,0X3F,0XC0,0X00,0X03,0X80,0X07,0XF9,0X9F,0XE0,0X00,0XC0,0XE0,0X06,0X06,0X00,
083
0X00,0X3F,0X80,0X00,0X07,0XC0,0X03,0XF9,0X9F,0XC0,0X00,0XC0,0XE0,0X06,0X06,0X00,
084
0X00,0X7F,0X00,0X00,0X0F,0XE0,0X03,0XF9,0X9F,0XC0,0X00,0XC0,0XE0,0X06,0X06,0X00,
085
0X00,0X7E,0X00,0X00,0X1F,0XF0,0X01,0XF9,0X9F,0X80,0X00,0XC0,0XE0,0X06,0X06,0X00,
086
0X00,0X7E,0X00,0X00,0X0F,0XE0,0X00,0XF9,0X9F,0X00,0X00,0XC0,0XC0,0X06,0X06,0X00,
087
0X00,0X7E,0X00,0X00,0X47,0XC0,0X00,0XF9,0X9F,0X00,0X00,0XC0,0X40,0X06,0X06,0X00,
088
0X00,0X7E,0X00,0X00,0XE3,0X80,0X00,0X00,0X00,0X00,0X00,0XC0,0XE0,0X06,0X06,0X00,
089
0X00,0X7E,0X00,0X01,0XF1,0X00,0X00,0X00,0X00,0X00,0X00,0XC1,0XF0,0X06,0X0F,0X80,
090
0X00,0X7E,0X00,0X03,0XF8,0X00,0X00,0X7F,0XFE,0X00,0X00,0XC3,0XFF,0XFF,0XFF,0X80,
091
0X00,0X7F,0X00,0X07,0XFC,0X00,0X00,0X7F,0XFE,0X00,0X00,0XC1,0XFF,0XFF,0XFF,0X80,
092
0X00,0X7F,0X00,0X0F,0XF8,0X00,0X00,0X7F,0XFE,0X00,0X00,0XC1,0XF0,0X06,0X1F,0X80,
093
0X00,0X3F,0X80,0X1F,0XF0,0X00,0X00,0X7F,0XFE,0X00,0X00,0XC3,0XE0,0X06,0X3F,0X00,
094
0X00,0X3F,0XC0,0X3F,0XE0,0X00,0X00,0X40,0X02,0X00,0X00,0XC7,0X00,0X06,0X70,0X00,
095
0X00,0X1F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0XCE,0X00,0X06,0XE0,0X00,
096
0X00,0X0F,0XFF,0XFF,0X80,0X00,0X00,0X18,0X18,0X00,0X00,0XD8,0X00,0X06,0XC0,0X00,
097
0X00,0X0F,0XFF,0XFF,0X00,0X00,0X00,0X1F,0XF8,0X00,0X01,0XF0,0X00,0X0F,0X80,0X00,
098
0X00,0X07,0XFF,0XFE,0X00,0X00,0X00,0X1F,0XF8,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,
099
0X00,0X01,0XFF,0XF8,0X00,0X00,0X00,0X1F,0XF8,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,
100
0X00,0X00,0X7F,0XE0,0X00,0X00,0X00,0X0F,0XF0,0X00,0X03,0XF0,0X00,0X1F,0X80,0X00,
101
0X00,0X00,0X06,0X00,0X00,0X00,0X00,0X07,0XE0,0X00,0X01,0XE0,0X00,0X0F,0X00,0X00,
102
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
103
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
104
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
105
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
106
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
107
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
108
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
109
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
110
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
111
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
112
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
113
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
114
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
115
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
116
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
117
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
118
0X00,0X00,0X00,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
119
0X00,0X00,0X01,0XFC,0X00,0X00,0X00,0X00,0X00,0X04,0X00,0X00,0X00,0X07,0X80,0X00,
120
0X00,0X00,0X03,0X8E,0X00,0X00,0X00,0X00,0X00,0X0E,0X00,0X00,0X00,0X07,0X80,0X00,
121
0X00,0X00,0X07,0X06,0X00,0X00,0X00,0X00,0X00,0X1F,0X00,0X00,0X00,0X07,0X80,0X00,
122
0X00,0X00,0X06,0X06,0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X00,0X03,0X07,0X83,0X00,
123
0X00,0X00,0X06,0X06,0X00,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X03,0X9F,0XE7,0X00,
124
0X00,0X00,0X06,0X66,0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X00,0X07,0XFF,0XFF,0X80,
125
0X00,0X00,0X03,0X6E,0X00,0X00,0X00,0X00,0X00,0X3E,0X00,0X00,0X07,0XFF,0XFF,0X80,
126
0X00,0X00,0X01,0XFC,0X00,0X00,0X00,0X00,0X1F,0XFE,0X00,0X00,0X03,0XF8,0X7E,0X00,
127
0X00,0X00,0X07,0XFE,0X00,0X00,0X00,0X00,0X3F,0XC4,0X00,0X00,0X00,0XF0,0X3C,0X00,
128
0X00,0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X7F,0XC0,0X00,0X00,0X00,0XF3,0X3C,0X00,
129
0X00,0X00,0X3F,0XFF,0XE0,0X00,0X00,0X00,0X79,0XE0,0X00,0X00,0X00,0XF3,0X3C,0X00,
130
0X00,0X00,0X7F,0X9F,0XF0,0X00,0X00,0X03,0XF1,0XE0,0X00,0X00,0X00,0XF0,0X3C,0X00,
131
0X00,0X00,0XDF,0X9F,0XF8,0X00,0X00,0X0F,0XF9,0XE0,0X00,0X00,0X01,0XF8,0X7E,0X00,
132
0X00,0X01,0XCF,0X9F,0XF8,0X00,0X00,0X3F,0XFF,0XE0,0X00,0X00,0X07,0XFF,0XFF,0X80,
133
0X00,0X03,0XE3,0X8F,0XFC,0X00,0XC1,0XFF,0XFF,0XC0,0X00,0X03,0XE7,0XFF,0XFF,0X80,
134
0X00,0X03,0XF1,0XDF,0XFC,0X00,0XE7,0XFE,0X1F,0X80,0X00,0X03,0XE7,0XFF,0XFF,0X00,
135
0X00,0X03,0XF0,0X7F,0XFE,0X00,0X3F,0XF8,0X1F,0X00,0X00,0X01,0XC3,0X0F,0XC3,0X00,
136
0X00,0X07,0XF8,0X1F,0XFE,0X00,0XFF,0XE0,0X1E,0X00,0X00,0X81,0XC0,0X07,0X80,0X00,
137
0X00,0X07,0XFC,0X8F,0XFE,0X01,0XFF,0X00,0X3E,0X00,0X01,0XC7,0XF1,0X87,0X80,0X00,
138
0X00,0X07,0X8C,0XC7,0X1E,0X01,0XFC,0X00,0X3C,0X00,0X01,0XFF,0XFF,0XC7,0X80,0X00,
139
0X00,0X07,0X86,0X02,0X0F,0X03,0XF0,0X00,0X7C,0X00,0X03,0XFF,0XFF,0XE7,0X80,0X00,
140
0X00,0X07,0X86,0X33,0X0F,0X03,0X81,0X98,0X78,0X00,0X01,0XFF,0X7F,0XC0,0X00,0X00,
141
0X00,0X07,0XFF,0X19,0XFF,0X01,0X01,0XF8,0XF8,0X00,0X00,0X7C,0X1F,0X00,0X00,0X00,
142
0X00,0X07,0XFF,0X81,0XFE,0X00,0X00,0XF0,0XF0,0X00,0X00,0X78,0X8E,0X00,0X00,0X00,
143
0X00,0X07,0XFF,0XE0,0XFE,0X00,0X01,0XF8,0XF0,0X00,0X00,0X79,0XCF,0X00,0X00,0X00,
144
0X00,0X03,0XFF,0XF8,0X7E,0X00,0X01,0XF9,0XF0,0X00,0X00,0X38,0X8E,0X00,0X00,0X00,
145
0X00,0X03,0XFF,0X9C,0X7C,0X00,0X00,0X11,0XE0,0X00,0X00,0X7C,0X1F,0X00,0X00,0X00,
146
0X00,0X01,0XFF,0X9F,0X3C,0X00,0X00,0X03,0XE0,0X00,0X01,0XFE,0X3F,0XC0,0X00,0X00,
147
0X00,0X01,0XFF,0X9F,0X98,0X00,0X00,0X03,0XC0,0X00,0X03,0XFF,0XFF,0XE0,0X00,0X00,
148
0X00,0X00,0XFF,0X8F,0XF0,0X00,0X00,0X07,0XC0,0X00,0X01,0XFF,0XFF,0XC0,0X00,0X00,
149
0X00,0X00,0X7F,0XFF,0XE0,0X00,0X00,0X07,0XC0,0X00,0X01,0XC7,0XF1,0XC0,0X00,0X00,
150
0X00,0X00,0X3F,0XFF,0XC0,0X00,0X00,0X0F,0XF0,0X00,0X00,0X83,0XC0,0X80,0X00,0X00,
151
0X00,0X00,0X0F,0XFF,0X00,0X00,0X00,0X0F,0X30,0X00,0X00,0X03,0XC0,0X00,0X00,0X00,
152
0X00,0X00,0X01,0XFC,0X00,0X00,0X00,0X1F,0X20,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,
153
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1E,0X00,0X00,0X00,0X03,0XE0,0X00,0X00,0X00,
154
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
155
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
156
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
157
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
158
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
159
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
160
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
161
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
162
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
163
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
164
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
165
};
Интересно.
Нет желания попробовать дисплей побольше?
Интересно.
Нет желания попробовать дисплей побольше?
Не знаю, ближайший побольше в пикселях - 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