Как вывести на экран рисунок с SD с помошью UTFT: "myGLCD.drawBitmap" ???
- Войдите на сайт для отправки комментариев
Сб, 11/06/2016 - 16:16
Добрый день.
Кто подскажет - как с помощтю команды "myGLCD.drawBitmap" отобразить рисунок? Вернее: как задать имя файла в аргументах этой функции? Пока что удалось только отображать рисунки в виде массива:
extern unsigned short f00[0x21FC]; myGLCD.drawBitmap(0,0,87,64,f00,1);
Но я читал что можно так же подгружать рисунки в форате .raw. Но проблема в том, что я не знаю как это сделать.
Кто може дать совет по этому вопросу?
Может хоть скажете, какая у Вас библиотека?
Может хоть скажете, какая у Вас библиотека?
Я думал что Вы догадаетесь из названия: "myGLCD...". Прошу прощения за то что не уточнил.
Библиотека "UTFT" конечно же. Когда преобразовываешь рисунок в массив формата Си, он включается в тело прошивки так же как и шрифты. А это, немного накладно с точки зрения экономии памяти. А вот если бы рисунки лежали на SD карте и вызывались динамически по мере необходимости - было бы просто замечательно!
"drawBitmap – выводит на дисплей специально подготовленное растровое графическое изображение.
В качестве параметров задаются координаты верхнего левого угла изображения, его размеры и имя массива, в котором хранится закодированное изображение."
Однако я так же где-то читал что с помощью этой функции можно выводить также рисунки в формате ".RAW" ! Но я нигде не могу найти это описание еще раз. Вот ищу сижу...
Вот тут есть какое-то подобие решения проблемы, но приведенные топикстартером строчки, никак не стыкуются с мнением компилятора.
Вот, кажется, что-то нашёл: "ссылка"
Да, это то что нужно!
Правда библиотеки немного другие, но всё работает! С SD-карты читает! Ураа!!!
Вот пример скетча, который у меня заработал. Там видно какие библиотеки нужны. Но не все. Много лишнего, но тоже интересно покопаться!
Я думал что Вы догадаетесь из названия: "myGLCD...". Прошу прощения за то что не уточнил.
С какого перепугу? В библиотеке такого названия нет, а у Вас в скетче ... это Ваша переменная, Вы можете переименовать её в kaka, в mumu, или в pipiska - ничего не изменится и всё будет работать точно также.
Вам же надо отделить мух от котлет.
В библиотеке UTFT нет никаких средств для работы с какими бы то ни было файлами. Вам нужно либо научиться читать эти файлы в память, а потом показывать обычными средствами, либо искать библиотеку, которая уже умеет это делать.
Ссылки для начала поиска (затравки)
https://www.arduino.cc/en/Reference/TFTLoadImage
http://forum.arduino.cc/index.php?topic=269686.0
http://www.instructables.com/id/Arduino-TFT-display-of-bitmap-images-fro...
Я думал что Вы догадаетесь из названия: "myGLCD...". Прошу прощения за то что не уточнил.
С какого перепугу? В библиотеке такого названия нет, а у Вас в скетче ... это Ваша переменная, Вы можете переименовать её в kaka, в mumu, или в pipiska - ничего не изменится и всё будет работать точно также.
Вам же надо отделить мух от котлет.
В библиотеке UTFT нет никаких средств для работы с какими бы то ни было файлами. Вам нужно либо научиться читать эти файлы в память, а потом показывать обычными средствами, либо искать библиотеку, которая уже умеет это делать.
Ссылки для начала поиска (затравки)
https://www.arduino.cc/en/Reference/TFTLoadImage
http://forum.arduino.cc/index.php?topic=269686.0
http://www.instructables.com/id/Arduino-TFT-display-of-bitmap-images-from-an-SD-Ca/?ALLSTEPS#step4
Уже давно решено. Вы немного задержались )))))) Но все равно - спасибо за участие!
-------------
myGLCD - это вообще-то зарегестрированный класс библиотеки UTFT. Так что "pipiska" тут не прокатит. К сожалению )))))
По последней ссылке явно на про UTFT. Там пишут:
при использовании ITDB02_Graph16.h и tinyFAT.h всё работало таким образом
расечатать?
1
file.initFAT();
2
myGLCD.loadBitmap(10, 10, 145, 100,
"tux.raw"
);
Ищите. Может найдете, только я не думаю что этот raw и тот о котором вы думаете это одно и тоже.
Я делал фоторамку себе поигратся, могу поделится впечатлениями.
1. Либу использовал свою, в ней функция потокового вывода на экран, данные перекидываются через небольшой буфер. В функцию потокового вывода передаю калбек на функцию получения данных с файла SD. Функция выглядит дето так
2. Работает не быстро, экран перерисовывается гдето с пол секунды. И это из файла bmp заранее подогнаного в размер и 16 бит на пиксель.
3. Думал про большее - bmp любого размера и/или jpg. Почти нереально, будет еще медленней и теряет смысл.
4. Задача явно не для начинающего, выжимает из контроллера все ресурсы, хороше думайте прежде чем братся.
myGLCD - это вообще-то зарегестрированный класс библиотеки UTFT. Так что "pipiska" тут не прокатит. К сожалению )))))
Да, неужели?
Вас не затруднит показать где он такой зарегистрирован?
А то я вот смотрю в библиотеку (https://github.com/telamon/utft) и чёт не вижу его там.
myGLCD - это вообще-то зарегестрированный класс библиотеки UTFT. Так что "pipiska" тут не прокатит. К сожалению )))))
Да, неужели?
Вас не затруднит показать где он такой зарегистрирован?
А то я вот смотрю в библиотеку (https://github.com/telamon/utft) и чёт не вижу его там.
Я не знаю где он регистрируется, но все функции библиотеки UTFT начинаются с "myGLCD". Я не берусь утверждать что это именно класс - я не специалист по языку Си. Но то что заменить "myGLCD" на "pipiska" не получится - могу сказать совершенно точно )))))
В PDF-е в папке библиотеки "\libraries\UTFT\Documentation\UTFT.pdf"
1. Либу использовал свою, в ней функция потокового вывода на экран, данные перекидываются через небольшой буфер. В функцию потокового вывода передаю калбек на функцию получения данных с файла SD. Функция выглядит дето так
2. Работает не быстро, экран перерисовывается гдето с пол секунды. И это из файла bmp заранее подогнаного в размер и 16 бит на пиксель.
3. Думал про большее - bmp любого размера и/или jpg. Почти нереально, будет еще медленней и теряет смысл.
4. Задача явно не для начинающего, выжимает из контроллера все ресурсы, хороше думайте прежде чем братся.
Спасибо, поковыряю на досуге. Но я так понял что эта задача прекрасно и уже давным давно решена с помощью специальных библиотек праней из "Rinky-Dink Electronics": <SdFat.h> и <UTFT_SdRaw.h>
см. мой третий пост, там есть пример как это всё у них организовано. И как раз - по SPI !!!!
А кстати - у Вас какая ардуина? Я сейчас мучаю DUE....
Ой. У Вас "НАНО".... Надо более серьезно поковыряться тогда. Думаю что дунька справится быстрее.
Если можно - покажите весь скетч с вызовом этой функции. И какой формат файла тут используется - тоже интересно было бы узнать.
Я не знаю где он регистрируется, но все функции библиотеки UTFT начинаются с "myGLCD". Я не берусь утверждать что это именно класс - я не специалист по языку Си. Но то что заменить "myGLCD" на "pipiska" не получится - могу сказать совершенно точно )))))
В PDF-е в папке библиотеки "\libraries\UTFT\Documentation\UTFT.pdf"
Она используется НЕ в библиотеке, а в примерах. И используется именно как переменная. В самой библиотеке этой перемнной нет. Так что заменяйте на pipiska - всё будет отлично работать. И не говорите "совершенно точно" того, в чём не разбираетесь.
В общем итог такой: С помощью функции "myGLCD.drawBitmap" можно показывать ТОЛЬКО рисунки закодированные в массивы. Больше ничего. Для вывода изображений в формате "raw" используется другая библиотека и другая функция: библиотека "UTFT_SdRaw.h"
Я не знаю че там у какихто Rinky-Dink Electronics , оно мне нафиг не надо. Я год назад сделал посмотрел, думаю еще вернусь к теме, а то осцилограф на STM простаивает, а мог бы и фотки крутить. Там ресурсов больше.
\\И как раз - по SPI !!!!
И в чем причина восторга? SD к крдуине всегда по SPI подключают, это один из 2-х возможных для SD итерфейсов и единственный приемлемый для ардуино.
Использую Нано и МиниПро. Ну и Мапле одно затесалось.
Думаю их формат "raw" - тот же массив, но в файл записаный. Лошары в общем.
Я не знаю где он регистрируется, но все функции библиотеки UTFT начинаются с "myGLCD". Я не берусь утверждать что это именно класс - я не специалист по языку Си. Но то что заменить "myGLCD" на "pipiska" не получится - могу сказать совершенно точно )))))
В PDF-е в папке библиотеки "\libraries\UTFT\Documentation\UTFT.pdf"
Она используется НЕ в библиотеке, а в примерах. И используется именно как переменная. В самой библиотеке этой перемнной нет. Так что заменяйте на pipiska - всё будет отлично работать. И не говорите "совершенно точно" того, в чём не разбираетесь.
Будте более терпимы к ошибкам тех, кто знает меньше Вас. Это пожелание. И спасибо за замечание. Я не думал что строка:
банальное объявление переменной. Я считал что эту строку лучше не трогать...
Однако если учесть Ваш опыт в программировании на Си и то что переменная "myGLCD" прописана во всех примерах библиотеки "UTFT", непонятно почему это сочетание букв вызвало у Вас такой шквал негатива...
Я надеюсь Вы не будете утверждать что видите библиотеку UTFT первый раз в жизни?
Я не знаю че там у какихто Rinky-Dink Electronics , оно мне нафиг не надо. Я год назад сделал посмотрел, думаю еще вернусь к теме, а то осцилограф на STM простаивает, а мог бы и фотки крутить. Там ресурсов больше.
\\И как раз - по SPI !!!!
И в чем причина восторга? SD к крдуине всегда по SPI подключают, это один из 2-х возможных для SD итерфейсов и единственный приемлемый для ардуино.
Использую Нано и МиниПро. Ну и Мапле одно затесалось.
Думаю их формат "raw" - тот же массив, но в файл записаный. Лошары в общем.
Лошары или нет, а без их библиотек пришлось бы самим дрова под свои китайские поделки писать.
Интересно посмотреть на массив НЕ записанный в файл )))))))
Интересно посмотреть на массив НЕ записанный в файл )))))))
Хммм.. какое странное желание.
Смотрите свое стартовое сообщение строка 1. extern unsigned short f00[0x21FC];
Интересно посмотреть на массив НЕ записанный в файл )))))))
Хммм.. какое странное желание.
Смотрите свое стартовое сообщение строка 1. extern unsigned short f00[0x21FC];
"extern unsigned short f00[0x21FC];" = "f00.c" <----- это физический файл вообще-то. )))))
Довольно быстро читает картинки 160х120:видео
Интересно посмотреть на массив НЕ записанный в файл )))))))
Хммм.. какое странное желание.
Смотрите свое стартовое сообщение строка 1. extern unsigned short f00[0x21FC];
"extern unsigned short f00[0x21FC];" = "f00.c" <----- это физический файл вообще-то. )))))
И что это вы безграмотно так дописали? Учите С/С++, в жизни пригодится. extern unsigned short f00[0x21FC]; - это массив, ни в какой файл он и близко не записаный. Вы можете записать его содержимое в файл, а можете не делать этого, например заполнить его чем либо, просто константой например и вывести на экран вобще без файла карты SD.
Довольно быстро читает картинки 160х120:видео
Там не зря картинка не на полный экран. 160 на 120 это в 4 раза меньше данных, соотвеиственно вместо 2 кадров в секунду (а пол сек. на картинку это как раз 2 кадра в сек.) получаем 8. Вот и дерганая гифанимация вышла.
Лошары или нет, а без их библиотек пришлось бы самим дрова под свои китайские поделки писать.
Есть куча библиотек Adafruit (https://github.com/adafruit) под разные TFT-дисплеи, в них реализован вывод картинки с SD-карты из файла в BMP-формате.
Будте более терпимы к ошибкам тех, кто знает меньше Вас. Это пожелание. И спасибо за замечание. Я не думал что строка:
Да, Бог с Вами, я нетерпим не к ошибкам, а к безапеляционности с которой "те, кто знает меньше" начинают меня учить и утверждать что-то "совершенно точно"
Однако если учесть Ваш опыт в программировании на Си и то что переменная "myGLCD" прописана во всех примерах библиотеки "UTFT", непонятно почему это сочетание букв вызвало у Вас такой шквал негатива...
Негатив у меня вызвало не сочетание и Ваши попытки учить меня свысока. Подумайте о том, как Вы разговариваете со специалистами, которые решили Вам помочь.
Я надеюсь Вы не будете утверждать что видите библиотеку UTFT первый раз в жизни?
Вы можете надеяться на всё, что угодно, но примеры к библиотеке я видел практически впервые, когда стал искать эту Вашу переменную. Может быть я их когда-то и смотрел, когда впервые библиотеку закачал, но я этого не помню. Для собственной работы мне всегда хватало текстов библиотеки, примерами я пользуюсь крайне редко.
Где это: "там"? Это я видео снимал вообще-то. И я не понял почему это 160х120 это в 4 раза меньше? У меня дисплей 320х240. С таким разрешением "гифка" получилась совсем неживая почти. А уменьшил размеры "кадров" в два раза, ну и вот что получилось...
Это всё не важно в общем-то. Важно совершенно другое: проблема-то решена: теперь понятно как с SD карты читать изображения. Это и всё чему я хотел научиться.
Будте более терпимы к ошибкам тех, кто знает меньше Вас. Это пожелание. И спасибо за замечание. Я не думал что строка:
Да, Бог с Вами, я нетерпим не к ошибкам, а к безапеляционности с которой "те, кто знает меньше" начинают меня учить и утверждать что-то "совершенно точно"
Однако если учесть Ваш опыт в программировании на Си и то что переменная "myGLCD" прописана во всех примерах библиотеки "UTFT", непонятно почему это сочетание букв вызвало у Вас такой шквал негатива...
Негатив у меня вызвало не сочетание и Ваши попытки учить меня свысока. Подумайте о том, как Вы разговариваете со специалистами, которые решили Вам помочь.
Я надеюсь Вы не будете утверждать что видите библиотеку UTFT первый раз в жизни?
Вы можете надеяться на всё, что угодно, но примеры к библиотеке я видел практически впервые, когда стал искать эту Вашу переменную. Может быть я их когда-то и смотрел, когда впервые библиотеку закачал, но я этого не помню. Для собственной работы мне всегда хватало текстов библиотеки, примерами я пользуюсь крайне редко.
"Каждый человек в чем-то меня превосходит, и здесь - я готов у него учиться" (Дейл Карнеги)
Специалисты, которые ставят себя выше только потому, что знают больше и при этом еще в глаза не видя предмет обсуждения - вызывают у меня сожаление. Потому что я бы в таком случае - просто указал на невнимательность оппонента и объяснил что "myGLCD", это обычная переменная и что она не является чем-то незыблемым и обязательным. Вы же больше меня знаете, сто процентов - старше, а зацикливаетесь на моём невежестве, как буд-то это я виноват во всех Ваших житейских проблемах.
Я с таким настроением на форум не показываюсь.
И я не понял почему это 160х120 это в 4 раза меньше? У меня дисплей 320х240.
Ну ёпт. Потрудитесь уже перемножить 160х120, затем перемножить 320х240 и посмотреть, во сколько раз первое меньше второго. То, что линейные размеры меньше в два раза - не значит, что матрица будет меньше в два раза, там квадратичная зависимость. Итог - в 4 раза меньше объём данных при уменьшении размера кадра всего в два раза. А если линейные размеры кадра уменьшить в 4 раза, то, о чудо! - массив данных будет занимать в 16 раз меньше места! Вот это да, чудо, да и только!
есть такой код
он не мой, я его просто адаптировал под либу Mcufriend_kbv. картинки из либы Mcufriend_kbv. к сожалению проверить не могу, так как две мои микро сд карты ардуина ни в какую не видит. может у кого есть рабочая и желание проверить....
Где это: "там"? Это я видео снимал вообще-то
Там в видео у Вас.
У меня дисплей 320х240. С таким разрешением "гифка" получилась совсем неживая почти.
Так я ж и писал что тормозня, и чего спорить если сами такое видите..
И я не понял почему это 160х120 это в 4
Ну добрый человек DIYMan уже вам обяснил. Я тока +1.
И я не понял почему это 160х120 это в 4 раза меньше? У меня дисплей 320х240.
Ну ёпт. Потрудитесь уже перемножить 160х120, затем перемножить 320х240 и посмотреть, во сколько раз первое меньше второго. То, что линейные размеры меньше в два раза - не значит, что матрица будет меньше в два раза, там квадратичная зависимость. Итог - в 4 раза меньше объём данных при уменьшении размера кадра всего в два раза. А если линейные размеры кадра уменьшить в 4 раза, то, о чудо! - массив данных будет занимать в 16 раз меньше места! Вот это да, чудо, да и только!
Точно что чудо... Век живи, век учись, а делить так и не научишься... Пасиб за науку.
Твои не видит, а чьи видит? Вообще видит что-нибудь?
Я давеча тоже маялся с чтением SD, так спасибо - добрые люди подсказали:
Смысл такой: независимо от того куда ты назначил моси-мисо и остальные... надо посмотреть там ли они реально висят. Вернее: посмотреть на каких пинах они вообще находятся. Вот. Мне - помогло. Результат выполнения видимый в мониторе порта:
Что до скетча: у меня UTFT и я уже нашёл решение. Адафрутовскую утилиту "
bmpDraw()
" пыталася приторочить к своим нуждам, но там есть пару операторов, которые наглухо заточены чисто под адафрут ((((( Так что тут - не выручу. А вот SD-шку растолкать - можем пообщаться )Кстати об адафрутах: я эту утилиту спокойно юзал на УНО. Пашет нормально. Так что осталось расчехлить что там SD-шка хочет и у тебя тоже будет пахать.
да видит он sd2 карту, а форматирование fat нет. spi я знаю где
попробовал с другим шилдом. вообще не видит. читал не все карты spi поддерживают, возможно мой случай
да видит он sd2 карту, а форматирование fat нет. spi я знаю где
попробовал с другим шилдом. вообще не видит. читал не все карты spi поддерживают, возможно мой случай
А FAT32 ? Мой шилд видел оба... Кстати! Я тут попутно еще пытаюсь уложить Raspberry PI, так там, при записи образа линукса на флешку, даются две хитрые утилиты. Потому что после первой записи образа, на флехе образуются невидимые для винды разделы. Так вот одна из этих утилит - убивает MBR и пишет новый. Я так все SD-шки себе повосстанавливал. Могу скинуть если интересно: Утилитка
у меня на дисплее разъем для микросд карты, это вообще
а пример sd Cardinfo выдает с добавлением распиновки:
давай. sd formatter все равно не помогает
Та вот же: Утилитка
Там надо все галки поснимать, а наверху - оставить как есть, кажись... Счя я посмотрю точно...
уже форматируется на fat. попробую потом на fat32
уже форматируется на fat. попробую потом на fat32
fat не прокатило. форматирую на fat32
fat не прокатило. форматирую на fat32
А, ты делаешь вот что: "pinMode(SD_CS, OUTPUT);" наверно это один фиг... Сечас с посмотрю как я это делал. У меня тоже есть шилд с microSD слотом...
Ну вот так я делал и пахало:
Ха! У меня такой же "мукуфренд" как и у тебя: " 0x9341 " 2.4 TFT, да? Ох и попил он крови у меня....
да видит он sd2 карту, а форматирование fat нет. spi я знаю где
попробовал с другим шилдом. вообще не видит. читал не все карты spi поддерживают, возможно мой случай
Я тоже такие разговоры слышал, но думаю что все поддерживают. Просто у некоторых сильный "акцент". Требуют паузы между командами, одним эти паузы нужны, другим не очень, потому и выходит что реально одни работают, другие нет. Отсюда и разговоры о неподдержке spi, ИМХО.
да видит он sd2 карту, а форматирование fat нет. spi я знаю где
попробовал с другим шилдом. вообще не видит. читал не все карты spi поддерживают, возможно мой случай
Я тоже такие разговоры слышал, но думаю что все поддерживают. Просто у некоторых сильный "акцент". Требуют паузы между командами, одним эти паузы нужны, другим не очень, потому и выходит что реально одни работают, другие нет. Отсюда и разговоры о неподдержке spi, ИМХО.
Подскажи еще, плиз, как в цикле крутануть вот ту каманду что я выше постил? Счя копирну сюда:
функцию объяви просто и все. исользуй где нужно
функцию объяви просто и все. исользуй где нужно
Думаешь что "myFiles.load" схавает функцию вместо имени файла в кавычках? Чот я так не думаю... Если б было всё так просто я бы банально как-то запихнул переменную в имя файла. Только синтаксиса не знаю.
я наверно тебя не так понял
наверно надо string собрать в цикле, а потом его и запрашивать
я наверно тебя не так понял
наверно надо string собрать в цикле, а потом его и запрашивать
Мне надо сделать что-то типа:
Понятно что это бред, но смысл примерно такой. В сях такое вообще возможно?
Что там с SD-шкой?
вот попробуй. больше 9 думаю сам догадаешь как сделать
с картой глухо также
вот попробуй. больше 9 думаю сам догадаешь как сделать
с картой глухо также
счя попробую эти проценты... Я уже такое видел где-то... Спасибо..
А что ж с картой-то такое? Может реально вместо "pinMode(SD_CS, OUTPUT);" напиши: "pinMode(SS, OUTPUT);" ??? Фиг его знает в чём там дело... а может не контачит там что-нить? Ну и следуя советам "Logik" может реально там делеев понапихать между проверками карты?
Не прокатило такое. В сериал пишет вот что: "SQ/SQ%02d.RAW"
А нет... прошу прощения. прокатил вот такой вариант:
А что это за функция такая классная: "sprintf(file_name, "SQ/SQ%02d.RAW", i);"
хз. у меня работает
отдельно проверял только мой код?
хз. у меня работает
отдельно проверял только мой код?
Да всё работает твой код! Спасибо, чел! Ты просто гений ! Теперь осталось как-то научиться видосы разбирать на .raw-файлы сразу и можно кино крутить )))))
----------------------------------
Всё это фигня. Мне не даёт покоя твоя SD-шка, или вернее - какие-то бока не то с софтом не то с железом...
Попробуй делей поставить до проверки fat-a....
Так, а чото я не понял! Ты же тоже дисплей запускаешь, вроде, библиотекой UTFT !!! Или я ничего не понимаю?...
Это что за библиотека такая???? Я тоже такую хочу! У меня есть же такой мукуфренд 2.4 TFT, только я его адафрутом запускаю! Ану еслия пробану сейчас свою УНО таким образом, интересно - засветится или нет ?
Не засвечивается что-то !!!!! UTFTGLUE я не нашёл. Не поделишься?
либа Mcufriend_kbv. дисплей хорошо работает. карту победить не могу)) все таки мне кажется дело в карте
в каком месте делеи. скинь правленный код. или в самой либе чтоли добавлять делеи
мой дисплей с этой библиотекой не работает (((( Я нашёл ее, скачал, установил - пофиг. Белый экран... "Mcufriend_kbv" в смысле.
У меня дисплей не такой сто пудов. Там написано что библиотека будет работать только с 28-ми пиновыми шилдами. А у меня там явно не 28. И еще и УНО. Там шилд не такой вообще: пины по бокам. А библиотека, вроде как, под МЕГУ заточена... Так что - фанарь мне )))))
либа Mcufriend_kbv. дисплей хорошо работает. карту победить не могу)) все таки мне кажется дело в карте
в каком месте делеи. скинь правленный код. или в самой либе чтоли добавлять делеи
В примере "CardInfo" вот перед этими строчками:
наверху прицепи "Delay(1000);"
Что бы не казалось что дело в карте, возми еще кучу других карт. А пока тебе сравнить не с чем - как ты можешь утверждать что дело именно в карте? Если одна пашет, а другая нет - тогда понятно. А когда есть всего пару неработающих в шилде карт - это маловато. Вот когда штук 5 не запашут, тогда дело в шилде или софте. А когда 3 запашут, а 2 твои - нет, то - в картах...