Я уже писал про библиотеку UTFT и про ее функцию drawBitmap которая выводит подготовленный массив картинки на дисплей. Все это получается красиво и прикольно, но съедает очень много памяти. По этому я озадачился как же этот массив загнать во внешнюю память и выводить уже от туда.
Немного теории:
Мой любимый микроконтроллер Arduino Nano создан на базе 8 битного AVR контролера ATmega328 фирмы Atmel. Точные данные вашей платы можно посмотреть на официальном сайте Ардуино. В нем имеется так называемая Fleesh-память объемом 32 Кб при этом 2 Кб используются для загрузчика и ОЗУ объемом 2 Кб. Флешь-память используется для хранения исполнительного кода программы микроконтроллера. Собственно сама программа которую он выполняет, а в ОЗУ хранятся значения переменных которые используются в программе.
Библиотека UTFT использует Флешь-память для хранения массива картинки. Посмотрим на массив из примера:
Ключевое слово RROGMEM — это модификатор переменных, и его можно использовать только с теми типами данных, которые определены в библиотеке pgmspace.h. Он говорит компилятору «разместить информацию во flash-памяти», а не в SRAM, как это происходит обычно.
PROGMEM является частью библиотеки pgmspace.h .Которую надо подключить в вашем скетче. Примерно так:
#include <avr/pgmspace.h>
const dataType variableName[] PROGMEM = {data0, data1, data3…};
dataType — это тип переменной.
variableName — название массива данных.
Собственно функция drawBitmap просто читает эти данные и отправляет их на дисплей :
Приходит мысль: по чему бы нам не использовать какую то внешнюю EEPROM для этого массива. Кто не знает о чем речь , можно прочитать про EEPROM и как с нею работать в моей статье тут.
Закончили с теорией. Кодинг-модинг:
Первым делом нам надо в EEPROM записать сам массив картинки.К сожалению я не придумал ничего лучше чем поступить тем же путем. Записать массив в флешь-память и потом оттуда считать ее в eeprom (рад буду если кто то подскажет более светлые мысли). Я набросал примерный скетч для массива который есть в примере библиотеке:
#include <Wire.h> // для работы с I2C. #include <avr/pgmspace.h> #define EEPROM_ADDRESS 0x53 //адрес памяти. const unsigned short raspberry[0x400] PROGMEM ={ //массив картинки 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0xD69B, 0xD69B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7E, 0xCE5A, 0xDEDC, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA515, 0x6B4D, 0x39C7, 0x31A5, 0x31A5, 0x4208, 0x6B2D, 0xD69A, 0xFFFF, // 0x0030 (48) 0xFFFF, 0xFFFF, 0xFFFF, 0x9CD3, 0x528B, 0x39C7, 0x2985, 0x31A6, 0x4A49, 0x8C31, 0xCE5A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x18E2, 0x1980, 0x3AE1, 0x53E3, 0x64A4, 0x6484, 0x53E3, 0x32A1, 0x08A0, 0x6B2D, // 0x0050 (80) 0xFFFF, 0xD6BB, 0x18E3, 0x1960, 0x4342, 0x5C23, 0x6CC4, 0x6484, 0x4B62, 0x3281, 0x10E0, 0x528A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x9CD4, 0x08C0, 0x7DA5, 0x7DA5, 0x7545, 0x7D65, 0x7DA5, 0x7D85, 0x7DA5, 0x7545, 0x1140, // 0x0070 (112) 0xAD56, 0x4A49, 0x3B01, 0x7DA5, 0x7DA5, 0x7DA5, 0x7DA5, 0x7545, 0x7D65, 0x85E5, 0x5C23, 0x2104, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB576, 0x08C0, 0x7545, 0x7565, 0x6CE5, 0x5C04, 0x5C24, 0x7D65, 0x7D85, 0x7DA5, 0x6484, // 0x0090 (144) 0x1062, 0x29A2, 0x7DA5, 0x7565, 0x7DA5, 0x6CE4, 0x53E4, 0x6444, 0x7525, 0x7DA5, 0x4BA2, 0x3186, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x10C2, 0x5C43, 0x7D85, 0x7565, 0x7545, 0x53E4, 0x3AA3, 0x6444, 0x85C5, 0x7D85, // 0x00B0 (176) 0x0020, 0x3282, 0x8605, 0x7D85, 0x4B63, 0x42E3, 0x6484, 0x7D65, 0x7545, 0x7DC5, 0x2200, 0x736E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x62EC, 0x21C0, 0x85C5, 0x7545, 0x7545, 0x7DA5, 0x6CC4, 0x3222, 0x4B63, 0x53E4, // 0x00D0 (208) 0x0000, 0x1901, 0x6CA5, 0x3222, 0x4323, 0x7D65, 0x7D85, 0x7545, 0x7D85, 0x6D04, 0x0880, 0xD67A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0x1082, 0x4B82, 0x85C5, 0x7544, 0x7545, 0x7D85, 0x85C5, 0x29C2, 0x0000, // 0x00F0 (240) 0x0000, 0x0000, 0x0000, 0x53C4, 0x85E5, 0x7545, 0x7545, 0x7D85, 0x7D85, 0x1980, 0x6B2D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDB7, 0x0861, 0x4B42, 0x7D85, 0x7DA5, 0x85C5, 0x7505, 0x1901, 0x0000, // 0x0110 (272) 0x0000, 0x0000, 0x0000, 0x3AA3, 0x7DA5, 0x85C5, 0x7DA5, 0x7525, 0x21A0, 0x4209, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEBB, 0x1904, 0x1140, 0x3B23, 0x2A42, 0x0880, 0x0000, 0x1821, // 0x0130 (304) 0x3822, 0x3022, 0x0000, 0x0000, 0x1121, 0x32E2, 0x2AA2, 0x08A0, 0x6B2D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA554, 0x20C3, 0x5003, 0x8005, 0x5804, 0x0000, 0x6864, 0xB888, // 0x0150 (336) 0xC889, 0xC088, 0xA087, 0x2021, 0x3802, 0x7805, 0x5003, 0x1000, 0x4269, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD95, 0x0800, 0xA046, 0xD889, 0xD0A9, 0x3822, 0x4043, 0xD8A9, 0xC088, // 0x0170 (368) 0xB888, 0xB888, 0xC889, 0xA887, 0x3022, 0xC088, 0xD889, 0xB088, 0x2000, 0x2985, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x2965, 0x7804, 0xD8A9, 0xB888, 0x3822, 0x0000, 0x1000, 0x9887, 0xC889, // 0x0190 (400) 0xC889, 0xC889, 0xC088, 0x7065, 0x0000, 0x1821, 0xB087, 0xD889, 0xA887, 0x0000, 0x9D14, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1C, 0x2021, 0xC888, 0xA887, 0x2021, 0x0000, 0x2021, 0x2822, 0x0800, 0x3022, // 0x01B0 (432) 0x5043, 0x5043, 0x3022, 0x3842, 0x5043, 0x2021, 0x1000, 0x9066, 0xD8A9, 0x2800, 0x52EB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x1000, 0x6044, 0x0800, 0x1000, 0x9066, 0xC088, 0xC889, 0xA087, 0x1821, // 0x01D0 (464) 0x0000, 0x0000, 0x7065, 0xC889, 0xC889, 0xC088, 0x7065, 0x0000, 0x6864, 0x2000, 0x3207, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01E0 (480) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x31A6, 0x1821, 0x0000, 0x0000, 0xA087, 0xC889, 0xB888, 0xB888, 0xC889, 0x9887, // 0x01F0 (496) 0x0000, 0x4042, 0xD0A9, 0xB888, 0xB888, 0xB888, 0xD089, 0x6864, 0x0000, 0x2021, 0x0820, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x3A48, 0x4801, 0xB8A8, 0x0800, 0x4843, 0xC889, 0xB888, 0xB888, 0xB888, 0xC088, 0xB888, // 0x0210 (528) 0x0800, 0x6044, 0xC889, 0xB888, 0xB888, 0xB888, 0xC088, 0xB088, 0x1821, 0xA087, 0x9046, 0x0000, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0220 (544) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBE38, 0x1800, 0xC088, 0xC888, 0x1821, 0x7065, 0xC889, 0xB888, 0xB888, 0xB888, 0xC088, 0xB088, // 0x0230 (560) 0x0000, 0x4843, 0xC889, 0xB888, 0xB888, 0xB888, 0xB888, 0xC088, 0x3842, 0xA087, 0xD8A9, 0x4001, 0x29C6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7430, 0x4801, 0xD089, 0xB888, 0x1000, 0x7065, 0xC889, 0xB888, 0xB888, 0xB888, 0xC889, 0x8065, // 0x0250 (592) 0x0000, 0x1001, 0xB888, 0xC088, 0xB888, 0xB888, 0xB888, 0xC088, 0x2821, 0x9886, 0xD089, 0x8025, 0x0061, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0260 (608) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x73EF, 0x4801, 0xD089, 0xA887, 0x0000, 0x3022, 0xC8A9, 0xC888, 0xC088, 0xC889, 0xA887, 0x0800, // 0x0270 (624) 0x0000, 0x0000, 0x3822, 0xC088, 0xC889, 0xC888, 0xD089, 0x8065, 0x0000, 0x8866, 0xD089, 0x8045, 0x0040, 0xE73C, 0xFFFF, 0xFFFF, // 0x0280 (640) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD96, 0x1800, 0xD889, 0x8866, 0x0000, 0x0000, 0x4843, 0xA087, 0xA887, 0x7865, 0x2021, 0x5043, // 0x0290 (656) 0x8066, 0x8065, 0x3822, 0x2021, 0x7865, 0x9066, 0x6064, 0x0000, 0x0000, 0x5043, 0xE0AA, 0x4002, 0x1944, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02A0 (672) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x31A6, 0x6824, 0x3022, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9086, 0xD089, // 0x02B0 (688) 0xC889, 0xC889, 0xC889, 0x6044, 0x0000, 0x0000, 0x0000, 0x0800, 0x5844, 0x3842, 0x6864, 0x0000, 0x9D14, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x0000, 0x3022, 0xB088, 0x9086, 0x2822, 0x0000, 0x0000, 0x6044, 0xD089, 0xB888, // 0x02D0 (720) 0xB888, 0xB888, 0xC088, 0xC8A9, 0x2822, 0x0000, 0x2821, 0xB087, 0xD8A9, 0xA087, 0x0000, 0x31C6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x10E3, 0x7024, 0xD089, 0xC889, 0xC088, 0x3842, 0x0000, 0x8866, 0xC888, 0xB888, // 0x02F0 (752) 0xB888, 0xB888, 0xB888, 0xC889, 0x4843, 0x1001, 0xB888, 0xC888, 0xB888, 0xB888, 0x0000, 0x8450, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x532B, 0x5002, 0xC889, 0xB888, 0xC088, 0xB088, 0x0800, 0x6864, 0xD089, 0xB888, // 0x0310 (784) 0xB888, 0xB888, 0xB888, 0xC889, 0x3022, 0x8065, 0xC889, 0xB888, 0xC088, 0xB888, 0x1000, 0xCEBA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA554, 0x1800, 0xC889, 0xB888, 0xB888, 0xC889, 0x5043, 0x1000, 0xA887, 0xD089, // 0x0330 (816) 0xC088, 0xC088, 0xD089, 0x7865, 0x1821, 0xB888, 0xB888, 0xB888, 0xC889, 0x8825, 0x1904, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7DF, 0x2145, 0x5802, 0xD0A9, 0xC088, 0xD089, 0x8065, 0x0000, 0x1801, 0x7065, // 0x0350 (848) 0x9866, 0x9066, 0x5844, 0x0000, 0x3822, 0xD089, 0xC088, 0xC889, 0xB888, 0x0800, 0x8CD2, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD6BA, 0x10C3, 0x4001, 0xA067, 0xB888, 0x4843, 0x0000, 0x0000, 0x0000, // 0x0370 (880) 0x1821, 0x1821, 0x0000, 0x0000, 0x2021, 0xB088, 0xB888, 0x8825, 0x1000, 0x5B4C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x5B2C, 0x0000, 0x0000, 0x0000, 0x3022, 0x8866, 0xA887, // 0x0390 (912) 0xB888, 0xB888, 0xA887, 0x7865, 0x0800, 0x0800, 0x0800, 0x2124, 0x9D13, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDF7, 0x2986, 0x0000, 0x6824, 0xE0AA, 0xC888, // 0x03B0 (944) 0xC088, 0xC088, 0xD089, 0xB888, 0x0800, 0x0020, 0x634D, 0xEF9E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x18C3, 0x5002, 0xA867, // 0x03D0 (976) 0xC088, 0xB888, 0x8825, 0x1000, 0x52EB, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x636D, 0x3125, // 0x03F0 (1008) 0x3883, 0x30C3, 0x31C7, 0xA555, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) }; void setup() { // put your setup code here, to run once: unsigned int col; Wire.begin(); //инициализируем интерфейс I2C for (int i= 0; i<(32*32); i++) // 32*32 это размер картинки в сумме дает нам 0х400 переменных. { col=pgm_read_word(&raspberry[i]); //читаем массив,& указатель адреса в флешь-памяти переменной raspberry[i] Wire.beginTransmission(EEPROM_ADDRESS); Wire.write(i>>8); Wire.write(i&0xFF); Wire.write(col >> 8); Wire.endTransmission(); delay(5); //задержка для запоминания байта памятью Wire.beginTransmission(EEPROM_ADDRESS); Wire.write(i+(32*32) >> 8); // так как переменные в массиве состоят из двух байт,записываем из байтно Wire.write(i+(32*32) & 0xFF); // сдвигая адреса байтов на число переменных. Wire.write(col & 0xFF); Wire.endTransmission(); delay(5); } } void loop() { // put your main code here, to run repeatedly: }
Следующим этапом нам надо добавить в библиотеку UTFT свою функцию. Которая будет читать данные с внешней памяти и посылать их в дисплей.
Библиотека для Ардуино должна иметь как минимум два файла:
- заголовочный файл (расширение .h);
- файл с исходным кодом (расширение .cpp).
В первом файле содержится описание самого класса, переменные, константы. Кода программы здесь нет. А второй файл содержит программный код методов.
Открываем файл UTFT.cpp и первым делам добавляем в начале файла поддержку библиотеке «Wire»
Далее добавляем нашу новую функцию :
void UTFT::eeprom(int x, int y, int sx, int sy, word adress, byte adress_eeprom ) { unsigned int col; int tx, ty, tc, tsx, tsy; Wire.begin(); if (orient==PORTRAIT) { cbi(P_CS, B_CS); setXY(x, y, x+sx-1, y+sy-1); for (tc=0; tc<(sx*sy); tc++) { Wire.beginTransmission(adress_eeprom); Wire.write((adress+tc) >> 8); Wire.write((adress+tc) & 0xFF); Wire.endTransmission(); Wire.requestFrom(adress_eeprom, (byte)1); byte data = Wire.read(); Wire.beginTransmission(adress_eeprom); Wire.write((adress+tc+(sx*sy))>>8); Wire.write((adress+tc+(sx*sy))&0xFF); Wire.endTransmission(); Wire.requestFrom(adress_eeprom, (byte)1); byte data_1 = Wire.read(); LCD_Write_DATA(data,data_1); //col=pgm_read_word(&data[tc]); //LCD_Write_DATA(col>>8,col & 0xff); } sbi(P_CS, B_CS); } else { cbi(P_CS, B_CS); for (ty=0; ty<sy; ty++) { setXY(x, y+ty, x+sx-1, y+ty); for (tx=sx-1; tx>=0; tx--) { Wire.beginTransmission(adress_eeprom); Wire.write((adress+(ty*sx)+tx) >> 8); Wire.write((adress+(ty*sx)+tx) & 0xFF); Wire.endTransmission(); Wire.requestFrom(adress_eeprom, (byte)1); byte data = Wire.read(); Wire.beginTransmission(adress_eeprom); Wire.write((adress+(sx*sy)+(ty*sx)+tx) >> 8); Wire.write((adress+(sx*sy)+(ty*sx)+tx) & 0xFF); Wire.endTransmission(); Wire.requestFrom(adress_eeprom, (byte)1); byte data_1 = Wire.read(); LCD_Write_DATA(data,data_1); //col=pgm_read_word(&data[(ty*sx)+tx]); //LCD_Write_DATA(col>>8,col & 0xff); } } sbi(P_CS, B_CS); } clrXY(); }
Сохраняем файл и открываем файл UTFT.h добавляя в него описание нашей новой функции.
void eeprom(int x, int y, int sx, int sy, word adress, byte adress_eeprom );
- x — координаты левого угла картинки по х .
- y — координаты по y.
- sx — размер картинки по x.
- sy — размер картинки по y.
- adress — адрес в памяти откуда начинается массив картинки.
- adress_eeprom — адрес памяти для I2C.
Ну вроде и все. Думаю дальше вы справитесь успешно. Буду рад вашим идеям и замечаниям ..Пишите в обратную связь.