Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/TFTBitmapLogo

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Отображение на TFT-экране BMP-логотипа [1]

GLCDBitmapLogo.png


Этот пример для TFT-экрана Arduino считывает bitmap-файл, записанный на SD-карту, а затем отображает его в случайном месте экрана.

То есть для этого примера вам нужна картинка под названием «arduino.bmp», сохраненная в корневой директории SD-карты. Сама SD-карта при этом должна быть отформатирована в FAT16 или FAT32. Более подробно о работе с SD-картами можно прочесть в документации о библиотеке SD.

Необходимое оборудование

  • Плата Arduino Uno;
  • TFT-экран Arduino;
  • Карта micro-SD;
  • Макетная плата Breadboard;
  • BMP-файл;

Цепь

Вставьте SD-карту с файлом-картинкой в SD-слот в задней части экрана.

Подключите контакты с питанием и «землей» к макетной плате.

GLCD logo1.png

Подключите TFT-экран к макетной плате. Подключить его нужно той стороной, где находятся стрелочка и маленькая голубая полоска. Также обратите внимание на ориентацию экрана. На этих рисунках он подсоединен вверх тормашками.

GLCD logo2.png

Контакты BL и +5V подключите к питанию, а GND – к «земле». CS-LD подключите к 10-ому контакту, DC – к 9-ому, RESET – к 8-ому, MOSI – к 11-ому, а SCK – к 13-ому. В случае с Leonardo вам надо будет использовать другие контакты, читайте об этом на странице о TFT-экране или в коде ниже.

TFT logo large.png

Код

Чтобы использовать экран, нам надо подключить библиотеки SPI и TFT, а чтобы иметь возможность считывать с SD-карты – библиотеку SD.

  1. #include <SD.h>
  2. #include <SPI.h>
  3. #include <TFT.h>

Определяем контакты, которые будем использовать для управления TFT-экраном, а также CS-контакт (контакт Chip Select) для управления SD-картой. Создаем экземпляр класса TFT и называем его TFTscreen.

  1. #define sd_cs  4
  2. #define lcd_cs 10
  3. #define dc     9
  4. #define rst    8  
  5.  
  6. TFT TFTscreen = TFT(cs, dc, rst);

Для хранения графической информации есть специальный тип данных – PImage. Создаем на его основе переменную под названием logo.

  1. PImage logo;

В секции setup() инициализируем последовательный порт и ждем его активации перед тем, как запустить скетч. Если статусная информация, передаваемая через последовательный порт, вам будет не нужна, просто закомментируйте цикл while().

Запустив последовательную коммуникацию, инициализируем библиотеку SD. В случае ошибки сообщаем об этом на Serial Monitor.

  1. void setup() {
  2.   Serial.begin(9600);
  3.   while (!Serial) {
  4.   }
  5.  
  6.   Serial.print("Initializing SD card...");
  7.   if (!SD.begin(SD_CS)) {
  8.     Serial.println("failed!");
  9.     return;
  10.   }
  11.   Serial.println("OK!");

Инициализируем экран и очищаем его.

  1. TFTscreen.begin();
  2.   TFTscreen.background(255, 255, 255);

При помощи функции loadimage() считываем файл-картинку в переменную logo. В случае ошибки сообщаем об этом на Serial Monitor.

  1. logo = TFTscreen.loadImage("logo.bmp");
  2.   if (!logo.isValid()) {
  3.     Serial.println("error while loading arduino.bmp");
  4.   }
  5. }

В случае ошибки при загрузке картинки останавливаем скетч, пока он не начал работать дальше.

  1. void loop() {
  2.   if (logo.isValid() == false) {
  3.     return;
  4.   }

Если картинка загрузилась нормально, выбираем на экране случайное место, где мы ее покажем. Чтобы картинка не вылезала за пределы экрана, вычитаем ее размеры из размеров экрана.

  1. int x = random(TFTscreen.width() - logo.width());
  2.   int y = random(TFTscreen.height() - logo.height());

Беря за основу эти случайные координаты, рисуем картинку. Перед тем, как перейти к следующему циклу, немного ждем.

  1. TFTscreen.image(logo, x, y);
  2.  
  3.   delay(1500);
  4. }

