Подключение LCD TFT к ARDUINO UNO
#31
(04-04-2025, 22:53)KEN : о идее надо просто const PROGMEM uint8_t
По всякому пробовал. Как только добавляю слово PROGMEM, картинка рушится. В основном цветная каша в окне.
Но вот при таком варианте, картинку делит по вертикали и меняет местами части изображения.
   
#32
А так...?
const uint8_t gImage_16[] PROGMEM = {....
#33
И так пробовал. Сейчас, вообще, без ПРОГМЕМ большие файлы загружаю.
   
Но всё равно кашу показывает. Последний файл 12кБ загрузил, окно с кашей не показывает, показывает только полоску в 1-2 пикселя длиной по размеру окна.
#34
Я понял в чём дело, это-же очевидно, видимо просто давно не работал с PROGMEM.
К данным из PROGMEM надо обращаться через специальные функции, почитать про это - например тут https://alexgyver.ru/lessons/progmem/
Получается что надо переписать всю библиотеку и везде где есть обращение к массиву заменить это обращение на pgm_read_byte(&img) или pgm_read_byte(&img[i]), но и при это будут ещё подводные камни так как там все обращения через ссылки.
#35
(06-04-2025, 09:24)KEN : pgm_read_byte
И это я тоже пробовал. Не помогает. И Гайвера читал.
А без ПрогМЕМ большие файлы загружаются потому, что сама команда вывода изо на экран, подразумевает чтение из Флэш уже. Нужно только звёздочку поставить.
   
 Это на Паяльнике описано.
#36
(06-04-2025, 12:12)Sam : подразумевает чтение из Флэш уже. Нужно только звёздочку поставить.
Звёздочка подразумевает что в переменной храниться не значение переменной а адрес по которому это значение храниться в памяти.
(06-04-2025, 12:12)Sam : И это я тоже пробовал. Не помогает.
Значит не правильно пробовали, дело именно в этом, надо во всех функциях библиотеки прописать pgm_read_byte вместо обычного обращения к массиву просто там есть нюансы, вероятно проще написать свою функцию чем разбираться в библиотечных. В любом случае это не травильная задача на которую надо потратить время и энергию.
#37
Если библиотека нерабочая, то как тогда они выводили картинки?
   
#38
Ну да, вроде вся суть именно в этом, с обычным массивом работает а с PROGMEM нет,
и происходит это именно из за того что работа с PROGMEM сильно отличается от работы с обычными переменными, функции библиотеки не рассчитаны для работы с PROGMEM, и поэтому их надо либо модифицировать либо писать свои.
#39
(06-04-2025, 12:59)KEN : вероятно проще написать свою функцию
Вряд ли я компетентен ковырять библиотеку. 2
#40
Ради интереса попробуйте... 
Надо заменить только одну строку тут https://tehnodium.ru/thread-960-post-248...l#pid24841
Заменить на это:
LCD_Output_image(10, 10, 50, 50, pgm_read_word((int)(img_hi)) , 90);
или это:
LCD_Output_image(10, 10, 50, 50, pgm_read_word((int)(img_hi+1)) , 90);

Вот тут про то как передавать массивы PROGMEM в функцию, понять сложно и реализовать с первого раза может и не получится.
http://arduino.ru/forum/programmirovanie...ent-336371

PS
Исправил на pgm_read_word, но возможно надо использовать на pgm_read_word_near