Update: Пока будете писать/экспериментировать, для тестирования рекомендую отправлять экрану не исходную картинку, а тупо массив, заполненный одним цветом, построчно. Посмотрите в библиотеке функцию заполнения прямоугольника (если она там есть конечно), думаю там найдете образец/направление движения к правильному коду.
Проверил крайнюю версию Adafruit библиотеки с github - по умолчанию она стартует на скорости SPI = FCPU/2 - 8 МГц для плат с кварцем на 16 МГц
fillScreen выводит байты парами и заполняет экран 132х162 за ~69-70 мс
Написано не оптимально. Грузит байт и висит пока он не отправится. Если проверять свободен ли SPI перед отправкой байта и не ждать окончания - накладных расходов будет меньше !
Komandir, а вы попробуйте работать с дисплеем не ожидая отправки байта и написать логику чтоб в этот момент что то делать) сложность кода усложняется в разы!
Не...проще просто отправлять партиями построчно, ускориться минимум в три раза за счёт отказа отправки команд по spi
И fillscreen заполняет одним цветом, т е упирается в скорость шины, а если картинку из eeprom тащить то замедляем сразу в несколько раз.
Не будет там в несколько раз.
Оптимально написанное перекодирование, думаю, не вылезет за время ожидания передачи. Т.е. отрисовка картинки будет выполняться практически столько же, сколько и заливка одним цветом.
А зачем цвет/пиксель перекодировать?
Если из 24 в 16 битный цвет то это надо делать заранее и всю картинку хранить уже в правильном расположении цветов.
И fillscreen заполняет одним цветом, т е упирается в скорость шины, а если картинку из eeprom тащить то замедляем сразу в несколько раз.
Не будет там в несколько раз.
Оптимально написанное перекодирование, думаю, не вылезет за время ожидания передачи. Т.е. отрисовка картинки будет выполняться практически столько же, сколько и заливка одним цветом.
Только картинку не из EEPROM, а из Flash.
А вы попробуйте а не думайте)
Я это уже прошёл на stm32, любая online обработка цветов замедляет работу, при spi 48 МГц у меня получалось 29 кадров 320х240 в секунду, МК между отрисовкой кадров не успевает кадр обработать ь
Пока такой вариант раскраски картинки тремя фонами. Пока не очень представляю как от попиксельной передачи перейти к построчной. Нужен доп. буфер на строку? Идея чтоб разноцветные "картиночные шкалы влазили в про мини 168" и указатель-стрелка быстро реагировал на изменение величины.
А вы попробуйте а не думайте) Я это уже прошёл на stm32, любая online обработка цветов замедляет работу, при spi 48 МГц у меня получалось 29 кадров 320х240 в секунду, МК между отрисовкой кадров не успевает кадр обработать ь
Не хочу пробовать.
Для всего, что имеет больше 8 кБайт видеопамяти, я использую исключительно параллельный интерфейс. Ну и, соответственно, для 320*240 - за сотню fps при одноцветной заливке. Это для f103. А для f407 - там радикально быстрее за счет аппаратного интерфейса внешней памяти. Но цифр для этого режима у меня сейчас нет.
Пока такой вариант раскраски картинки тремя фонами. Пока не очень представляю как от попиксельной передачи перейти к построчной. Нужен доп. буфер на строку? Идея чтоб разноцветные "картиночные шкалы влазили в про мини 168" и указатель-стрелка быстро реагировал на изменение величины.
Второй цикл с 21 по 25 строку в идеале заменить на одну команду - отправка в spi шину массив байт, только посмотреть есть ли она...
Про цвет да, массив заполнения заранее предварительно прописать нужным цветом, но вы пока сплошной цвет добейтесь, потом уже картинку рисовать.
И fillscreen заполняет одним цветом, т е упирается в скорость шины, а если картинку из eeprom тащить то замедляем сразу в несколько раз.
В #52 видно что даже одним цветом заполнение идет на 2/3 скорости шины SPI. Это можно/нужно поправить.
Вывод однобитных картинок на цветной дисплей вижу так:
на основании значения очередного бита берем нужный байт цвета и
начало цикла
отправляем его в железо
у нас 16 тактов что бы перейти к следующему биту и если байт картинки кончился - взять следующий
на 16-17 такте отправляем в железо второй байт для пикселя и у нас ещё 16 тактов что бы проверить не кончилась ли картинка, подготовить след байт цвета и перейти на начало цикла
подгоняем NOP ами длительность полуциклов и в бой ...
Перед попыткой выводить моноцвет по другому попробовал на экране тест, :) ожидал серый цвет, но нет, как поломатый телевизор из детства - "белочёрное мельтешенье".
... явно должно быть не как у вас при выводе картинки ...
Нет, конечно быстрее, но не как ssd1306 :)
Я не перепишу функцию tft.fillRect(0, 0, 128, 160,tft.Color565(255,255,255)); вне библиотеки (жабры коротки :) под массив из progmem и уж тем более в её рамках. Не ясно почему её авторы выбрали попиксельный вывод монохромной картинки как оптимальный.
наткнулся на косяк при использовании псевдографики )))
Взял библиотеку с этого форума, тут...посмотрел, в твоей библиотеке отсутствует буква я маленькая
Я конечно дико извиняюсь, но это опять я с этим файлом glcdfont.c в библиотеке <Adafruit_GFX.h> использую совместно с #include <Adafruit_ST7735.h> шрифты встают на свои места, если после первой половины таблицы, в начало второй половины таблицы (>127 символа) вставляю еще один (по сути 257 символ), в таблице это отражено двумя 127 символами.
В какой библиотеке править этот косяк (в каком файле)???
Я наверное че то не понимаю, но вывести пиксельный рисунок на растр ничего не стОит, нафига библиотеки. Есть растр в инете кодировки win1251, а вывести её в экран просто
Я наверное че то не понимаю, но вывести пиксельный рисунок на растр ничего не стОит, нафига библиотеки. Есть растр в инете кодировки win1251, а вывести её в экран просто
в адафрутовской библиотеке есть косяк, хочется найти и исправить, так как я лично её пользую...
да и не должна, я о том и говорю, что в таблице с русской кодировкой 257 символов...
по моему эта тема уже была на форуме, но не нашёл...
В оригинальной с умляутами чётко 256...
Я что этой темой озадачился, не пошла кодировка (отображение псевдографикой) при переносе кода сканера 2.4 на другой камень и другой монитор, ST7735 ... плюнул, переделал на вывод отображения сигнала через графику...и быстрее и точнее получилось...но раз непонятки остались надо эту тему добить
Пытаясь увеличить скорость вывода картинки, напоролся на встроенную в "иде" библиотеку TFT. Думаю, счас скорость другой библиотекой наращу... Полез.
А она по сути и есть адафрутовская из двух. В ней как раз исходник этого файла-буквахрана. Так там 254 символа, если я правильно пересчитал.
PS Буква "я маленькая" и вправду не выводится.
Недооценил я себя. Методом тыка и глубоких диванных раздумий увеличил существенно скорость вывода картинки во весь экран. Но сделать с границами областей и координатами вывода не могу... и мельтишат картинки, всё равно глаз видит смену. Слабый экран в сравнении с SSD1306. Я уже молчу если светодиод(ы?) подсветки перегорит или понадобиться гирлянда экранов на про мини 168? или грамотно ставить резисторы - в делители (10 штук).
неправильные пчёлы и неправильный мёд )))
Даже с оригинальной, что в поставке проблема, там 256 символов, от 0 до 255, исправляешь 255, а выводить его надо как 254 )))
О чём и речь )))
неправильные пчёлы и неправильный мёд )))
Даже с оригинальной, что в поставке проблема, там 256 символов, от 0 до 255, исправляешь 255, а выводить его надо как 254 )))
О чём и речь )))
эт как? может код символа из раблицы кривой берете? есть таблица win1251 например - там все заполнено и нет никакх "исправляешь 255, а выводить его надо как 254"
Кстати померил отношение скоростей вывода в исходном варианте и в крайнем с помощью секундомера. Около 1 к 12 раз.
progmem медленная хрень, в любом случае чуда не случится, глобального улучшения не получите!
Да, я понял, но всё же связываю это с самим экраном. Делал на ssd1306 (4 вывода) мимику глазами роботу-игрушке, 5 картинок-позиций глаз из progmem - смена картинок не видна была.
эт как? может код символа из раблицы кривой берете? есть таблица win1251 например - там все заполнено и нет никакх "исправляешь 255, а выводить его надо как 254"
ua6em пишет:
неправильные пчёлы и неправильный мёд )))
Даже с оригинальной, что в поставке проблема, там 256 символов, от 0 до 255, исправляешь 255, а выводить его надо как 254 )))
О чём и речь )))
в таблице шрифты 5х8, правлю один символ - 255, далее выводить его надо не как 255, а как 254, tft.print(char(254)); тогда всё пучком
Всё разобрался, когда нашёл, что пропускается 176 символ нашёл и отчего это и как решить )))
Исправленный код секундомера под RP2040:
// СЕКУНДОМЕР
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
#define SPI01 // Дисплей на SPI1, NRF24L01 на SPI0
#if defined(SPI01) // для RP2040 SPI1
#define TFT_CS 13 // GP13 - CS
#define TFT_RST 14 // GP14 - RESET
#define TFT_DC 15 // GP15 - A0
#define TFT_MISO 12 // GP12 - MISO (MISO, RX)
#define TFT_MOSI 11 // GP11 - SDA (MOSI, TX)
#define TFT_SCLK 10 // GP10 - SCK
#else // для RP2040 SPI0
#define TFT_CS 5 // GP5 - CS
#define TFT_RST 6 // GP6 - RESET
#define TFT_DC 7 // GP7 - A0
#define TFT_MISO 4 // GP4 - MISO (MISO, RX)
#define TFT_MOSI 3 // GP3 - SDA (MOSI, TX)
#define TFT_SCLK 2 // GP2 - SCK
#endif
// For ST7735-based displays, we will use this call
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
float a = 0.00; // переменная для угла поворота стрелки
float aa = 0.00; // переменная для угла поворота стрелки (предыдущее значение)
int str = 55; //длина стрелки в пикселях
byte sek = 16; //
void setup(void) {
// Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
tft.cp437(true); // не пропускаем 176 символ
tft.fillScreen(ST7735_BLACK);
tft.setRotation(1);//ориентация экрана
tft.setSPISpeed(50000000);
tft.drawCircle(80, 64, 63, ST7735_WHITE ); //обод секундомера
tft.drawCircle(80, 64, 62, ST7735_WHITE );
tft.drawCircle(80, 64, 61, ST7735_WHITE );
}
void loop() {
//
aa = a;
// tft.drawLine(80, 64, 80 + cos(aa)*str, 64 + sin(aa)*str,ST7735_BLACK ); // стирание старой стрелки-отрезка
tft.drawLine(80 + cos(aa + 1.5)*str * 0.1, 64 + sin(aa + 1.5)*str * 0.1, 80 + cos(aa)*str, 64 + sin(aa)*str, ST7735_BLACK ); // стирание старой стрелки
tft.drawLine(80 + cos(aa - 1.5)*str * 0.1, 64 + sin(aa - 1.5)*str * 0.1, 80 + cos(aa)*str, 64 + sin(aa)*str, ST7735_BLACK ); // стирание старой стрелки
a = a + PI / 30;
for (float i = 0.01; i < 2 * PI; i = i + PI / 30) {
tft.drawLine(80 + cos(i)*str * 0.9, 64 + sin(i)*str * 0.9, 80 + cos(i)*str, 64 + sin(i)*str, ST7735_GREEN ); // риски-метки шкалы через 1 сек
}
for (float i = 0.01; i < 2 * PI; i = i + PI / 6) {
tft.drawLine(80 + cos(i)*str * 0.75, 64 + sin(i)*str * 0.75, 80 + cos(i)*str, 64 + sin(i)*str, ST7735_WHITE ); // риски-метки шкалы через 5 сек
}
// tft.drawLine(80, 64, 80 + cos(a)*str, 64 + sin(a)*str,ST7735_WHITE ); // рисование новой стрелки-отрезка
tft.drawLine(80 + cos(a + 1.5)*str * 0.1, 64 + sin(a + 1.5)*str * 0.1, 80 + cos(a)*str, 64 + sin(a)*str, ST7735_WHITE ); // рисование новой стрелки
tft.drawLine(80 + cos(a - 1.5)*str * 0.1, 64 + sin(a - 1.5)*str * 0.1, 80 + cos(a)*str, 64 + sin(a)*str, ST7735_WHITE ); // рисование новой стрелки
//
tft.drawCircle(80, 64, 5, ST7735_WHITE );
tft.drawCircle(80, 64, 4, ST7735_WHITE );
tft.setCursor(50, 45);
tft.setTextSize(1);
tft.setTextColor(ST7735_GREEN);
tft.println(utf8rus("СЕКУНДОМЕР"));
tft.setCursor(70, 80);
tft.setTextSize(2);
tft.setTextColor(ST7735_GREEN);
if (sek < 10) {
tft.print("0");
} tft.println(sek);
sek++; if (sek > 59) {
sek = 0;
}
//
delay(835);//подбираем опытным путём
tft.fillRect(70, 80, 30, 20, ST7735_BLACK);
}
////////////////////////////////////////////////////////////////////////
/* Функция перекодировки русских букв из UTF-8 в Win-1251 */
String utf8rus(String source)
{
int i, k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xC0) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) {
n = 0xA8;
break;
}
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) {
n = 0xB8;
break;
}
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
///////////////////////////////////////////////////////////////////////////
Правильная версия файла русифицированных фонтов - glcdfont.c
(находится в библиотеке <Adafruit_GFX.h> (заменить или старую переименовать и скопировать новую)
Отвлёкся я на скорость вывода картинки от вариаций раскрашивания. Пока в голову пришло три варианта - сектора цвета, градиент цвета и пиксель-ассорти. Какие ещё варианты могут быть?
Update:
только соотвественно вместо отправки двух байт
14spiwrite(color >> 8);15spiwrite(color);вам необходимо отправлять массив (буфер)
Update: Пока будете писать/экспериментировать, для тестирования рекомендую отправлять экрану не исходную картинку, а тупо массив, заполненный одним цветом, построчно. Посмотрите в библиотеке функцию заполнения прямоугольника (если она там есть конечно), думаю там найдете образец/направление движения к правильному коду.
Проверил крайнюю версию Adafruit библиотеки с github - по умолчанию она стартует на скорости SPI = FCPU/2 - 8 МГц для плат с кварцем на 16 МГц
fillScreen выводит байты парами и заполняет экран 132х162 за ~69-70 мс
Написано не оптимально. Грузит байт и висит пока он не отправится. Если проверять свободен ли SPI перед отправкой байта и не ждать окончания - накладных расходов будет меньше !
Komandir, а вы попробуйте работать с дисплеем не ожидая отправки байта и написать логику чтоб в этот момент что то делать) сложность кода усложняется в разы!
Не...проще просто отправлять партиями построчно, ускориться минимум в три раза за счёт отказа отправки команд по spi
Ну да.
Сначала setAddrWindow(0,y,_width,y+1);
Затем вместо строк 14-15 - цикл. Даже вложенный цикл: внешний по байтам строки монохромной картинки, а внутренний - по битам внутри байта.
Ну и, как верно заметил Kommandir, вместо ожидания - перекодирование следующего пикселя.
И fillscreen заполняет одним цветом, т е упирается в скорость шины, а если картинку из eeprom тащить то замедляем сразу в несколько раз.
Оптимально написанное перекодирование, думаю, не вылезет за время ожидания передачи. Т.е. отрисовка картинки будет выполняться практически столько же, сколько и заливка одним цветом.
Только картинку не из EEPROM, а из Flash.
А зачем цвет/пиксель перекодировать?
Если из 24 в 16 битный цвет то это надо делать заранее и всю картинку хранить уже в правильном расположении цветов.
Так у него картинка с однобитным цветом. На каждый бит экрану нужно отправить два байта.
Оптимально написанное перекодирование, думаю, не вылезет за время ожидания передачи. Т.е. отрисовка картинки будет выполняться практически столько же, сколько и заливка одним цветом.
Только картинку не из EEPROM, а из Flash.
А вы попробуйте а не думайте)
Я это уже прошёл на stm32, любая online обработка цветов замедляет работу, при spi 48 МГц у меня получалось 29 кадров 320х240 в секунду, МК между отрисовкой кадров не успевает кадр обработать ь
Так у него картинка с однобитным цветом. На каждый бит экрану нужно отправить два байта.
Тогда да, это проще и быстрее.
Пока такой вариант раскраски картинки тремя фонами. Пока не очень представляю как от попиксельной передачи перейти к построчной. Нужен доп. буфер на строку? Идея чтоб разноцветные "картиночные шкалы влазили в про мини 168" и указатель-стрелка быстро реагировал на изменение величины.
// РИСУНОК и способы его раскраски #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); extern const unsigned char ris_1[]; void setup(void) { // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана } void loop() { //демонстрация вариантов раскраски drawBitmap_(0,0,ris_1, 128,160,0); delay(1000);// drawBitmap_(0,0,ris_1, 128,160,1); delay(5000);// drawBitmap_(0,0,ris_1, 128,160,0); delay(1000);// drawBitmap_(0,0,ris_1, 128,160,2); delay(5000);// drawBitmap_(0,0,ris_1, 128,160,0); delay(1000);// drawBitmap_(0,0,ris_1, 128,160,3); delay(5000);// } //////////////////////////////////////////////////////// void drawBitmap_(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h,byte raskraska) { 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) { if(raskraska==0){tft.drawPixel(x+i, y+j,tft.Color565(255,255,255) );}//задаём один цвет if(raskraska==1){tft.drawPixel(x+i, y+j,tft.Color565((1.6)*(j%h),200-(200/w)*(i%w),(255/w)*(i%w)));}//задаём зависимости градиентов цветов if(raskraska==2){ if(j>h/2-5&&i<=w/2-5){tft.drawPixel(x+i, y+j,tft.Color565(0,255,0) );}// задаём условия цветных секторов if(j<=h/2-5&&i>w/2-5){tft.drawPixel(x+i, y+j,tft.Color565(255,0,255) );} if(j>h/2-5&&i>w/2-5){tft.drawPixel(x+i, y+j,tft.Color565(0,150,255) );} if(i*i+j*j<10010&&j<=w){tft.drawPixel(x+i, y+j,tft.Color565(255,0,0) );} } if(raskraska==3){ tft.drawPixel(x+i,y+j,tft.Color565(50*random(1,6),150-50*random(0,4),0));//задаём условие пиксельного ассорти } } } } } //////////////////////////////////////////////////////////Картинка подобно трафарету накладывается на цветной фон.
Для всего, что имеет больше 8 кБайт видеопамяти, я использую исключительно параллельный интерфейс. Ну и, соответственно, для 320*240 - за сотню fps при одноцветной заливке. Это для f103. А для f407 - там радикально быстрее за счет аппаратного интерфейса внешней памяти. Но цифр для этого режима у меня сейчас нет.
#include <avr/pgmspace.h> const unsigned char ris_1[]PROGMEM = { 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, 0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, 0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X80,0X40,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0XFF,0XC1,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X01,0XFF,0X83,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X01,0XFF,0X0F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X01,0XFE,0X1F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X03,0XFC,0X3F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X03,0XF8,0X7F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X07,0XF0,0XFF,0XFF,0X01,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X07,0XE1,0XFF,0XFC,0X07,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X07,0XC3,0XFF,0XF8,0X0F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X07,0X83,0XFF,0XF0,0X3F,0XFF,0X00,0X00,0X03,0XE0,0X00,0X00,0X01,0XC0, 0X03,0X80,0X07,0X07,0XFF,0XC0,0X7F,0XFE,0X00,0X80,0X1F,0XFC,0X00,0X00,0X01,0XC0, 0X03,0X80,0X07,0X0F,0XFF,0X81,0XFF,0XFC,0X07,0XF8,0X7F,0XFF,0X00,0X00,0X01,0XC0, 0X03,0X80,0X06,0X1F,0XFF,0X03,0XFF,0XF8,0X1F,0XF8,0XFF,0XFF,0X80,0X7C,0X01,0XC0, 0X03,0X80,0X00,0X3F,0XFE,0X07,0XFF,0XF0,0X3F,0XF0,0XFF,0XFF,0XC0,0X7E,0X01,0XC0, 0X03,0X80,0X00,0X7F,0XF8,0X1F,0XFF,0XE0,0X7F,0XF1,0XFF,0X7F,0XC0,0X7E,0X01,0XC0, 0X03,0X80,0X00,0X7F,0XF0,0X3F,0XFF,0XC0,0XFF,0XE1,0XF8,0X0F,0XE0,0X7F,0X01,0XC0, 0X03,0X80,0X00,0XFF,0XE0,0X7F,0XFF,0X83,0XFF,0XE3,0XF0,0X03,0XE0,0X7F,0X01,0XC0, 0X03,0X80,0X01,0XFF,0XC0,0XFF,0XFF,0X07,0XFF,0XC3,0XF0,0X03,0XF0,0X7F,0X01,0XC0, 0X03,0X80,0X01,0XFE,0X01,0XFF,0XFE,0X0F,0XFF,0X87,0XE3,0XE1,0XF8,0X3F,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X7F,0XF8,0X3F,0XFF,0X87,0XE7,0XF0,0XFC,0X3F,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X1F,0XE0,0X7F,0XFF,0X0F,0XCF,0XF8,0XFF,0XFF,0X01,0XC0, 0X03,0X80,0X03,0XFE,0X00,0X00,0X00,0XFF,0XFE,0X0F,0XCF,0XF8,0X7F,0XFF,0X01,0XC0, 0X03,0X80,0X0F,0XFF,0XF8,0X00,0X01,0XFF,0XFE,0X1F,0XCF,0XF8,0X3F,0XFE,0X01,0XC0, 0X03,0X80,0X1F,0XFF,0XFF,0X80,0X03,0XFF,0XFC,0X1F,0XCF,0XFC,0X1F,0XFC,0X01,0XC0, 0X03,0X80,0X1F,0XFF,0XFF,0XF0,0X03,0XFF,0XF8,0X3F,0X8F,0XFC,0X07,0XF8,0X01,0XC0, 0X03,0X80,0X1F,0XFF,0XFF,0XFE,0X01,0XFF,0XF8,0X3F,0X87,0XFE,0X00,0X00,0X01,0XC0, 0X03,0X80,0X0F,0XFF,0XFF,0XFF,0X80,0XFF,0XF0,0X7F,0X87,0XFF,0X00,0X00,0X01,0XC0, 0X03,0X80,0X0F,0XFF,0XFF,0XFF,0XE0,0X3F,0XE0,0XFF,0X87,0XFF,0X80,0X1F,0X01,0XC0, 0X03,0X80,0X0F,0XFF,0XFF,0XFF,0XF8,0X0F,0XE0,0XFF,0X07,0XFF,0XC0,0X7F,0X01,0XC0, 0X03,0X80,0X07,0XFF,0XFF,0XFF,0XFE,0X00,0X01,0XFF,0X07,0XFF,0XE0,0X7F,0X81,0XC0, 0X03,0X80,0X07,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0XFE,0X07,0XFF,0XF0,0X7F,0X81,0XC0, 0X03,0X80,0X03,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X3C,0X07,0XFF,0XF0,0XFF,0X81,0XC0, 0X03,0X80,0X00,0X00,0X07,0XFF,0XFF,0XFC,0X00,0X00,0X07,0XFF,0XF0,0XFF,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X7F,0XFF,0XFF,0X80,0X00,0X0F,0XFF,0XF0,0XFF,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFE,0X0F,0X0F,0XFF,0XE0,0X7F,0X01,0XC0, 0X03,0X80,0X00,0X3F,0XF0,0X00,0XFF,0XFF,0XFF,0XFF,0X87,0XFF,0XE0,0X00,0X01,0XC0, 0X03,0X80,0X00,0X7F,0XFF,0X80,0X1F,0XFF,0XFF,0XFF,0XC7,0XFF,0XC0,0X00,0X01,0XC0, 0X03,0X80,0X00,0X7F,0XFF,0XF8,0X03,0XFF,0XFF,0XFF,0XC3,0XFF,0X80,0X00,0X01,0XC0, 0X03,0X80,0X00,0X7F,0XFF,0XFF,0X00,0X7F,0XFF,0XFF,0XC0,0XFC,0X02,0X00,0X01,0XC0, 0X03,0X80,0X00,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XC0,0X00,0X0F,0X00,0X01,0XC0, 0X03,0X80,0X00,0XFF,0XFF,0XFF,0XF8,0X00,0X1F,0XFF,0X80,0X00,0X1F,0X80,0X01,0XC0, 0X03,0X80,0X00,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X0F,0X80,0X01,0XC0, 0X03,0X80,0X00,0XFF,0X80,0X7F,0XFF,0XF0,0X00,0X00,0X07,0X0F,0X8F,0XC0,0X01,0XC0, 0X03,0X80,0X01,0XFC,0X00,0X1F,0XFF,0XFC,0X03,0XF8,0X07,0X8F,0X8F,0XE0,0X01,0XC0, 0X03,0X80,0X01,0XF8,0X00,0X07,0XFF,0XFC,0X0F,0XFE,0X07,0X8F,0XC7,0XF0,0X01,0XC0, 0X03,0X80,0X01,0XF1,0X80,0X01,0XFF,0XFC,0X1F,0XFF,0X07,0X8F,0XC7,0XF0,0X01,0XC0, 0X03,0X80,0X01,0XF1,0XF0,0XF0,0XFF,0XFC,0X3F,0XFF,0X87,0X87,0XC7,0XF8,0X01,0XC0, 0X03,0X80,0X03,0XE1,0XE3,0XFC,0X7F,0XF8,0X7E,0X3F,0X87,0X87,0XE3,0XFC,0X01,0XC0, 0X03,0X80,0X03,0XE1,0XE7,0XFE,0X1F,0XF8,0X7C,0X1F,0X87,0XC7,0XE3,0XFC,0X01,0XC0, 0X03,0X80,0X03,0XE3,0XE7,0XFE,0X03,0XE0,0X7E,0X0F,0X87,0XC7,0XE3,0XFE,0X01,0XC0, 0X03,0X80,0X07,0XE3,0XC7,0XFE,0X00,0X00,0X7E,0X0F,0X87,0XC7,0XE1,0XFE,0X01,0XC0, 0X03,0X80,0X07,0XE3,0XC7,0XFE,0X00,0X00,0X3F,0X0F,0X87,0XC7,0XF1,0XFF,0X01,0XC0, 0X03,0X80,0X07,0XE3,0XE0,0XFE,0X00,0X00,0X3F,0X0F,0X87,0XC3,0XF0,0XFF,0X81,0XC0, 0X03,0X80,0X0F,0XE1,0XE0,0X7C,0X00,0X00,0X00,0X1F,0X87,0XC3,0XF0,0XFF,0X81,0XC0, 0X03,0X80,0X1F,0XE1,0XF0,0X7C,0X0F,0XE0,0X00,0X3F,0X07,0XE3,0XF0,0XFF,0X81,0XC0, 0X03,0X80,0X1F,0XF1,0XFF,0XF8,0X3F,0XF8,0X00,0XFF,0X07,0XE3,0XF8,0XFF,0XC1,0XC0, 0X03,0X80,0X3F,0XF0,0XFF,0XF0,0X7F,0XF8,0X03,0XFE,0X07,0XE3,0XF8,0X7F,0XC1,0XC0, 0X03,0X80,0X7F,0XF8,0X7F,0XC1,0XFF,0XF8,0X07,0XFE,0X07,0XE3,0XF8,0X7F,0XC1,0XC0, 0X03,0X80,0XFF,0XFC,0X1F,0X03,0XFF,0XF0,0X0F,0XFC,0X07,0XE1,0XFC,0X7F,0XE1,0XC0, 0X03,0X81,0XFF,0XFE,0X00,0X0F,0XFF,0XF0,0X1F,0XF8,0X03,0XE1,0XFC,0X3F,0XE1,0XC0, 0X03,0X81,0XFF,0XFF,0X80,0X3F,0XFF,0XF0,0X1F,0XF8,0X03,0XE1,0XFC,0X3F,0XE1,0XC0, 0X03,0X81,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X0F,0XF0,0X03,0XF1,0XFE,0X3F,0XE1,0XC0, 0X03,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X03,0XF1,0XFE,0X1F,0XC1,0XC0, 0X03,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X03,0XF1,0XFE,0X1F,0XC1,0XC0, 0X03,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0X00,0X03,0XF0,0XFF,0X0F,0X81,0XC0, 0X03,0X83,0XFF,0XFF,0XFF,0XFF,0XFF,0XC1,0XFF,0XFF,0X03,0XF0,0XFF,0X07,0X01,0XC0, 0X03,0X83,0XF8,0X0F,0XFF,0XFF,0XFF,0XC3,0XFF,0XFF,0X83,0XF0,0XFF,0X00,0X01,0XC0, 0X03,0X83,0XF8,0X0F,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0X83,0XF0,0XFF,0X80,0X01,0XC0, 0X03,0X87,0XFF,0X07,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0X83,0XF8,0XFF,0X80,0X01,0XC0, 0X03,0X87,0XFF,0XC7,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0XC3,0XF8,0XFF,0X80,0X01,0XC0, 0X03,0X87,0XFF,0XC7,0XFF,0XFF,0XFF,0X87,0XFF,0XFF,0XC3,0XF8,0X7F,0XC0,0X01,0XC0, 0X03,0X87,0XFF,0XC7,0XFF,0XFF,0XFF,0X8F,0XF0,0X3F,0XC3,0XF8,0X7F,0XC0,0X01,0XC0, 0X03,0X87,0XFF,0XC3,0XFF,0XFF,0XFF,0X8F,0XF0,0X3F,0XC3,0XF8,0X7F,0XC0,0X01,0XC0, 0X03,0X87,0XFF,0X83,0XFF,0XFF,0XFF,0X8F,0XE0,0X1F,0XC3,0XF8,0X7F,0XC0,0X01,0XC0, 0X03,0X87,0XFF,0X01,0XFF,0XFF,0XFF,0X8F,0XE0,0X3F,0XC3,0XF8,0X7F,0XE0,0X01,0XC0, 0X03,0X80,0X78,0X00,0X7F,0XFF,0XFF,0X8F,0XE0,0X3F,0XC3,0XF8,0X7F,0XE0,0X01,0XC0, 0X03,0X80,0X00,0X00,0X3F,0XFF,0XFF,0X87,0XF0,0X7F,0XC3,0XF8,0X3F,0XE0,0X01,0XC0, 0X03,0X80,0X00,0X00,0X0F,0XFF,0XFF,0X87,0XF0,0XFF,0XC3,0XF8,0X3F,0XF0,0X01,0XC0, 0X03,0X80,0X3F,0XF8,0X03,0XFF,0XFF,0X87,0XFF,0XFF,0X83,0XFC,0X3F,0XF0,0X01,0XC0, 0X03,0X80,0XFF,0XFF,0X80,0XFF,0XFF,0X87,0XFF,0XFF,0X87,0XFC,0X3F,0XF0,0X01,0XC0, 0X03,0X81,0XFF,0XFF,0XE0,0X3F,0XFF,0X87,0XFF,0XFF,0X87,0XFC,0X3F,0XF0,0X01,0XC0, 0X03,0X80,0XFF,0XFF,0XF8,0X1F,0XFF,0X83,0XFF,0XFF,0X87,0XFC,0X3F,0XF0,0X01,0XC0, 0X03,0X80,0X7F,0XFF,0XFC,0X1F,0XFF,0X83,0XFF,0XFF,0X07,0XFC,0X1F,0XF8,0X01,0XC0, 0X03,0X80,0X01,0XFF,0XFE,0X0F,0XFF,0X81,0XFF,0XFF,0X07,0XFC,0X1F,0XF8,0X01,0XC0, 0X03,0X80,0X00,0X01,0XFF,0X07,0XFF,0X80,0X00,0XFE,0X07,0XFC,0X1F,0XF8,0X01,0XC0, 0X03,0X80,0X00,0X00,0XFF,0X87,0XFF,0X80,0X00,0X00,0X07,0XFC,0X1F,0XF8,0X01,0XC0, 0X03,0X80,0X00,0X00,0X7F,0X83,0XFF,0X80,0X00,0X00,0X07,0XFC,0X1F,0XF8,0X01,0XC0, 0X03,0X80,0X00,0X00,0X3F,0XC3,0XFF,0XC3,0XFF,0X00,0X07,0XFC,0X1F,0XF8,0X01,0XC0, 0X03,0X80,0X1F,0XC0,0X7F,0XC3,0XFF,0XC3,0XFF,0XFC,0X07,0XFC,0X0F,0XF8,0X01,0XC0, 0X03,0X80,0X1F,0XFF,0XFF,0XC3,0XFF,0XC3,0XFF,0XFF,0X07,0XFC,0X0F,0XF8,0X01,0XC0, 0X03,0X80,0X1F,0XFF,0XFF,0XC1,0XFF,0XC3,0XFF,0XFE,0X07,0XFC,0X0F,0XF8,0X01,0XC0, 0X03,0X80,0X1F,0XFF,0XFF,0XE1,0XFF,0XC1,0XC0,0X7E,0X0F,0XFC,0X0F,0XF8,0X01,0XC0, 0X03,0X80,0X0F,0XFF,0XFF,0XE1,0XFF,0XC1,0XE0,0X7E,0X07,0XF8,0X07,0XF8,0X01,0XC0, 0X03,0X80,0X03,0XFF,0XFF,0XE1,0XFF,0XC1,0XF0,0X7C,0X07,0XF8,0X07,0XF8,0X01,0XC0, 0X03,0X80,0X00,0X3F,0XFF,0XE1,0XFF,0XE0,0XF0,0XFC,0X07,0XF8,0X03,0XF0,0X01,0XC0, 0X03,0X80,0X00,0X0F,0XFF,0XE1,0XFF,0XE0,0X7B,0XF8,0X07,0XF8,0X01,0XE0,0X01,0XC0, 0X03,0X80,0X00,0X07,0XFF,0XE1,0XFF,0XE0,0X7F,0XF0,0X07,0XF0,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X01,0XFF,0XC1,0XFF,0XE0,0X3F,0XE0,0X07,0XF0,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X3E,0X01,0XFE,0X00,0X1F,0XC0,0X03,0XE0,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0X80,0X03,0X80,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X06,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, 0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, 0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, 0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00 };Файл - картинка.
Пока такой вариант раскраски картинки тремя фонами. Пока не очень представляю как от попиксельной передачи перейти к построчной.
Нужен доп. буфер на строку?
Пока такой вариант раскраски картинки тремя фонами. Пока не очень представляю как от попиксельной передачи перейти к построчной. Нужен доп. буфер на строку? Идея чтоб разноцветные "картиночные шкалы влазили в про мини 168" и указатель-стрелка быстро реагировал на изменение величины.
// РИСУНОК и способы его раскраски #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); extern const unsigned char ris_1[]; void setup(void) { // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана } void loop() { //демонстрация вариантов раскраски drawBitmap_(0,0,ris_1, 128,160,0); delay(1000);// drawBitmap_(0,0,ris_1, 128,160,1); delay(5000);// drawBitmap_(0,0,ris_1, 128,160,0); delay(1000);// drawBitmap_(0,0,ris_1, 128,160,2); delay(5000);// drawBitmap_(0,0,ris_1, 128,160,0); delay(1000);// drawBitmap_(0,0,ris_1, 128,160,3); delay(5000);// } //////////////////////////////////////////////////////// void drawBitmap_(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h,byte raskraska) { 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) { if(raskraska==0){tft.drawPixel(x+i, y+j,tft.Color565(255,255,255) );}//задаём один цвет if(raskraska==1){tft.drawPixel(x+i, y+j,tft.Color565((1.6)*(j%h),200-(200/w)*(i%w),(255/w)*(i%w)));}//задаём зависимости градиентов цветов if(raskraska==2){ if(j>h/2-5&&i<=w/2-5){tft.drawPixel(x+i, y+j,tft.Color565(0,255,0) );}// задаём условия цветных секторов if(j<=h/2-5&&i>w/2-5){tft.drawPixel(x+i, y+j,tft.Color565(255,0,255) );} if(j>h/2-5&&i>w/2-5){tft.drawPixel(x+i, y+j,tft.Color565(0,150,255) );} if(i*i+j*j<10010&&j<=w){tft.drawPixel(x+i, y+j,tft.Color565(255,0,0) );} } if(raskraska==3){ tft.drawPixel(x+i,y+j,tft.Color565(50*random(1,6),150-50*random(0,4),0));//задаём условие пиксельного ассорти } } } } } //////////////////////////////////////////////////////////Картинка подобно трафарету накладывается на цветной фон.
Нет, все плохо, вам в принципе необходимо избавиться от drawpixel и написать свою замену.
Это вариант где на скорость вывода я не гляжу.
Пока нашёл базовую функцию в библиотеке.
void Adafruit_ST7735::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) { // rudimentary clipping (drawChar w/big text requires this) if((x >= _width) || (y >= _height)) return; if((x + w - 1) >= _width) w = _width - x; if((y + h - 1) >= _height) h = _height - y; setAddrWindow(x, y, x+w-1, y+h-1); uint8_t hi = color >> 8, lo = color; #if defined (SPI_HAS_TRANSACTION) if (hwSPI) SPI.beginTransaction(mySPISettings); #endif DC_HIGH(); CS_LOW(); for(y=h; y>0; y--) { for(x=w; x>0; x--) { spiwrite(hi); spiwrite(lo); } } CS_HIGH(); #if defined (SPI_HAS_TRANSACTION) if (hwSPI) SPI.endTransaction(); #endif }Вместо color в аргументах массив из PROGMEM? 1-бит превращать в один цвет, 0-бит в другой внутри функции?
Второй цикл с 21 по 25 строку в идеале заменить на одну команду - отправка в spi шину массив байт, только посмотреть есть ли она...
Про цвет да, массив заполнения заранее предварительно прописать нужным цветом, но вы пока сплошной цвет добейтесь, потом уже картинку рисовать.
В #52 видно что даже одним цветом заполнение идет на 2/3 скорости шины SPI. Это можно/нужно поправить.
Вывод однобитных картинок на цветной дисплей вижу так:
на основании значения очередного бита берем нужный байт цвета и
начало цикла
отправляем его в железо
у нас 16 тактов что бы перейти к следующему биту и если байт картинки кончился - взять следующий
на 16-17 такте отправляем в железо второй байт для пикселя и у нас ещё 16 тактов что бы проверить не кончилась ли картинка, подготовить след байт цвета и перейти на начало цикла
подгоняем NOP ами длительность полуциклов и в бой ...
так можно выйти на максимум шины SPI
По похожему принципу я сделал вывод на адресную ленту за 14 тактов на бит - https://wokwi.com/projects/328014892704465492
Я по ходу забыл, в файлы библиотеки "...GFX" надо добавить
#ifndef FONT5X7_H #define FONT5X7_H #ifdef __AVR__ #include <avr/io.h> #include <avr/pgmspace.h> #elif defined(ESP8266) #include <pgmspace.h> #else #define PROGMEM #endif // Standard ASCII 5x7 font static const unsigned char font[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x55, 0x51, 0x55, 0x3E, 0x3E, 0x6B, 0x6F, 0x6B, 0x3E, 0x0C, 0x1E, 0x3C, 0x1E, 0x0C, 0x08, 0x1C, 0x3E, 0x1C, 0x08, 0x1C, 0x4A, 0x7F, 0x4A, 0x1C, 0x18, 0x5C, 0x7F, 0x5C, 0x18, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x7F, 0x63, 0x63, 0x63, 0x7F, 0x00, 0x1C, 0x14, 0x1C, 0x00, 0x7F, 0x63, 0x6B, 0x63, 0x7F, 0x30, 0x48, 0x4D, 0x33, 0x07, 0x06, 0x29, 0x79, 0x29, 0x06, 0x20, 0x50, 0x3F, 0x02, 0x0C, 0x60, 0x7F, 0x05, 0x35, 0x3F, 0x2A, 0x1C, 0x77, 0x1C, 0x2A, 0x00, 0x7F, 0x3E, 0x1C, 0x08, 0x08, 0x1C, 0x3E, 0x7F, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x4A, 0x55, 0x55, 0x55, 0x29, 0x60, 0x60, 0x60, 0x60, 0x60, 0x54, 0x62, 0x7F, 0x62, 0x54, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x08, 0x10, 0x3F, 0x10, 0x08, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x1C, 0x10, 0x10, 0x10, 0x10, 0x1C, 0x3E, 0x08, 0x3E, 0x1C, 0x30, 0x3C, 0x3F, 0x3C, 0x30, 0x06, 0x1E, 0x7E, 0x1E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x23, 0x13, 0x08, 0x64, 0x62, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0xA0, 0x60, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x60, 0x60, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x44, 0x42, 0x7F, 0x40, 0x40, 0x42, 0x61, 0x51, 0x49, 0x46, 0x21, 0x41, 0x45, 0x4B, 0x31, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x27, 0x45, 0x45, 0x45, 0x39, 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x01, 0x71, 0x09, 0x05, 0x03, 0x36, 0x49, 0x49, 0x49, 0x36, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0xAC, 0x6C, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41, 0x22, 0x14, 0x08, 0x02, 0x01, 0x51, 0x09, 0x06, 0x3E, 0x41, 0x5D, 0x55, 0x5E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x49, 0x49, 0x7A, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, 0x60, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x46, 0x49, 0x49, 0x49, 0x31, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x3F, 0x40, 0x3C, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14, 0x63, 0x07, 0x08, 0x70, 0x08, 0x07, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x7F, 0x41, 0x41, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x41, 0x41, 0x7F, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x01, 0x02, 0x04, 0x00, 0x20, 0x54, 0x54, 0x54, 0x78, 0x7F, 0x48, 0x44, 0x44, 0x38, 0x38, 0x44, 0x44, 0x44, 0x48, 0x38, 0x44, 0x44, 0x48, 0x7F, 0x38, 0x54, 0x54, 0x54, 0x18, 0x08, 0x7E, 0x09, 0x01, 0x02, 0x08, 0x54, 0x54, 0x58, 0x3C, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x20, 0x40, 0x44, 0x3D, 0x00, 0x7F, 0x10, 0x10, 0x28, 0x44, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x38, 0x44, 0x44, 0x44, 0x38, 0x7C, 0x14, 0x14, 0x14, 0x08, 0x08, 0x14, 0x14, 0x0C, 0x7C, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x48, 0x54, 0x54, 0x54, 0x24, 0x04, 0x3F, 0x44, 0x40, 0x20, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x3C, 0x40, 0x38, 0x40, 0x3C, 0x44, 0x28, 0x10, 0x28, 0x44, 0x0C, 0x50, 0x50, 0x50, 0x3C, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x70, 0x48, 0x44, 0x48, 0x70, 0x00, 0x0E, 0x11, 0x0E, 0x00, 0x00, 0x12, 0x1F, 0x10, 0x00, 0x00, 0x12, 0x19, 0x16, 0x00, 0x00, 0x11, 0x15, 0x0B, 0x00, 0x00, 0x07, 0x04, 0x1F, 0x00, 0x00, 0x17, 0x15, 0x09, 0x00, 0x00, 0x0E, 0x15, 0x09, 0x00, 0x00, 0x01, 0x1D, 0x03, 0x00, 0x00, 0x0A, 0x15, 0x0A, 0x00, 0x00, 0x12, 0x15, 0x0E, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x3E, 0x00, 0x3E, 0x3E, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x40, 0x00, 0x40, 0x00, 0x40, 0x60, 0x00, 0x40, 0x00, 0x40, 0x60, 0x00, 0x70, 0x00, 0x40, 0x60, 0x00, 0x70, 0x00, 0x78, 0x7C, 0x00, 0x40, 0x00, 0x40, 0x7C, 0x00, 0x7E, 0x00, 0x40, 0x7C, 0x00, 0x7E, 0x00, 0x7F, 0x1C, 0x77, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x1C, 0x77, 0x41, 0x5D, 0x5D, 0x41, 0x41, 0x41, 0x5D, 0x5D, 0x5D, 0x5D, 0x41, 0x5D, 0x5D, 0x5D, 0x5D, 0x41, 0x7F, 0x00, 0x22, 0x1C, 0x14, 0x1C, 0x22, 0x00, 0x08, 0x1C, 0x08, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x46, 0x5D, 0x55, 0x5D, 0x31, 0x7C, 0x55, 0x54, 0x55, 0x44, 0x08, 0x08, 0x2A, 0x08, 0x08, 0x00, 0x14, 0x08, 0x14, 0x00, 0x08, 0x14, 0x22, 0x08, 0x14, 0x7F, 0x41, 0x71, 0x31, 0x1F, 0x03, 0x05, 0x7F, 0x05, 0x03, 0x22, 0x14, 0x7F, 0x55, 0x22, 0x02, 0x55, 0x7D, 0x05, 0x02, 0x06, 0x09, 0x09, 0x06, 0x00, 0x44, 0x44, 0x5F, 0x44, 0x44, 0x1C, 0x14, 0x1C, 0x22, 0x7F, 0x20, 0x3E, 0x61, 0x3E, 0x20, 0x20, 0x50, 0x3F, 0x02, 0x0C, 0x80, 0x7C, 0x20, 0x3C, 0x40, 0x44, 0x3C, 0x04, 0x7C, 0x44, 0x00, 0x00, 0x08, 0x00, 0x00, 0x38, 0x55, 0x54, 0x55, 0x18, 0x7E, 0x08, 0x10, 0x7F, 0x01, 0x08, 0x10, 0x08, 0x04, 0x02, 0x14, 0x08, 0x22, 0x14, 0x08, 0x0E, 0x06, 0x0A, 0x10, 0x20, 0x20, 0x10, 0x0A, 0x06, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x30, 0x28, 0x04, 0x02, 0x02, 0x04, 0x28, 0x30, 0x38, 0x7E, 0x11, 0x11, 0x11, 0x7E, 0x7F, 0x49, 0x49, 0x49, 0x31, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x7F, 0x01, 0x01, 0x01, 0x03, 0xC0, 0x7F, 0x41, 0x7F, 0xC0, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x77, 0x08, 0x7F, 0x08, 0x77, 0x41, 0x49, 0x49, 0x49, 0x36, 0x7F, 0x10, 0x08, 0x04, 0x7F, 0x7C, 0x21, 0x12, 0x09, 0x7C, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x40, 0x3E, 0x01, 0x01, 0x7F, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x01, 0x01, 0x01, 0x7F, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x07, 0x48, 0x48, 0x48, 0x3F, 0x0E, 0x11, 0x7F, 0x11, 0x0E, 0x63, 0x14, 0x08, 0x14, 0x63, 0x7F, 0x40, 0x40, 0x7F, 0xC0, 0x07, 0x08, 0x08, 0x08, 0x7F, 0x7F, 0x40, 0x7F, 0x40, 0x7F, 0x7F, 0x40, 0x7F, 0x40, 0xFF, 0x01, 0x7F, 0x48, 0x48, 0x30, 0x7F, 0x48, 0x48, 0x30, 0x7F, 0x7F, 0x48, 0x48, 0x48, 0x30, 0x22, 0x41, 0x49, 0x49, 0x3E, 0x7F, 0x08, 0x3E, 0x41, 0x3E, 0x46, 0x29, 0x19, 0x09, 0x7F, 0x20, 0x54, 0x54, 0x54, 0x78, 0x3C, 0x4A, 0x4A, 0x49, 0x31, 0x7C, 0x54, 0x54, 0x54, 0x28, 0x7C, 0x04, 0x04, 0x04, 0x0C, 0xC0, 0x78, 0x44, 0x7C, 0xC0, 0x38, 0x54, 0x54, 0x54, 0x18, 0x6C, 0x10, 0x7C, 0x10, 0x6C, 0x44, 0x54, 0x54, 0x54, 0x28, 0x7C, 0x20, 0x10, 0x08, 0x7C, 0x7C, 0x40, 0x26, 0x10, 0x7C, 0x7C, 0x10, 0x10, 0x28, 0x44, 0x40, 0x38, 0x04, 0x04, 0x7C, 0x7C, 0x08, 0x10, 0x08, 0x7C, 0x7C, 0x10, 0x10, 0x10, 0x7C, 0x38, 0x44, 0x44, 0x44, 0x38, 0x7C, 0x04, 0x04, 0x04, 0x7C, 0x7C, 0x14, 0x14, 0x14, 0x08, 0x38, 0x44, 0x44, 0x44, 0x48, 0x04, 0x04, 0x7C, 0x04, 0x04, 0x0C, 0x50, 0x50, 0x50, 0x3C, 0x18, 0x24, 0xFC, 0x24, 0x18, 0x44, 0x28, 0x10, 0x28, 0x44, 0x7C, 0x40, 0x40, 0x7C, 0xC0, 0x0C, 0x10, 0x10, 0x10, 0x7C, 0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x7C, 0x40, 0x7C, 0x40, 0xFC, 0x04, 0x7C, 0x50, 0x50, 0x20, 0x7C, 0x50, 0x50, 0x20, 0x7C, 0x7C, 0x50, 0x50, 0x50, 0x20, 0x28, 0x44, 0x54, 0x54, 0x38, 0x7C, 0x10, 0x38, 0x44, 0x38, 0x48, 0x34, 0x14, 0x14, 0x7C}; #endif // FONT5X7_Hя тебя не сильно расстрою, если скажу, что один символ в таблице лишний? сходу не нашёл какой именно...
Я по ходу забыл, в файлы библиотеки "...GFX" надо добавить
#ifndef FONT5X7_H #define FONT5X7_H #ifdef __AVR__ #include <avr/io.h> #include <avr/pgmspace.h> #elif defined(ESP8266) #include <pgmspace.h> #else #define PROGMEM #endif // Standard ASCII 5x7 font static const unsigned char font[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x55, 0x51, 0x55, 0x3E, 0x3E, 0x6B, 0x6F, 0x6B, 0x3E, 0x0C, 0x1E, 0x3C, 0x1E, 0x0C, 0x08, 0x1C, 0x3E, 0x1C, 0x08, 0x1C, 0x4A, 0x7F, 0x4A, 0x1C, 0x18, 0x5C, 0x7F, 0x5C, 0x18, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x7F, 0x63, 0x63, 0x63, 0x7F, 0x00, 0x1C, 0x14, 0x1C, 0x00, 0x7F, 0x63, 0x6B, 0x63, 0x7F, 0x30, 0x48, 0x4D, 0x33, 0x07, 0x06, 0x29, 0x79, 0x29, 0x06, 0x20, 0x50, 0x3F, 0x02, 0x0C, 0x60, 0x7F, 0x05, 0x35, 0x3F, 0x2A, 0x1C, 0x77, 0x1C, 0x2A, 0x00, 0x7F, 0x3E, 0x1C, 0x08, 0x08, 0x1C, 0x3E, 0x7F, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x4A, 0x55, 0x55, 0x55, 0x29, 0x60, 0x60, 0x60, 0x60, 0x60, 0x54, 0x62, 0x7F, 0x62, 0x54, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x08, 0x10, 0x3F, 0x10, 0x08, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x1C, 0x10, 0x10, 0x10, 0x10, 0x1C, 0x3E, 0x08, 0x3E, 0x1C, 0x30, 0x3C, 0x3F, 0x3C, 0x30, 0x06, 0x1E, 0x7E, 0x1E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x23, 0x13, 0x08, 0x64, 0x62, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0xA0, 0x60, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x60, 0x60, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x44, 0x42, 0x7F, 0x40, 0x40, 0x42, 0x61, 0x51, 0x49, 0x46, 0x21, 0x41, 0x45, 0x4B, 0x31, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x27, 0x45, 0x45, 0x45, 0x39, 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x01, 0x71, 0x09, 0x05, 0x03, 0x36, 0x49, 0x49, 0x49, 0x36, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0xAC, 0x6C, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41, 0x22, 0x14, 0x08, 0x02, 0x01, 0x51, 0x09, 0x06, 0x3E, 0x41, 0x5D, 0x55, 0x5E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x49, 0x49, 0x7A, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, 0x60, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x46, 0x49, 0x49, 0x49, 0x31, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x3F, 0x40, 0x3C, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14, 0x63, 0x07, 0x08, 0x70, 0x08, 0x07, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x7F, 0x41, 0x41, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x41, 0x41, 0x7F, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x01, 0x02, 0x04, 0x00, 0x20, 0x54, 0x54, 0x54, 0x78, 0x7F, 0x48, 0x44, 0x44, 0x38, 0x38, 0x44, 0x44, 0x44, 0x48, 0x38, 0x44, 0x44, 0x48, 0x7F, 0x38, 0x54, 0x54, 0x54, 0x18, 0x08, 0x7E, 0x09, 0x01, 0x02, 0x08, 0x54, 0x54, 0x58, 0x3C, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x20, 0x40, 0x44, 0x3D, 0x00, 0x7F, 0x10, 0x10, 0x28, 0x44, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x38, 0x44, 0x44, 0x44, 0x38, 0x7C, 0x14, 0x14, 0x14, 0x08, 0x08, 0x14, 0x14, 0x0C, 0x7C, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x48, 0x54, 0x54, 0x54, 0x24, 0x04, 0x3F, 0x44, 0x40, 0x20, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x3C, 0x40, 0x38, 0x40, 0x3C, 0x44, 0x28, 0x10, 0x28, 0x44, 0x0C, 0x50, 0x50, 0x50, 0x3C, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x70, 0x48, 0x44, 0x48, 0x70, 0x00, 0x0E, 0x11, 0x0E, 0x00, 0x00, 0x12, 0x1F, 0x10, 0x00, 0x00, 0x12, 0x19, 0x16, 0x00, 0x00, 0x11, 0x15, 0x0B, 0x00, 0x00, 0x07, 0x04, 0x1F, 0x00, 0x00, 0x17, 0x15, 0x09, 0x00, 0x00, 0x0E, 0x15, 0x09, 0x00, 0x00, 0x01, 0x1D, 0x03, 0x00, 0x00, 0x0A, 0x15, 0x0A, 0x00, 0x00, 0x12, 0x15, 0x0E, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x3E, 0x00, 0x3E, 0x3E, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x40, 0x00, 0x40, 0x00, 0x40, 0x60, 0x00, 0x40, 0x00, 0x40, 0x60, 0x00, 0x70, 0x00, 0x40, 0x60, 0x00, 0x70, 0x00, 0x78, 0x7C, 0x00, 0x40, 0x00, 0x40, 0x7C, 0x00, 0x7E, 0x00, 0x40, 0x7C, 0x00, 0x7E, 0x00, 0x7F, 0x1C, 0x77, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x1C, 0x77, 0x41, 0x5D, 0x5D, 0x41, 0x41, 0x41, 0x5D, 0x5D, 0x5D, 0x5D, 0x41, 0x5D, 0x5D, 0x5D, 0x5D, 0x41, 0x7F, 0x00, 0x22, 0x1C, 0x14, 0x1C, 0x22, 0x00, 0x08, 0x1C, 0x08, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x46, 0x5D, 0x55, 0x5D, 0x31, 0x7C, 0x55, 0x54, 0x55, 0x44, 0x08, 0x08, 0x2A, 0x08, 0x08, 0x00, 0x14, 0x08, 0x14, 0x00, 0x08, 0x14, 0x22, 0x08, 0x14, 0x7F, 0x41, 0x71, 0x31, 0x1F, 0x03, 0x05, 0x7F, 0x05, 0x03, 0x22, 0x14, 0x7F, 0x55, 0x22, 0x02, 0x55, 0x7D, 0x05, 0x02, 0x06, 0x09, 0x09, 0x06, 0x00, 0x44, 0x44, 0x5F, 0x44, 0x44, 0x1C, 0x14, 0x1C, 0x22, 0x7F, 0x20, 0x3E, 0x61, 0x3E, 0x20, 0x20, 0x50, 0x3F, 0x02, 0x0C, 0x80, 0x7C, 0x20, 0x3C, 0x40, 0x44, 0x3C, 0x04, 0x7C, 0x44, 0x00, 0x00, 0x08, 0x00, 0x00, 0x38, 0x55, 0x54, 0x55, 0x18, 0x7E, 0x08, 0x10, 0x7F, 0x01, 0x08, 0x10, 0x08, 0x04, 0x02, 0x14, 0x08, 0x22, 0x14, 0x08, 0x0E, 0x06, 0x0A, 0x10, 0x20, 0x20, 0x10, 0x0A, 0x06, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x30, 0x28, 0x04, 0x02, 0x02, 0x04, 0x28, 0x30, 0x38, 0x7E, 0x11, 0x11, 0x11, 0x7E, 0x7F, 0x49, 0x49, 0x49, 0x31, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x7F, 0x01, 0x01, 0x01, 0x03, 0xC0, 0x7F, 0x41, 0x7F, 0xC0, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x77, 0x08, 0x7F, 0x08, 0x77, 0x41, 0x49, 0x49, 0x49, 0x36, 0x7F, 0x10, 0x08, 0x04, 0x7F, 0x7C, 0x21, 0x12, 0x09, 0x7C, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x40, 0x3E, 0x01, 0x01, 0x7F, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x01, 0x01, 0x01, 0x7F, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x07, 0x48, 0x48, 0x48, 0x3F, 0x0E, 0x11, 0x7F, 0x11, 0x0E, 0x63, 0x14, 0x08, 0x14, 0x63, 0x7F, 0x40, 0x40, 0x7F, 0xC0, 0x07, 0x08, 0x08, 0x08, 0x7F, 0x7F, 0x40, 0x7F, 0x40, 0x7F, 0x7F, 0x40, 0x7F, 0x40, 0xFF, 0x01, 0x7F, 0x48, 0x48, 0x30, 0x7F, 0x48, 0x48, 0x30, 0x7F, 0x7F, 0x48, 0x48, 0x48, 0x30, 0x22, 0x41, 0x49, 0x49, 0x3E, 0x7F, 0x08, 0x3E, 0x41, 0x3E, 0x46, 0x29, 0x19, 0x09, 0x7F, 0x20, 0x54, 0x54, 0x54, 0x78, 0x3C, 0x4A, 0x4A, 0x49, 0x31, 0x7C, 0x54, 0x54, 0x54, 0x28, 0x7C, 0x04, 0x04, 0x04, 0x0C, 0xC0, 0x78, 0x44, 0x7C, 0xC0, 0x38, 0x54, 0x54, 0x54, 0x18, 0x6C, 0x10, 0x7C, 0x10, 0x6C, 0x44, 0x54, 0x54, 0x54, 0x28, 0x7C, 0x20, 0x10, 0x08, 0x7C, 0x7C, 0x40, 0x26, 0x10, 0x7C, 0x7C, 0x10, 0x10, 0x28, 0x44, 0x40, 0x38, 0x04, 0x04, 0x7C, 0x7C, 0x08, 0x10, 0x08, 0x7C, 0x7C, 0x10, 0x10, 0x10, 0x7C, 0x38, 0x44, 0x44, 0x44, 0x38, 0x7C, 0x04, 0x04, 0x04, 0x7C, 0x7C, 0x14, 0x14, 0x14, 0x08, 0x38, 0x44, 0x44, 0x44, 0x48, 0x04, 0x04, 0x7C, 0x04, 0x04, 0x0C, 0x50, 0x50, 0x50, 0x3C, 0x18, 0x24, 0xFC, 0x24, 0x18, 0x44, 0x28, 0x10, 0x28, 0x44, 0x7C, 0x40, 0x40, 0x7C, 0xC0, 0x0C, 0x10, 0x10, 0x10, 0x7C, 0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x7C, 0x40, 0x7C, 0x40, 0xFC, 0x04, 0x7C, 0x50, 0x50, 0x20, 0x7C, 0x50, 0x50, 0x20, 0x7C, 0x7C, 0x50, 0x50, 0x50, 0x20, 0x28, 0x44, 0x54, 0x54, 0x38, 0x7C, 0x10, 0x38, 0x44, 0x38, 0x48, 0x34, 0x14, 0x14, 0x7C}; #endif // FONT5X7_Hя тебя не сильно расстрою, если скажу, что один символ в таблице лишний? сходу не нашёл какой именно...
Нет, я брал отсюда, вроде работает без глюков.
http://arduino-kid.ru/blog/adresnaya-lenta-ws2812b-beguschaya-stroka-upravlenie-shriftami
Перед попыткой выводить моноцвет по другому попробовал на экране тест, :) ожидал серый цвет, но нет, как поломатый телевизор из детства - "белочёрное мельтешенье".
// РИСУНОК тест #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(void) { // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана } void loop() { tft.fillRect(0, 0, 128, 160,tft.Color565(255,255,255)); // delay(500); tft.fillRect(0, 0, 128, 160,tft.Color565(0,0,0)); //delay(500); }выводите через строку черный/белый
какая в итоге частота мерцания ? явно должно быть не как у вас при выводе картинки ...
... явно должно быть не как у вас при выводе картинки ...
Нет, конечно быстрее, но не как ssd1306 :)
Я не перепишу функцию tft.fillRect(0, 0, 128, 160,tft.Color565(255,255,255)); вне библиотеки (жабры коротки :) под массив из progmem и уж тем более в её рамках. Не ясно почему её авторы выбрали попиксельный вывод монохромной картинки как оптимальный.
Ленивые индусы
ssd1306 это 1024 байта, а тут их в 40+ раз больше - плата за цвет. Но есть выигрыш в скорости передачи - 8МГц SPI против 400 КГц (без разгона) I2C
20+ - это на самом деле 40.
Точно ...
Нет, я брал отсюда, вроде работает без глюков.
http://arduino-kid.ru/blog/adresnaya-lenta-ws2812b-beguschaya-stroka-upravlenie-shriftami
наткнулся на косяк при использовании псевдографики )))
Взял библиотеку с этого форума, тут...посмотрел, в твоей библиотеке отсутствует буква я маленькая
Я конечно дико извиняюсь, но это опять я с этим файлом glcdfont.c в библиотеке <Adafruit_GFX.h> использую совместно с #include <Adafruit_ST7735.h> шрифты встают на свои места, если после первой половины таблицы, в начало второй половины таблицы (>127 символа) вставляю еще один (по сути 257 символ), в таблице это отражено двумя 127 символами.
В какой библиотеке править этот косяк (в каком файле)???
#ifndef FONT5X7_H #define FONT5X7_H #ifdef __AVR__ #include <avr/io.h> #include <avr/pgmspace.h> #elif defined(ESP8266) #include <pgmspace.h> #else #define PROGMEM #endif // Standard ASCII 5x7 font static const unsigned char font[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, // 0 0x01, 0x01, 0x01, 0x01, 0x01, // 1 - 0x3E, 0x55, 0x51, 0x55, 0x3E, 0x3E, 0x6B, 0x6F, 0x6B, 0x3E, // 2 0x0C, 0x1E, 0x3C, 0x1E, 0x0C, // 3 0x08, 0x1C, 0x3E, 0x1C, 0x08, // 4 0x1C, 0x4A, 0x7F, 0x4A, 0x1C, // 5 0x18, 0x5C, 0x7F, 0x5C, 0x18, // 6 0x0F, 0x01, 0x01, 0x01, 0x01, // 7 - 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x7F, 0x63, 0x63, 0x63, 0x7F, // 8 0x00, 0x1C, 0x14, 0x1C, 0x00, // 9 0x7F, 0x63, 0x6B, 0x63, 0x7F, // 10 0x30, 0x48, 0x4D, 0x33, 0x07, // 11 0x06, 0x29, 0x79, 0x29, 0x06, // 12 0x20, 0x50, 0x3F, 0x02, 0x0C, // 13 0x60, 0x7F, 0x05, 0x35, 0x3F, // 14 0x2A, 0x1C, 0x77, 0x1C, 0x2A, // 15 0x00, 0x7F, 0x3E, 0x1C, 0x08, // 16 0x08, 0x1C, 0x3E, 0x7F, 0x00, // 17 0x14, 0x22, 0x7F, 0x22, 0x14, // 18 0x00, 0x5F, 0x00, 0x5F, 0x00, // 19 0x06, 0x09, 0x7F, 0x01, 0x7F, // 20 0x4A, 0x55, 0x55, 0x55, 0x29, // 21 0x60, 0x60, 0x60, 0x60, 0x60, // 22 0x54, 0x62, 0x7F, 0x62, 0x54, // 23 0x08, 0x04, 0x7E, 0x04, 0x08, // 24 0x08, 0x10, 0x3F, 0x10, 0x08, // 25 0x08, 0x08, 0x2A, 0x1C, 0x08, // 26 0x08, 0x1C, 0x2A, 0x08, 0x08, // 27 0x1C, 0x10, 0x10, 0x10, 0x10, // 28 0x1C, 0x3E, 0x08, 0x3E, 0x1C, // 29 0x30, 0x3C, 0x3F, 0x3C, 0x30, // 30 0x06, 0x1E, 0x7E, 0x1E, 0x06, // 31 0x00, 0x00, 0x00, 0x00, 0x00, // 32 - space 0x00, 0x00, 0x5F, 0x00, 0x00, // 33 - ! 0x00, 0x07, 0x00, 0x07, 0x00, // 34 - " 0x14, 0x7F, 0x14, 0x7F, 0x14, // 35 - # 0x24, 0x2A, 0x7F, 0x2A, 0x12, // 36 - $ 0x23, 0x13, 0x08, 0x64, 0x62, // 37 - % 0x36, 0x49, 0x56, 0x20, 0x50, // 38 - & 0x00, 0x00, 0x07, 0x00, 0x00, // 39 - ' 0x00, 0x1C, 0x22, 0x41, 0x00, // 40 - ( 0x00, 0x41, 0x22, 0x1C, 0x00, // 41 - ) 0x14, 0x08, 0x3E, 0x08, 0x14, // 42 - * 0x08, 0x08, 0x3E, 0x08, 0x08, // 43 - + 0x00, 0xA0, 0x60, 0x00, 0x00, // 44 - , 0x08, 0x08, 0x08, 0x08, 0x08, // 45 - - 0x00, 0x60, 0x60, 0x00, 0x00, // 46 - . 0x20, 0x10, 0x08, 0x04, 0x02, // 47 - / 0x3E, 0x51, 0x49, 0x45, 0x3E, // 48 - 0 0x44, 0x42, 0x7F, 0x40, 0x40, // 49 - 1 0x42, 0x61, 0x51, 0x49, 0x46, // 50 - 2 0x21, 0x41, 0x45, 0x4B, 0x31, // 51 - 3 0x18, 0x14, 0x12, 0x7F, 0x10, // 52 - 4 0x27, 0x45, 0x45, 0x45, 0x39, // 53 - 5 0x3C, 0x4A, 0x49, 0x49, 0x30, // 54 - 6 0x01, 0x71, 0x09, 0x05, 0x03, // 55 - 7 0x36, 0x49, 0x49, 0x49, 0x36, // 56 - 8 0x06, 0x49, 0x49, 0x29, 0x1E, // 57 - 9 0x00, 0x6C, 0x6C, 0x00, 0x00, // 58 - : 0x00, 0xAC, 0x6C, 0x00, 0x00, // 59 - ; 0x08, 0x14, 0x22, 0x41, 0x00, // 60 - < 0x14, 0x14, 0x14, 0x14, 0x14, // 61 - = 0x00, 0x41, 0x22, 0x14, 0x08, // 62 - > 0x02, 0x01, 0x51, 0x09, 0x06, // 63 - ? 0x3E, 0x41, 0x5D, 0x55, 0x5E, // 64 - @ 0x7C, 0x12, 0x11, 0x12, 0x7C, // 65 - A 0x7F, 0x49, 0x49, 0x49, 0x36, // 66 - B 0x3E, 0x41, 0x41, 0x41, 0x22, // 67 - C 0x7F, 0x41, 0x41, 0x22, 0x1C, // 68 - D 0x7F, 0x49, 0x49, 0x49, 0x41, // 69 - E 0x7F, 0x09, 0x09, 0x09, 0x01, // 70 - F 0x3E, 0x41, 0x49, 0x49, 0x7A, // 71 - G 0x7F, 0x08, 0x08, 0x08, 0x7F, // 72 - H 0x00, 0x41, 0x7F, 0x41, 0x00, // 73 - I 0x20, 0x40, 0x41, 0x3F, 0x01, // 74 - J 0x7F, 0x08, 0x14, 0x22, 0x41, // 75 - K 0x7F, 0x40, 0x40, 0x40, 0x60, // 76 - L 0x7F, 0x02, 0x0C, 0x02, 0x7F, // 77 - M 0x7F, 0x04, 0x08, 0x10, 0x7F, // 78 - N 0x3E, 0x41, 0x41, 0x41, 0x3E, // 79 - O 0x7F, 0x09, 0x09, 0x09, 0x06, // 80 - P 0x3E, 0x41, 0x51, 0x21, 0x5E, // 81 - Q 0x7F, 0x09, 0x19, 0x29, 0x46, // 82 - R 0x46, 0x49, 0x49, 0x49, 0x31, // 83 - S 0x03, 0x01, 0x7F, 0x01, 0x03, // 84 - T 0x3F, 0x40, 0x40, 0x40, 0x3F, // 85 - U 0x1F, 0x20, 0x40, 0x20, 0x1F, // 86 - V 0x3F, 0x40, 0x3C, 0x40, 0x3F, // 87 - W 0x63, 0x14, 0x08, 0x14, 0x63, // 88 - X 0x07, 0x08, 0x70, 0x08, 0x07, // 89 - Y 0x61, 0x51, 0x49, 0x45, 0x43, // 90 - Z 0x00, 0x7F, 0x41, 0x41, 0x00, // 91 - 0x02, 0x04, 0x08, 0x10, 0x20, // 92 - 0x00, 0x41, 0x41, 0x7F, 0x00, // 93 - 0x04, 0x02, 0x01, 0x02, 0x04, // 94 - 0x40, 0x40, 0x40, 0x40, 0x40, // 95 - 0x00, 0x01, 0x02, 0x04, 0x00, // 96 - 0x20, 0x54, 0x54, 0x54, 0x78, // 97 - 0x7F, 0x48, 0x44, 0x44, 0x38, // 98 - 0x38, 0x44, 0x44, 0x44, 0x48, // 99 - 0x38, 0x44, 0x44, 0x48, 0x7F, // 100 - 0x38, 0x54, 0x54, 0x54, 0x18, // 101 - 0x08, 0x7E, 0x09, 0x01, 0x02, // 102 - 0x08, 0x54, 0x54, 0x58, 0x3C, // 103 - 0x7F, 0x08, 0x04, 0x04, 0x78, // 104 - 0x00, 0x44, 0x7D, 0x40, 0x00, // 105 - 0x20, 0x40, 0x44, 0x3D, 0x00, // 106 - 0x7F, 0x10, 0x10, 0x28, 0x44, // 107 - 0x00, 0x41, 0x7F, 0x40, 0x00, // 108 - 0x7C, 0x04, 0x78, 0x04, 0x78, // 109 - 0x7C, 0x08, 0x04, 0x04, 0x78, // 110 - 0x38, 0x44, 0x44, 0x44, 0x38, // 111 - 0x7C, 0x14, 0x14, 0x14, 0x08, // 112 - 0x08, 0x14, 0x14, 0x0C, 0x7C, // 113 - 0x7C, 0x08, 0x04, 0x04, 0x08, // 114 - 0x48, 0x54, 0x54, 0x54, 0x24, // 115 - 0x04, 0x3F, 0x44, 0x40, 0x20, // 116 - 0x3C, 0x40, 0x40, 0x20, 0x7C, // 117 - 0x1C, 0x20, 0x40, 0x20, 0x1C, // 118 - 0x3C, 0x40, 0x38, 0x40, 0x3C, // 119 - 0x44, 0x28, 0x10, 0x28, 0x44, // 120 - 0x0C, 0x50, 0x50, 0x50, 0x3C, // 121 - 0x44, 0x64, 0x54, 0x4C, 0x44, // 122 - 0x00, 0x08, 0x36, 0x41, 0x00, // 123 - 0x00, 0x00, 0x7F, 0x00, 0x00, // 124 - 0x00, 0x41, 0x36, 0x08, 0x00, // 125 - 0x02, 0x01, 0x02, 0x04, 0x02, // 126 - 0x70, 0x48, 0x44, 0x48, 0x70, // 127 - 0x70, 0x48, 0x44, 0x48, 0x70, // 127 - 0x00, 0x0E, 0x11, 0x0E, 0x00, // 128 - 0x00, 0x12, 0x1F, 0x10, 0x00, // 129 - 0x00, 0x12, 0x19, 0x16, 0x00, // 130 - 0x00, 0x11, 0x15, 0x0B, 0x00, // 131 - 0x00, 0x07, 0x04, 0x1F, 0x00, // 132 - 0x00, 0x17, 0x15, 0x09, 0x00, // 133 - 0x00, 0x0E, 0x15, 0x09, 0x00, // 134 - 0x00, 0x01, 0x1D, 0x03, 0x00, // 135 - 0x00, 0x0A, 0x15, 0x0A, 0x00, // 136 - 0x00, 0x12, 0x15, 0x0E, 0x00, // 137 - 0x00, 0x04, 0x04, 0x04, 0x00, // 138 - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 139 - 0x3E, 0x00, 0x00, 0x00, 0x00, // 140 - 0x3E, 0x3E, 0x00, 0x00, 0x00, // 141 - 0x3E, 0x3E, 0x00, 0x3E, 0x00, // 142 - 0x3E, 0x3E, 0x00, 0x3E, 0x3E, // 143 - 0x80, 0x80, 0x80, 0x80, 0x80, // 144 - 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, // 145 - 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, // 146 - 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, // 147 - 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, // 148 - 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, // 149 - 0x40, 0x00, 0x40, 0x00, 0x40, // 150 - 0x60, 0x00, 0x40, 0x00, 0x40, // 151 - 0x60, 0x00, 0x70, 0x00, 0x40, // 152 - 0x60, 0x00, 0x70, 0x00, 0x78, // 153 - 0x7C, 0x00, 0x40, 0x00, 0x40, // 154 - 0x7C, 0x00, 0x7E, 0x00, 0x40, // 155 - 0x7C, 0x00, 0x7E, 0x00, 0x7F, // 156 - 0x1C, 0x77, 0x41, 0x41, 0x41, // 157 - 0x41, 0x41, 0x41, 0x41, 0x41, // 158 - 0x41, 0x41, 0x41, 0x7F, 0x00, // 159 - 0x1C, 0x77, 0x41, 0x5D, 0x5D, // 160 - 0x41, 0x41, 0x41, 0x5D, 0x5D, // 161 - 0x5D, 0x5D, 0x41, 0x5D, 0x5D, // 162 - 0x5D, 0x5D, 0x41, 0x7F, 0x00, // 163 - 0x22, 0x1C, 0x14, 0x1C, 0x22, // 164 - 0x00, 0x08, 0x1C, 0x08, 0x00, // 165 - 0x00, 0x00, 0x77, 0x00, 0x00, // 166 - 0x46, 0x5D, 0x55, 0x5D, 0x31, // 167 - 0x7C, 0x55, 0x54, 0x55, 0x44, // 168 - 0x08, 0x08, 0x2A, 0x08, 0x08, // 169 - 0x00, 0x14, 0x08, 0x14, 0x00, // 170 - 0x08, 0x14, 0x22, 0x08, 0x14, // 171 - 0x7F, 0x41, 0x71, 0x31, 0x1F, // 172 - 0x03, 0x05, 0x7F, 0x05, 0x03, // 173 - 0x22, 0x14, 0x7F, 0x55, 0x22, // 174 - 0x02, 0x55, 0x7D, 0x05, 0x02, // 175 - 0x06, 0x09, 0x09, 0x06, 0x00, // 176 - 0x44, 0x44, 0x5F, 0x44, 0x44, // 177 - 0x1C, 0x14, 0x1C, 0x22, 0x7F, // 178 - 0x20, 0x3E, 0x61, 0x3E, 0x20, // 179 - 0x20, 0x50, 0x3F, 0x02, 0x0C, // 180 - 0x80, 0x7C, 0x20, 0x3C, 0x40, // 181 - 0x44, 0x3C, 0x04, 0x7C, 0x44, // 182 - 0x00, 0x00, 0x08, 0x00, 0x00, // 183 - 0x38, 0x55, 0x54, 0x55, 0x18, // 184 - 0x7E, 0x08, 0x10, 0x7F, 0x01, // 185 - 0x08, 0x10, 0x08, 0x04, 0x02, // 186 - 0x14, 0x08, 0x22, 0x14, 0x08, // 187 - 0x0E, 0x06, 0x0A, 0x10, 0x20, // 188 - 0x20, 0x10, 0x0A, 0x06, 0x0E, // 189 - 0x38, 0x30, 0x28, 0x04, 0x02, // 190 - 0x02, 0x04, 0x28, 0x30, 0x38, // 191 - 0x00, 0x00, 0x00, 0x00, 0xFF, // 192 - C0 - 0x7E, 0x11, 0x11, 0x11, 0x7E, //C0 0x7F, 0x49, 0x49, 0x49, 0x31, // 193 - C1 0x7F, 0x49, 0x49, 0x49, 0x36, // 194 - C2 0x7F, 0x01, 0x01, 0x01, 0x03, // 195 - C3 0xC0, 0x7F, 0x41, 0x7F, 0xC0, // 196 - C4 0x7F, 0x49, 0x49, 0x49, 0x41, // 197 - C5 0x77, 0x08, 0x7F, 0x08, 0x77, // 198 - C6 0x41, 0x49, 0x49, 0x49, 0x36, // 199 - C7 0x7F, 0x10, 0x08, 0x04, 0x7F, // 200 - C8 0x7C, 0x21, 0x12, 0x09, 0x7C, // 201 - C9 0x7F, 0x08, 0x14, 0x22, 0x41, // 202 - CA 0x40, 0x3E, 0x01, 0x01, 0x7F, // 203 - CB 0x7F, 0x02, 0x0C, 0x02, 0x7F, // 204 - CC 0x7F, 0x08, 0x08, 0x08, 0x7F, // 205 - CD 0x3E, 0x41, 0x41, 0x41, 0x3E, // 206 - CE 0x7F, 0x01, 0x01, 0x01, 0x7F, // 207 - CF 0x7F, 0x09, 0x09, 0x09, 0x06, // 208 - D0 0x3E, 0x41, 0x41, 0x41, 0x22, // 209 - D1 0x01, 0x01, 0x7F, 0x01, 0x01, // 210 - D2 0x07, 0x48, 0x48, 0x48, 0x3F, // 211 - D3 0x0E, 0x11, 0x7F, 0x11, 0x0E, // 212 - D4 0x63, 0x14, 0x08, 0x14, 0x63, // 213 - D5 0x7F, 0x40, 0x40, 0x7F, 0xC0, // 214 - D6 0x07, 0x08, 0x08, 0x08, 0x7F, // 215 - D7 0x7F, 0x40, 0x7F, 0x40, 0x7F, // 216 - D8 0x7F, 0x40, 0x7F, 0x40, 0xFF, // 217 - D9 0x01, 0x7F, 0x48, 0x48, 0x30, // 218 - DA 0x7F, 0x48, 0x48, 0x30, 0x7F, // 219 - DB 0x7F, 0x48, 0x48, 0x48, 0x30, // 220 - DC 0x22, 0x41, 0x49, 0x49, 0x3E, // 221 - DD 0x7F, 0x08, 0x3E, 0x41, 0x3E, // 222 - DE 0x46, 0x29, 0x19, 0x09, 0x7F, // 223 - DF 0x20, 0x54, 0x54, 0x54, 0x78, // 224 - E0 0x3C, 0x4A, 0x4A, 0x49, 0x31, // 225 - E1 0x7C, 0x54, 0x54, 0x54, 0x28, // 226 - E2 0x7C, 0x04, 0x04, 0x04, 0x0C, // 227 - E3 0xC0, 0x78, 0x44, 0x7C, 0xC0, // 228 - E4 0x38, 0x54, 0x54, 0x54, 0x18, // 229 - E5 0x00, 0x00, 0x00, 0xFF, 0x00, // 230 - E6 - 0x6C, 0x10, 0x7C, 0x10, 0x6C, 0x44, 0x54, 0x54, 0x54, 0x28, // 231 - E7 0x7C, 0x20, 0x10, 0x08, 0x7C, // 232 - E8 0x7C, 0x40, 0x26, 0x10, 0x7C, // 233 - E9 0x7C, 0x10, 0x10, 0x28, 0x44, // 234 - EA 0x40, 0x38, 0x04, 0x04, 0x7C, // 235 - EB 0x7C, 0x08, 0x10, 0x08, 0x7C, // 236 - EC 0x7C, 0x10, 0x10, 0x10, 0x7C, // 237 - ED 0x38, 0x44, 0x44, 0x44, 0x38, // 238 - EE 0x7C, 0x04, 0x04, 0x04, 0x7C, // 239 - EF 0xFF, 0x00, 0x00, 0x00, 0x00, // 240 - F0 - 0x7C, 0x14, 0x14, 0x14, 0x08, 0x00, 0xFF, 0x00, 0x00, 0x00, // 241 - F1 - 0x38, 0x44, 0x44, 0x44, 0x48, 0x04, 0x04, 0x7C, 0x04, 0x04, // 242 - F2 0x0C, 0x50, 0x50, 0x50, 0x3C, // 243 - F3 0x18, 0x24, 0xFC, 0x24, 0x18, // 244 - F4 0x44, 0x28, 0x10, 0x28, 0x44, // 245 - F5 0x7C, 0x40, 0x40, 0x7C, 0xC0, // 246 - F6 0x0C, 0x10, 0x10, 0x10, 0x7C, // 247 - F7 0x00, 0x00, 0xFF, 0x00, 0x00, // 248 - F8 - 0x7C, 0x40, 0x7C, 0x40, 0x7C, //F8 0x4C, 0x90, 0x90, 0x90, 0x7C, // 249 - F9 - 0x7C, 0x40, 0x7C, 0x40, 0xFC, 0x04, 0x7C, 0x50, 0x50, 0x20, // 250 - FA 0x7C, 0x50, 0x50, 0x20, 0x7C, // 251 - FB 0x7C, 0x50, 0x50, 0x50, 0x20, // 252 - FC 0x28, 0x44, 0x54, 0x54, 0x38, // 253 - FD 0x02, 0x01, 0x02, 0x04, 0x02, // 254 - FE - 0x7C, 0x10, 0x38, 0x44, 0x38, //FE 0xFF, 0x01, 0x01, 0x01, 0x01};// 255 - FF - 0x48, 0x34, 0x14, 0x14, 0x7C #endif // FONT5X7_HЯ наверное че то не понимаю, но вывести пиксельный рисунок на растр ничего не стОит, нафига библиотеки. Есть растр в инете кодировки win1251, а вывести её в экран просто
в адафрутовской библиотеке есть косяк, хочется найти и исправить, так как я лично её пользую...
ua6em а есть уверенность что она может больше 256 символов ???
void Adafruit_GFX::drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size) { drawChar(x, y, c, color, bg, size, size);
Что мешает пройти вывод символа по шагам ???
ua6em а есть уверенность что она может больше 256 символов ???
void Adafruit_GFX::drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size) { drawChar(x, y, c, color, bg, size, size);
Что мешает пройти вывод символа по шагам ???
да и не должна, я о том и говорю, что в таблице с русской кодировкой 257 символов...
по моему эта тема уже была на форуме, но не нашёл...
В оригинальной с умляутами чётко 256...
Я что этой темой озадачился, не пошла кодировка (отображение псевдографикой) при переносе кода сканера 2.4 на другой камень и другой монитор, ST7735 ... плюнул, переделал на вывод отображения сигнала через графику...и быстрее и точнее получилось...но раз непонятки остались надо эту тему добить
в таблице с русской кодировкой 257 символов...
:)
Пытаясь увеличить скорость вывода картинки, напоролся на встроенную в "иде" библиотеку TFT. Думаю, счас скорость другой библиотекой наращу... Полез.
А она по сути и есть адафрутовская из двух. В ней как раз исходник этого файла-буквахрана. Так там 254 символа, если я правильно пересчитал.
PS Буква "я маленькая" и вправду не выводится.
Недооценил я себя. Методом тыка и глубоких диванных раздумий увеличил существенно скорость вывода картинки во весь экран. Но сделать с границами областей и координатами вывода не могу... и мельтишат картинки, всё равно глаз видит смену. Слабый экран в сравнении с SSD1306. Я уже молчу если светодиод(ы?) подсветки перегорит или понадобиться гирлянда экранов на про мини 168? или грамотно ставить резисторы - в делители (10 штук).
// РИСУНОК #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); extern const unsigned char ris_1[]; extern const unsigned char ris_2[]; void setup(void) { // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана } void loop() { drawBitmap_(ris_1); drawBitmap_(ris_2); } ///////////////////////////////////////////////////////////////////// void drawBitmap_(const uint8_t *bitmap) { tft.setAddrWindow(0,0,128,160); int16_t i, j, byteWidth = (128 + 7) / 8; uint8_t byte; for(j=0; j<160; j++) { for(i=0; i<128; i++) { if(i & 7) byte <<= 1; else byte = pgm_read_byte(bitmap + j * byteWidth + i / 8); if(byte & 0x80) { tft.pushColor(tft.Color565(255,255,255) ); } else { tft.pushColor(tft.Color565(0,0,0) ); } } } } /////////////////////////////////////////////////////////////////////есть функция в SPI
inline static void transfer(void *buf, size_t count) { if (count == 0) return; uint8_t *p = (uint8_t *)buf; SPDR = *p; while (--count > 0) { uint8_t out = *(p + 1); while (!(SPSR & _BV(SPIF))) ; uint8_t in = SPDR; SPDR = out; *p++ = in; } while (!(SPSR & _BV(SPIF))) ; *p = SPDR; }уже выше неоднократно писалось, сделайте буфер для одной строки и тупо построчно заполняйте экран.
update: наверное как то так, проверить не на чем.
#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); extern const unsigned char ris_1[]; extern const unsigned char ris_2[]; #define dispW 128 #define dispH 160 unsigned char lineBuf[dispW * 2]; void setup() { // put your setup code here, to run once: // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана } void loop() { // put your main code here, to run repeatedly: drawBitmap_(ris_1); drawBitmap_(ris_2); } void drawBitmap_(const uint8_t *bitmap) { for (unsigned short j = 0; j < dispH; j++) { for (unsigned short i = 0; i < dispW; ++i) { unsigned char sourceByte = pgm_read_byte(bitmap + j * dispW + i); for (unsigned char k = 0; k < 8; ++k) { if (bitRead(sourceByte, k)) { lineBuf[i * 2] = 0xFF; lineBuf[i * 2 + 1] = 0xFF; // white color } else { lineBuf[i * 2] = 0x00; lineBuf[i * 2 + 1] = 0x00; // black color } } } tft.setAddrWindow(0, j, dispW-1, j); tft.transfer(&lineBuf, dispW); } }в таблице с русской кодировкой 257 символов...
Даже с оригинальной, что в поставке проблема, там 256 символов, от 0 до 255, исправляешь 255, а выводить его надо как 254 )))
О чём и речь )))
update: наверное как то так, проверить не на чем.
#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); extern const unsigned char ris_1[]; extern const unsigned char ris_2[]; #define dispW 128 #define dispH 160 unsigned char lineBuf[dispW * 2]; void setup() { // put your setup code here, to run once: // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана } void loop() { // put your main code here, to run repeatedly: drawBitmap_(ris_1); drawBitmap_(ris_2); } void drawBitmap_(const uint8_t *bitmap) { for (unsigned short j = 0; j < dispH; j++) { for (unsigned short i = 0; i < dispW; ++i) { unsigned char sourceByte = pgm_read_byte(bitmap + j * dispW + i); for (unsigned char k = 0; k < 7; ++k) { if (bitRead(sourceByte, k)) { lineBuf[i * 2] = 0xFF; lineBuf[i * 2 + 1] = 0xFF; // white color } else { lineBuf[i * 2] = 0x00; lineBuf[i * 2 + 1] = 0x00; // black color } } } tft.setAddrWindow(0, j, dispW-1, j); tft.transfer(&lineBuf, dispW); } }Нет, экран чёрный, сначала не компилировалось, по наитию подправил строку 48 , но не помогло.
//РИСУНОК #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); extern const unsigned char ris_1[]; extern const unsigned char ris_2[]; #define dispW 128 #define dispH 160 unsigned char lineBuf[dispW * 2]; void setup() { // put your setup code here, to run once: // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана } void loop() { // put your main code here, to run repeatedly: drawBitmap_(ris_1); drawBitmap_(ris_2); } void drawBitmap_(const uint8_t *bitmap) { for (unsigned short j = 0; j < dispH; j++) { for (unsigned short i = 0; i < dispW; ++i) { unsigned char sourceByte = pgm_read_byte(bitmap + j * dispW + i); for (unsigned char k = 0; k < 7; ++k) { if (bitRead(sourceByte, k)) { lineBuf[i * 2] = 0xFF; lineBuf[i * 2 + 1] = 0xFF; // white color } else { lineBuf[i * 2] = 0x00; lineBuf[i * 2 + 1] = 0x00; // black color } } } tft.setAddrWindow(0, j, dispW-1, j); SPI.transfer(&lineBuf, dispW); } } //////////////////////////////////////////////////////////////////////////////////////в таблице с русской кодировкой 257 символов...
Даже с оригинальной, что в поставке проблема, там 256 символов, от 0 до 255, исправляешь 255, а выводить его надо как 254 )))
О чём и речь )))
эт как? может код символа из раблицы кривой берете? есть таблица win1251 например - там все заполнено и нет никакх "исправляешь 255, а выводить его надо как 254"
update: наверное как то так, проверить не на чем.
#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); extern const unsigned char ris_1[]; extern const unsigned char ris_2[]; #define dispW 128 #define dispH 160 unsigned char lineBuf[dispW * 2]; void setup() { // put your setup code here, to run once: // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана } void loop() { // put your main code here, to run repeatedly: drawBitmap_(ris_1); drawBitmap_(ris_2); } void drawBitmap_(const uint8_t *bitmap) { for (unsigned short j = 0; j < dispH; j++) { for (unsigned short i = 0; i < dispW; ++i) { unsigned char sourceByte = pgm_read_byte(bitmap + j * dispW + i); for (unsigned char k = 0; k < 7; ++k) { if (bitRead(sourceByte, k)) { lineBuf[i * 2] = 0xFF; lineBuf[i * 2 + 1] = 0xFF; // white color } else { lineBuf[i * 2] = 0x00; lineBuf[i * 2 + 1] = 0x00; // black color } } } tft.setAddrWindow(0, j, dispW-1, j); tft.transfer(&lineBuf, dispW); } }Нет, экран чёрный, сначала не компилировалось, по наитию подправил строку 48 , но не помогло.
//РИСУНОК #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); extern const unsigned char ris_1[]; extern const unsigned char ris_2[]; #define dispW 128 #define dispH 160 unsigned char lineBuf[dispW * 2]; void setup() { // put your setup code here, to run once: // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана } void loop() { // put your main code here, to run repeatedly: drawBitmap_(ris_1); drawBitmap_(ris_2); } void drawBitmap_(const uint8_t *bitmap) { for (unsigned short j = 0; j < dispH; j++) { for (unsigned short i = 0; i < dispW; ++i) { unsigned char sourceByte = pgm_read_byte(bitmap + j * dispW + i); for (unsigned char k = 0; k < 7; ++k) { if (bitRead(sourceByte, k)) { lineBuf[i * 2] = 0xFF; lineBuf[i * 2 + 1] = 0xFF; // white color } else { lineBuf[i * 2] = 0x00; lineBuf[i * 2 + 1] = 0x00; // black color } } } tft.setAddrWindow(0, j, dispW-1, j); SPI.transfer(&lineBuf, dispW); } } //////////////////////////////////////////////////////////////////////////////////////не подскажу :(
нет такого дисплея, но чую функцию вывода не в 48 строке менять надо, а добавить внутрь библиотеки
Тогда SPI.transfer(&lineBuf, dispW); останется и должна заработать?, а в tft.setAddrWindow(0, j, dispW-1, j); убрать хвост tft.
Кстати померил отношение скоростей вывода в исходном варианте и в крайнем с помощью секундомера. Около 1 к 12 раз.
Тогда SPI.transfer(&lineBuf, dispW); останется и должна заработать?, а в tft.setAddrWindow(0, j, dispW-1, j); убрать хвост tft.
никаких хвостов убирать не надо
по хорошему добавить в библиотеку Адафрута новую функцию которая выводит не пиксель, я именно строку.
Завтра может время найду поставлю эти библиотеки. посмотрю.
Кстати померил отношение скоростей вывода в исходном варианте и в крайнем с помощью секундомера. Около 1 к 12 раз.
progmem медленная хрень, в любом случае чуда не случится, глобального улучшения не получите!
Кстати померил отношение скоростей вывода в исходном варианте и в крайнем с помощью секундомера. Около 1 к 12 раз.
progmem медленная хрень, в любом случае чуда не случится, глобального улучшения не получите!
Да, я понял, но всё же связываю это с самим экраном. Делал на ssd1306 (4 вывода) мимику глазами роботу-игрушке, 5 картинок-позиций глаз из progmem - смена картинок не видна была.
эт как? может код символа из раблицы кривой берете? есть таблица win1251 например - там все заполнено и нет никакх "исправляешь 255, а выводить его надо как 254"
Даже с оригинальной, что в поставке проблема, там 256 символов, от 0 до 255, исправляешь 255, а выводить его надо как 254 )))
О чём и речь )))
в таблице шрифты 5х8, правлю один символ - 255, далее выводить его надо не как 255, а как 254, tft.print(char(254)); тогда всё пучком
0x00, 0x00, 0x10, 0x10, 0x00, // - 250 0x30, 0x40, 0xFF, 0x01, 0x01, // - 251 0x00, 0x1F, 0x01, 0x01, 0x1E, // - 252 0x00, 0x19, 0x1D, 0x17, 0x12, // - 253 0x00, 0x3C, 0x3C, 0x3C, 0x3C, // - 254 0xFF, 0x01, 0x01, 0x01, 0x01 // - 255 0x00, 0x00, 0x00, 0x00, 0x00 // #255 NBSP }; // allow clean compilation with [-Wunused-const-variable=] and [-Wall] static inline void avoid_unused_const_variable_compiler_warning(void) { (void)font; } #endif // FONT5X7_HВсё разобрался, когда нашёл, что пропускается 176 символ нашёл и отчего это и как решить )))
Исправленный код секундомера под RP2040:
// СЕКУНДОМЕР #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library for ST7735 #include <Adafruit_ST7789.h> // Hardware-specific library for ST7789 #include <SPI.h> #define SPI01 // Дисплей на SPI1, NRF24L01 на SPI0 #if defined(SPI01) // для RP2040 SPI1 #define TFT_CS 13 // GP13 - CS #define TFT_RST 14 // GP14 - RESET #define TFT_DC 15 // GP15 - A0 #define TFT_MISO 12 // GP12 - MISO (MISO, RX) #define TFT_MOSI 11 // GP11 - SDA (MOSI, TX) #define TFT_SCLK 10 // GP10 - SCK #else // для RP2040 SPI0 #define TFT_CS 5 // GP5 - CS #define TFT_RST 6 // GP6 - RESET #define TFT_DC 7 // GP7 - A0 #define TFT_MISO 4 // GP4 - MISO (MISO, RX) #define TFT_MOSI 3 // GP3 - SDA (MOSI, TX) #define TFT_SCLK 2 // GP2 - SCK #endif // For ST7735-based displays, we will use this call Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); float a = 0.00; // переменная для угла поворота стрелки float aa = 0.00; // переменная для угла поворота стрелки (предыдущее значение) int str = 55; //длина стрелки в пикселях byte sek = 16; // void setup(void) { // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.cp437(true); // не пропускаем 176 символ tft.fillScreen(ST7735_BLACK); tft.setRotation(1);//ориентация экрана tft.setSPISpeed(50000000); tft.drawCircle(80, 64, 63, ST7735_WHITE ); //обод секундомера tft.drawCircle(80, 64, 62, ST7735_WHITE ); tft.drawCircle(80, 64, 61, ST7735_WHITE ); } void loop() { // aa = a; // tft.drawLine(80, 64, 80 + cos(aa)*str, 64 + sin(aa)*str,ST7735_BLACK ); // стирание старой стрелки-отрезка tft.drawLine(80 + cos(aa + 1.5)*str * 0.1, 64 + sin(aa + 1.5)*str * 0.1, 80 + cos(aa)*str, 64 + sin(aa)*str, ST7735_BLACK ); // стирание старой стрелки tft.drawLine(80 + cos(aa - 1.5)*str * 0.1, 64 + sin(aa - 1.5)*str * 0.1, 80 + cos(aa)*str, 64 + sin(aa)*str, ST7735_BLACK ); // стирание старой стрелки a = a + PI / 30; for (float i = 0.01; i < 2 * PI; i = i + PI / 30) { tft.drawLine(80 + cos(i)*str * 0.9, 64 + sin(i)*str * 0.9, 80 + cos(i)*str, 64 + sin(i)*str, ST7735_GREEN ); // риски-метки шкалы через 1 сек } for (float i = 0.01; i < 2 * PI; i = i + PI / 6) { tft.drawLine(80 + cos(i)*str * 0.75, 64 + sin(i)*str * 0.75, 80 + cos(i)*str, 64 + sin(i)*str, ST7735_WHITE ); // риски-метки шкалы через 5 сек } // tft.drawLine(80, 64, 80 + cos(a)*str, 64 + sin(a)*str,ST7735_WHITE ); // рисование новой стрелки-отрезка tft.drawLine(80 + cos(a + 1.5)*str * 0.1, 64 + sin(a + 1.5)*str * 0.1, 80 + cos(a)*str, 64 + sin(a)*str, ST7735_WHITE ); // рисование новой стрелки tft.drawLine(80 + cos(a - 1.5)*str * 0.1, 64 + sin(a - 1.5)*str * 0.1, 80 + cos(a)*str, 64 + sin(a)*str, ST7735_WHITE ); // рисование новой стрелки // tft.drawCircle(80, 64, 5, ST7735_WHITE ); tft.drawCircle(80, 64, 4, ST7735_WHITE ); tft.setCursor(50, 45); tft.setTextSize(1); tft.setTextColor(ST7735_GREEN); tft.println(utf8rus("СЕКУНДОМЕР")); tft.setCursor(70, 80); tft.setTextSize(2); tft.setTextColor(ST7735_GREEN); if (sek < 10) { tft.print("0"); } tft.println(sek); sek++; if (sek > 59) { sek = 0; } // delay(835);//подбираем опытным путём tft.fillRect(70, 80, 30, 20, ST7735_BLACK); } //////////////////////////////////////////////////////////////////////// /* Функция перекодировки русских букв из UTF-8 в Win-1251 */ String utf8rus(String source) { int i, k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; } ///////////////////////////////////////////////////////////////////////////Правильная версия файла русифицированных фонтов - glcdfont.c
(находится в библиотеке <Adafruit_GFX.h> (заменить или старую переименовать и скопировать новую)
// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0. // See gfxfont.h for newer custom bitmap font info. #ifndef FONT5X7_H #define FONT5X7_H #ifdef __AVR__ #include <avr/io.h> #include <avr/pgmspace.h> #elif defined(ESP8266) #include <pgmspace.h> #elif defined(__IMXRT1052__) || defined(__IMXRT1062__) // PROGMEM is defefind for T4 to place data in specific memory section #undef PROGMEM #define PROGMEM #else #define PROGMEM #endif static const unsigned char font[] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x55, 0x51, 0x55, 0x3E, 0x3E, 0x6B, 0x6F, 0x6B, 0x3E, 0x0C, 0x1E, 0x3C, 0x1E, 0x0C, 0x08, 0x1C, 0x3E, 0x1C, 0x08, 0x1C, 0x4A, 0x7F, 0x4A, 0x1C, 0x18, 0x5C, 0x7F, 0x5C, 0x18, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x7F, 0x63, 0x63, 0x63, 0x7F, 0x00, 0x1C, 0x14, 0x1C, 0x00, 0x7F, 0x63, 0x6B, 0x63, 0x7F, 0x30, 0x48, 0x4D, 0x33, 0x07, 0x06, 0x29, 0x79, 0x29, 0x06, 0x20, 0x50, 0x3F, 0x02, 0x0C, 0x60, 0x7F, 0x05, 0x35, 0x3F, 0x2A, 0x1C, 0x77, 0x1C, 0x2A, 0x00, 0x7F, 0x3E, 0x1C, 0x08, 0x08, 0x1C, 0x3E, 0x7F, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, 0x5F, 0x00, 0x5F, 0x00, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x4A, 0x55, 0x55, 0x55, 0x29, 0x60, 0x60, 0x60, 0x60, 0x60, 0x54, 0x62, 0x7F, 0x62, 0x54, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x08, 0x10, 0x3F, 0x10, 0x08, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x1C, 0x10, 0x10, 0x10, 0x10, 0x1C, 0x3E, 0x08, 0x3E, 0x1C, 0x30, 0x3C, 0x3F, 0x3C, 0x30, 0x06, 0x1E, 0x7E, 0x1E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x23, 0x13, 0x08, 0x64, 0x62, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0xA0, 0x60, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x60, 0x60, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x44, 0x42, 0x7F, 0x40, 0x40, 0x42, 0x61, 0x51, 0x49, 0x46, 0x21, 0x41, 0x45, 0x4B, 0x31, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x27, 0x45, 0x45, 0x45, 0x39, 0x3C, 0x4A, 0x49, 0x49, 0x30, 0x01, 0x71, 0x09, 0x05, 0x03, 0x36, 0x49, 0x49, 0x49, 0x36, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0xAC, 0x6C, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x41, 0x22, 0x14, 0x08, 0x02, 0x01, 0x51, 0x09, 0x06, 0x3E, 0x41, 0x5D, 0x55, 0x5E, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x3E, 0x41, 0x49, 0x49, 0x7A, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, 0x60, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x46, 0x49, 0x49, 0x49, 0x31, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x3F, 0x40, 0x3C, 0x40, 0x3F, 0x63, 0x14, 0x08, 0x14, 0x63, 0x07, 0x08, 0x70, 0x08, 0x07, 0x61, 0x51, 0x49, 0x45, 0x43, 0x00, 0x7F, 0x41, 0x41, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x41, 0x41, 0x7F, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x01, 0x02, 0x04, 0x00, 0x20, 0x54, 0x54, 0x54, 0x78, 0x7F, 0x48, 0x44, 0x44, 0x38, 0x38, 0x44, 0x44, 0x44, 0x48, 0x38, 0x44, 0x44, 0x48, 0x7F, 0x38, 0x54, 0x54, 0x54, 0x18, 0x08, 0x7E, 0x09, 0x01, 0x02, 0x08, 0x54, 0x54, 0x58, 0x3C, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x20, 0x40, 0x44, 0x3D, 0x00, 0x7F, 0x10, 0x10, 0x28, 0x44, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x38, 0x44, 0x44, 0x44, 0x38, 0x7C, 0x14, 0x14, 0x14, 0x08, 0x08, 0x14, 0x14, 0x0C, 0x7C, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x48, 0x54, 0x54, 0x54, 0x24, 0x04, 0x3F, 0x44, 0x40, 0x20, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x3C, 0x40, 0x38, 0x40, 0x3C, 0x44, 0x28, 0x10, 0x28, 0x44, 0x0C, 0x50, 0x50, 0x50, 0x3C, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x70, 0x48, 0x44, 0x48, 0x70, 0x00, 0x0E, 0x11, 0x0E, 0x00, 0x00, 0x12, 0x1F, 0x10, 0x00, 0x00, 0x12, 0x19, 0x16, 0x00, 0x00, 0x11, 0x15, 0x0B, 0x00, 0x00, 0x07, 0x04, 0x1F, 0x00, 0x00, 0x17, 0x15, 0x09, 0x00, 0x00, 0x0E, 0x15, 0x09, 0x00, 0x00, 0x01, 0x1D, 0x03, 0x00, 0x00, 0x0A, 0x15, 0x0A, 0x00, 0x00, 0x12, 0x15, 0x0E, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x00, 0x00, 0x3E, 0x3E, 0x00, 0x3E, 0x00, 0x3E, 0x3E, 0x00, 0x3E, 0x3E, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x40, 0x00, 0x40, 0x00, 0x40, 0x60, 0x00, 0x40, 0x00, 0x40, 0x60, 0x00, 0x70, 0x00, 0x40, 0x60, 0x00, 0x70, 0x00, 0x78, 0x7C, 0x00, 0x40, 0x00, 0x40, 0x7C, 0x00, 0x7E, 0x00, 0x40, 0x7C, 0x00, 0x7E, 0x00, 0x7F, 0x1C, 0x77, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x1C, 0x77, 0x41, 0x5D, 0x5D, 0x41, 0x41, 0x41, 0x5D, 0x5D, 0x5D, 0x5D, 0x41, 0x5D, 0x5D, 0x5D, 0x5D, 0x41, 0x7F, 0x00, 0x22, 0x1C, 0x14, 0x1C, 0x22, 0x00, 0x08, 0x1C, 0x08, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x46, 0x5D, 0x55, 0x5D, 0x31, 0x7C, 0x55, 0x54, 0x55, 0x44, 0x08, 0x08, 0x2A, 0x08, 0x08, 0x00, 0x14, 0x08, 0x14, 0x00, 0x08, 0x14, 0x22, 0x08, 0x14, 0x7F, 0x41, 0x71, 0x31, 0x1F, 0x03, 0x05, 0x7F, 0x05, 0x03, 0x22, 0x14, 0x7F, 0x55, 0x22, 0x02, 0x55, 0x7D, 0x05, 0x02, 0x06, 0x09, 0x09, 0x06, 0x00, // 176 - символ градуса - tft.cp437(true); не пропускаем 0x44, 0x44, 0x5F, 0x44, 0x44, // 177 0x1C, 0x14, 0x1C, 0x22, 0x7F, 0x20, 0x3E, 0x61, 0x3E, 0x20, 0x20, 0x50, 0x3F, 0x02, 0x0C, 0x80, 0x7C, 0x20, 0x3C, 0x40, 0x44, 0x3C, 0x04, 0x7C, 0x44, 0x00, 0x00, 0x08, 0x00, 0x00, 0x38, 0x55, 0x54, 0x55, 0x18, 0x7E, 0x08, 0x10, 0x7F, 0x01, 0x08, 0x10, 0x08, 0x04, 0x02, 0x14, 0x08, 0x22, 0x14, 0x08, 0x0E, 0x06, 0x0A, 0x10, 0x20, 0x20, 0x10, 0x0A, 0x06, 0x0E, 0x38, 0x30, 0x28, 0x04, 0x02, 0x02, 0x04, 0x28, 0x30, 0x38, 0x7E, 0x11, 0x11, 0x11, 0x7E, 0x7F, 0x49, 0x49, 0x49, 0x31, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x7F, 0x01, 0x01, 0x01, 0x03, 0xC0, 0x7F, 0x41, 0x7F, 0xC0, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x77, 0x08, 0x7F, 0x08, 0x77, 0x41, 0x49, 0x49, 0x49, 0x36, 0x7F, 0x10, 0x08, 0x04, 0x7F, 0x7C, 0x21, 0x12, 0x09, 0x7C, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x40, 0x3E, 0x01, 0x01, 0x7F, 0x7F, 0x02, 0x0C, 0x02, 0x7F, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x01, 0x01, 0x01, 0x7F, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x01, 0x01, 0x7F, 0x01, 0x01, 0x07, 0x48, 0x48, 0x48, 0x3F, 0x0E, 0x11, 0x7F, 0x11, 0x0E, 0x63, 0x14, 0x08, 0x14, 0x63, 0x7F, 0x40, 0x40, 0x7F, 0xC0, 0x07, 0x08, 0x08, 0x08, 0x7F, 0x7F, 0x40, 0x7F, 0x40, 0x7F, 0x7F, 0x40, 0x7F, 0x40, 0xFF, 0x01, 0x7F, 0x48, 0x48, 0x30, 0x7F, 0x48, 0x48, 0x30, 0x7F, 0x7F, 0x48, 0x48, 0x48, 0x30, 0x22, 0x41, 0x49, 0x49, 0x3E, 0x7F, 0x08, 0x3E, 0x41, 0x3E, 0x46, 0x29, 0x19, 0x09, 0x7F, 0x20, 0x54, 0x54, 0x54, 0x78, 0x3C, 0x4A, 0x4A, 0x49, 0x31, 0x7C, 0x54, 0x54, 0x54, 0x28, 0x7C, 0x04, 0x04, 0x04, 0x0C, 0xC0, 0x78, 0x44, 0x7C, 0xC0, 0x38, 0x54, 0x54, 0x54, 0x18, 0x6C, 0x10, 0x7C, 0x10, 0x6C, 0x44, 0x54, 0x54, 0x54, 0x28, 0x7C, 0x20, 0x10, 0x08, 0x7C, 0x7C, 0x40, 0x26, 0x10, 0x7C, 0x7C, 0x10, 0x10, 0x28, 0x44, 0x40, 0x38, 0x04, 0x04, 0x7C, 0x7C, 0x08, 0x10, 0x08, 0x7C, 0x7C, 0x10, 0x10, 0x10, 0x7C, 0x38, 0x44, 0x44, 0x44, 0x38, 0x7C, 0x04, 0x04, 0x04, 0x7C, 0x7C, 0x14, 0x14, 0x14, 0x08, 0x38, 0x44, 0x44, 0x44, 0x48, 0x04, 0x04, 0x7C, 0x04, 0x04, 0x0C, 0x50, 0x50, 0x50, 0x3C, 0x18, 0x24, 0xFC, 0x24, 0x18, 0x44, 0x28, 0x10, 0x28, 0x44, 0x7C, 0x40, 0x40, 0x7C, 0xC0, 0x0C, 0x10, 0x10, 0x10, 0x7C, 0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x7C, 0x40, 0x7C, 0x40, 0xFC, 0x04, 0x7C, 0x50, 0x50, 0x20, 0x7C, 0x50, 0x50, 0x20, 0x7C, 0x7C, 0x50, 0x50, 0x50, 0x20, 0x28, 0x44, 0x54, 0x54, 0x38, 0x7C, 0x10, 0x38, 0x44, 0x38, 0x48, 0x34, 0x14, 0x14, 0x7C }; // allow clean compilation with [-Wunused-const-variable=] and [-Wall] static inline void avoid_unused_const_variable_compiler_warning(void) { (void)font; } #endif // FONT5X7_HПопробовал переставить массив новый вместо старого - буквы сбились, буквы "я" не появилось. В старой версии ещё "ё" неправильно рисуется, как N.
#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(void) { // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана tft.setTextWrap(true);//Разрешить тексту стекать с правого края tft.setCursor(0, 0); tft.setTextSize(2); tft.setTextColor(ST7735_WHITE); tft.print(utf8rus("АБВГДЕЁЖЗИЙКЛМНОПРСТФХЦУШЩЬЪЭЮЯабвгдеёжзийклмнопрстфхцущшьъэюя")); delay(1000); } void loop() { } //////////////////////////////////////////////////////////////////////// /* Функция перекодировки русских букв из UTF-8 в Win-1251 */ String utf8rus(String source) { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; } ////////////////////////////////////////////////////////////////////////////Попробовал переставить массив новый вместо старого - буквы сбились, буквы "я" не появилось. В старой версии ещё "ё" неправильно рисуется, как N.
#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(void) { // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); tft.setRotation(0);//ориентация экрана tft.setTextWrap(true);//Разрешить тексту стекать с правого края tft.setCursor(0, 0); tft.setTextSize(2); tft.setTextColor(ST7735_WHITE); tft.print(utf8rus("АБВГДЕЁЖЗИЙКЛМНОПРСТФХЦУШЩЬЪЭЮЯабвгдеёжзийклмнопрстфхцущшьъэюя")); delay(1000); } void loop() { } //////////////////////////////////////////////////////////////////////// /* Функция перекодировки русских букв из UTF-8 в Win-1251 */ String utf8rus(String source) { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; } ////////////////////////////////////////////////////////////////////////////после 11 строки добавь -
tft.cp437(true);// не пропускаем 176 символПолучилось, блин теперь во всех скетчах добавлять эту строчку :)
Получилось, блин теперь во всех скетчах добавлять эту строчку :)
да, тогда все 256 символов становятся доступны, в том числе символ градуса - 176 )))
Отвлёкся я на скорость вывода картинки от вариаций раскрашивания. Пока в голову пришло три варианта - сектора цвета, градиент цвета и пиксель-ассорти. Какие ещё варианты могут быть?