Вывод изображения с SD карты на TFT экран

Lictor
Offline
Зарегистрирован: 01.10.2015

Доброго времени суток.

Не могу вывести картинку на TFT экран с SD карты. Для решения проблемы обращался к гуглу. Нашел следующую информацию:

В библиотеке TFT есть функция прямого вывода изображения на экран.


// подключаем необходимые библиотеки
#include <SPI.h>
#include <SD.h>
#include <TFT.h> // Библиотека для работы с TFT-экраном
 
// объявление выводов для Arduino Uno
#define SD_CS  11
#define LCD_CS 10
#define DC    9
#define RESET    8  
 
// объявление выводов для Leonardo
// #define SD_CS  8
// #define LCD_CS 7
// #define DC   0
// #define RESET  1
 
TFT myScreen = TFT(LCD_CS, DC, RESET);
 
// эта переменная описывает изображение, которое будет выводиться на экран
PImage image;
 
void setup() {
  // инициализируем последовательный интерфейс передачи данных
  Serial.begin(9600);
  while (!Serial) {
    // ожидаем готовности последовательного порта
    // - необходимо для Arduino Leonardo
  }
 
  // пробуем обратиться к SD-карте памяти
  Serial.print("Initializing SD card...");
  if (!SD.begin(SD_CS)) {
    Serial.println("failed!");
    return;
  }
  Serial.println("OK!");
 
  // инициализируем и очищаем GLCD-экран
  myScreen.begin();
  myScreen.background(255, 255, 255);
 
  // загружаем изображение с SD-карты
  image = myScreen.loadImage("arduino.bmp");
 
  // проверяем, корректно ли загружена картинка
  if (image.isValid() != true) {
    Serial.println("error while loading arduino.bmp");
  }
 
  //выводим изображение на экран
  myScreen.image(image, 0, 0);
}
 
void loop(){
// здесь ничего не делаем
} :

В библиотеке UTFT такого нет. (есть только некая функция writeScreen24, которая судя по всему занимается рисованием картнок из массива). Как я понял, мне нужно сперва открыть файл с рисунком на флэшке, затем побайтово считывать картинку и выводить на экран, т.к. загрузить сразу весь рисунок в память контроллера мне просто не хватит памяти. Но ведь должен же быть способ проще?

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

День добрый.

"В библиотеке UTFT такого нет". А библиотеке "TFT" такое разве есть? Судя по куче ошибок, которая вылазит при компиляции, таки-нет. Кроме того эта странная строка:

 // загружаем изображение с SD-карты
<em><strong> image = myScreen.loadImage("arduino.bmp");</strong></em>

Я не встречал еще в языке IDE теги HTML или как там называются эти  слова в типографских кавычках - я не силён в гиперязыке.

Если поубирать эти теги, всё же ошибки есть и они ссылаются на библиотеку "TFT.h", из чего следует вывод, что библиотека используемая в данном скетче, только называется так же как стандартная библиотека IDE.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Рассуждаем дальше...

Судя из Ваших исследований, вывести картинку сразу на экран не получится в силу ограниченного объёма памяти МК. Насколько я могу предположить, в обычном компьютере в выводе изображения на "экран" учавствует оперативная память видеокарты. Однак же я не берусь утверждать что в TFT-дисплее есть такое понятие, достаточное для хранения всего изображения. Следовательно - единственновозможный способ отобразить графический файл, это побитовое считывание.

Мораль: либо библиотека "TFT.h", которая используется для этого примера, нестандартная, либо этот скетч нерабочий.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Для UTFT есть расширение для использования SD-карты - UTFT_tinyFat

Lictor
Offline
Зарегистрирован: 01.10.2015

Buzzer2010 пишет:

День добрый.

"В библиотеке UTFT такого нет". А библиотеке "TFT" такое разве есть? Судя по куче ошибок, которая вылазит при компиляции, таки-нет. Кроме того эта странная строка:

 // загружаем изображение с SD-карты