Весь код полностью – ниже:

  1. /*
  2. Отображение на TFT-экране BMP-логотипа
  3.  
  4. Этот пример считывает с SD-карты файл-картинку, а затем рисует ее
  5. в случайном месте экрана.
  6.  
  7. В этом скетче с карты micro-SD считывается логотип Arduino.
  8. Это файл с расширением «.bmp», который идет в комплекте с этим скетчем:
  9. - Откройте папку со скетчами (Ctrl-K или Cmd-K)
  10. - Скопируйте файл «arduino.bmp» на карту micro-SD
  11. - Воткните ее в SD-слот TFT-экрана
  12.  
  13. Этот код не защищен авторским правом.
  14.  
  15. Создан 19 апреля 2013 Энрико Гуэли (Enrico Gueli).
  16.  
  17. http://www.arduino.cc/en/Tutorial/TFTBitmapLogo
  18. */
  19.  
  20. // Подключаем необходимые библиотеки:
  21. #include <SPI.h>
  22. #include <SD.h>
  23. #include <TFT.h>  // библиотека TFT-экрана Arduino
  24.  
  25. // Определяем контакты для Arduino Uno:
  26. #define sd_cs  4
  27. #define lcd_cs 10
  28. #define dc     9
  29. #define rst    8
  30.  
  31. // Определяем контакты для Arduino Leonardo (чтобы использовать, раскомментируйте):
  32. //#define sd_cs  8
  33. //#define lcd_cs 7
  34. //#define dc     0
  35. //#define rst    1
  36.  
  37. TFT TFTscreen = TFT(lcd_cs, dc, rst);
  38.  
  39. // Эта переменная будет хранить картинку, которую скетч будет рисовать на экране:
  40. PImage logo;
  41.  
  42.  
  43. void setup() {
  44.   // Инициализируем TFT-экран и показываем сообщение,
  45.   // где просим пользователя открыть Serial Monitor:
  46.   TFTscreen.begin();
  47.   TFTscreen.background(255, 255, 255);
  48.  
  49.   TFTscreen.stroke(0, 0, 255);
  50.   TFTscreen.println();
  51.   TFTscreen.println(F("Arduino TFT Bitmap Example"));  //  "Показ BMP-картинки на TFT-экране Arduino"
  52.   TFTscreen.stroke(0, 0, 0);
  53.   TFTscreen.println(F("Open serial monitor"));  //  "Чтобы запустить скетч,"
  54.   TFTscreen.println(F("to run the sketch"));  //  "откройте Serial Monitor"
  55.  
  56.   // Инициализируем последовательный порт.
  57.   // Он будет использоваться для показа диагностической информации.
  58.   Serial.begin(9600);
  59.   while (!Serial) {
  60.     // ждем, когда последовательная линия будет готова к работе:
  61.   }
  62.  
  63.   // Перед тем, как начать, очищаем TFT-экран:
  64.   TFTscreen.background(255, 255, 255);
  65.  
  66.   // Пробуем получить доступ к SD-карте. Если не удалось
  67.   // (например, если карта не воткнута в слот), останавливаем процесс:
  68.   Serial.print(F("Initializing SD card..."));  //  "Инициализация SD-карты..."
  69.   if (!SD.begin(sd_cs)) {
  70.     Serial.println(F("failed!"));  //  "Ошибка!"
  71.     return;
  72.   }
  73.   Serial.println(F("OK!"));  //  "ОК!"
  74.  
  75.   // Инициализируем TFT-экран и очищаем его:
  76.   TFTscreen.begin();
  77.   TFTscreen.background(255, 255, 255);
  78.  
  79.   // Теперь, когда мы имеем доступ к SD-карте, пытаемся загрузить файл с картинкой:
  80.   logo = TFTscreen.loadImage("arduino.bmp");
  81.   if (!logo.isValid()) {
  82.     Serial.println(F("error while loading arduino.bmp"));  //  "Ошибка в загрузке файла arduino.bmp"
  83.   }
  84. }
  85.  
  86. void loop() {
  87.   // Пока картинка не загрузится нормально, ничего не делаем:
  88.   if (logo.isValid() == false) {
  89.     return;
  90.   }
  91.  
  92.   Serial.println(F("drawing image"));  //  "Рисуем картинку..."
  93.  
  94.   // Генерируем случайные координаты, где будем рисовать картинку.
  95.   // Чтобы картинка не нарисовалась за пределами экрана,
  96.   // вычитаем ее размеры из размеров экрана:
  97.   int x = random(TFTscreen.width() - logo.width());
  98.   int y = random(TFTscreen.height() - logo.height());
  99.  
  100.   // Рисуем картинку на экране:
  101.   TFTscreen.image(logo, x, y);
  102.  
  103.   // Перед тем, как рисовать еще раз, немного ждем:
  104.   delay(1500);
  105. }

См.также

Внешние ссылки

  1. Arduino - TFT Bitmap Logo