<em><strong> image = myScreen.loadImage("arduino.bmp");</strong></em>

Я не встречал еще в языке IDE теги HTML или как там называются эти  слова в типографских кавычках - я не силён в гиперязыке.

Если поубирать эти теги, всё же ошибки есть и они ссылаются на библиотеку "TFT.h", из чего следует вывод, что библиотека используемая в данном скетче, только называется так же как стандартная библиотека IDE.

 

код некоректно вставился, он проходит компиляцию

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Lictor пишет:
код некоректно вставился, он проходит компиляцию

Между "проходит компиляцию" и "работает" - нет никакой связи. В моём топике про "TVout.h" компиляцию проходит только с сообщениями белым шрифтом, но не работает. Ничего не могу сказать в данном, отдельно взятом случае - у меня нет под рукой такого шилда. Однако же о более простом способе вывода картинок с SD-карты на дисплей мне тоже интересно было бы узнать. Но я так понимаю: чем проще тем сложнее. Чем проще это будет осуществлено для пользователя, тем сложнее должен быть устроен сам ардуино...

Один мой знакомый сказал очень умную фразу: "Не пытайся сделать из микроконтроллера компьютер!"

Lictor
Offline
Зарегистрирован: 01.10.2015

Библиотека пока работать не хочет. Мне кажется, что вывод на дисплей картнки с флэшки должен быть тривиальной задачей с готовым решением. Тем более, что если подключить ВСЕ необходмые для ее работы библиотеки 

#include <tinyFAT.h>
#include <UTFT.h>
#include <UTFT_tinyFAT.h>
#include <SPI.h>
#include <SD.h>

жрут без малого 80% динамической памяти. Или все таки это не тривильная задача?

Lictor
Offline
Зарегистрирован: 01.10.2015

Yarik.Yar пишет:
Для UTFT есть расширение для использования SD-карты - UTFT_tinyFat

 

Благодарю. Библиотека заработала. Это именно то, что было нужно.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Как только придёт TFT дисплей, смогу сказать больше по этому поводу, а сейчас - буду только прислушиваться )))

Lictor
Offline
Зарегистрирован: 01.10.2015

Buzzer2010 пишет:

Как только придёт TFT дисплей, смогу сказать больше по этому поводу, а сейчас - буду только прислушиваться )))

 

Я уже подружил карточку и дисплей) Благодарим Ярика.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

Lictor пишет:

Buzzer2010 пишет:

Как только придёт TFT дисплей, смогу сказать больше по этому поводу, а сейчас - буду только прислушиваться )))

 

Я уже подружил карточку и дисплей) Благодарим Ярика.

Тиха! Не рассказывай как! Я хочу сам поковыряться ))))

alexvs
Offline
Зарегистрирован: 22.07.2014

А какой дисплей используете? На каком контроллере? Может у него  (дисплея) есть встроенная SPI flash память?

Тогда SD Card вообще не нужна, все картинки можно загрузить в эту SPI flash и затем выводить уже оттуда.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

alexvs пишет:

А какой дисплей используете? На каком контроллере? Может у него  (дисплея) есть встроенная SPI flash память?

Тогда SD Card вообще не нужна, все картинки можно загрузить в эту SPI flash и затем выводить уже оттуда.

Хорошая такая SPI flash! Это ж сколько она объёмом, интересно, бывает?

alexvs
Offline
Зарегистрирован: 22.07.2014

зависит от устновленных микрсхем. На моем дисплее, например, установлено 64Мб. Не гигабайты конечно, как на SD, но мне хватает.

Buzzer2010
Buzzer2010 аватар
Offline
Зарегистрирован: 10.03.2016

64 мегобайта на старых видеокартах хватало что бы 3D игры запускать.

valera678
Offline
Зарегистрирован: 04.11.2016

http://www.poprobot.ru/home/Arduino-TFT-SPI  Здесь о библиотеке Adafruit_ST7735  и выводе картинки с карты на экран