Оглавление:

Программа рисования Arduino TFT: 4 шага
Программа рисования Arduino TFT: 4 шага

Видео: Программа рисования Arduino TFT: 4 шага

Видео: Программа рисования Arduino TFT: 4 шага
Видео: ЛУЧШИЙ ЭКРАН ДЛЯ АРДУИНО ARDUINO TFT LCD 1.44 SPI 128Х128 ЗА $3! 2024, Июль
Anonim
Программа для рисования Arduino TFT
Программа для рисования Arduino TFT
Программа для рисования Arduino TFT
Программа для рисования Arduino TFT
Программа для рисования Arduino TFT
Программа для рисования Arduino TFT

В этой инструкции подробно описан код, который используется для создания программы рисования для экрана Arduino TFT. Однако эта программа уникальна тем, что позволяет сохранить рисунок на SD-карту и загрузить его позже, чтобы внести больше правок!

Запасы

  1. Arduino Uno - оригинал или совместимый клон
  2. Сенсорный экран TFT - я использовал экран Elegoo, то есть мне нужны драйверы Elegoo.
  3. Плата считывателя Micro SD - используется для хранения данных чертежей на SD-карте. У моего экрана был встроенный ридер под дисплеем.
  4. Стилус - мой экран был с ним. Ногти тоже подойдут.
  5. Карта Micro SD - не более 32 ГБ из-за ограничений форматирования exFAT (Arduino может читать карты, отформатированные в FAT32, но НЕ exFAT. Большинство карт большего размера отформатированы с помощью exFAT). Это тот тип, который вы бы поместили в телефон с расширяемой памятью.
  6. Компьютер с Arduino IDE
  7. Кабель для программирования - USB A - USB B. В моем Arduino он был.
  8. Адаптер SD-карты - используется для преобразования карты Micro SD в обычную SD для установки в слот SD ИЛИ тот, который подключает SD-карту к слоту USB.

Шаг 1. Отформатируйте SD-карту

Отформатируйте SD-карту
Отформатируйте SD-карту
Отформатируйте SD-карту
Отформатируйте SD-карту
  1. Возьмите карту Micro SD и прикрепите ее к компьютеру с помощью устройства чтения SD-карт.
  2. Откройте проводник и найдите SD-карту.
  3. Щелкните его правой кнопкой мыши и выберите Формат.
  4. Установите параметры на основе снимка экрана.
  5. Щелкните "Пуск".
  6. Извлеките карту, когда процесс будет завершен.

Если вы не используете Windows, попробуйте использовать SD Formatter из ассоциации SD.

Шаг 2: подготовьте Arduino

Подготовьте Arduino
Подготовьте Arduino
Подготовьте Arduino
Подготовьте Arduino
  1. Прижмите экранный экран к Arduino, стараясь совместить контакты.
  2. Вставьте SD-карту в считывающее устройство под экраном.

Шаг 3: эскиз Arduino

Хотя список деталей был довольно простым, кода там много. Я рассмотрю это шаг за шагом здесь.

#включают

#include #include #include #include

Elegoo_GFX, _TFTLCD и TouchScreen зависят от оборудования. Если вы используете другой экран, используйте библиотеки, предоставленные производителем.

SPI и SD используются для связи с SD-картой. SPI - это протокол, используемый контроллером SD-карты.

#if defined (_ SAM3X8E _) # undef _FlashStringHelper:: F (string_literal) #define F (string_literal) string_literal #endif

Это также зависит от оборудования.

#define YP A3 // должен быть аналоговым выводом # define XM A2 // должен быть аналоговым выводом #define YM 9 #define XP 8

// Touch для нового ILI9341 TP

#define TS_MINX 120 #define TS_MAXX 900 #define TS_MINY 70 #define TS_MAXY 920

#define CSPIN 10

#define LCD_CS A3

#define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 #define LCD_RESET A4

Каждый из этих операторов #define заставляет среду IDE заменять имя значением. Здесь они устанавливают контакты ввода-вывода LCD и SD.

// Присваиваем имена некоторым 16-битным значениям цвета: #define BLACK 0x0000 #define WHITE 0xFFFF #define RED 0xF800 #define BLUE 0x001F #define GREEN 0x07E0

Это несколько цветов, используемых в коде. # их определение упрощает чтение кода.

#define ПЕНРАДИУС 3

Это определяет размер пера для рисования.

#define MINPRESSURE 10 # define MAXPRESSURE 1000

// Для большей точности давления нам нужно знать сопротивление

// между X + и X-. Используйте любой мультиметр, чтобы считать его // Для того, который я использую, его сопротивление 300 Ом через X-пластину TouchScreen ts = TouchScreen (XP, YP, XM, YM, 300);

Elegoo_TFTLCD tft (LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

Эти операторы определяют давление, необходимое для регистрации касания, инициализации сенсорной функции и запуска экрана.

Файловое хранилище; int storageSize; int stoX = 1; int stoY = 1;

Это переменные для запоминающей части программы.

установка void (void) {Serial.begin (9600); Serial.println («Программа рисования»);

tft.reset ();

uint16_t идентификатор = tft.readID ();

если (идентификатор == 0x0101) {идентификатор = 0x9341; Serial.println (F («Найден драйвер ЖК-дисплея 0x9341»)); }

// Запускаем экран

tft.begin (идентификатор); tft.setRotation (2);

pinMode (13, ВЫХОД);

// Запускаем SD-карту

if (! SD.begin (CSPIN)) {Serial.println («Ошибка инициализации SD»); возвращение; } Serial.println ("SD инициализирована");

// Рисуем фон

drawBackground (); }

Функция настройки запускает последовательный порт, если он доступен, сбрасывает экран, обнаруживает драйвер TFT, запускает экран, запускает карту и вызывает функцию для рисования фона.

Я перейду к основной части функции цикла. Все остальное просто используется для управления тачскрином.

// Обнаружение нажатия на экран и сохранение его в переменных if (p.z> MINPRESSURE && p.z <MAXPRESSURE) {// Масштабирование p.x = map (p.x, TS_MINX, TS_MAXX, tft.width (), 0); p.y = (tft.height () - карта (p.y, TS_MINY, TS_MAXY, tft.height (), 0));

//Рисовать

if (p.y> 21) {// Сохраняем данные на SD-карту storage = SD.open ("storage.txt", FILE_WRITE); хранилище. печать (p.x); storage.print (","); storage.println (p.y); storage.close ();

// Точка в месте касания

tft.fillCircle (p.x, p.y, ПЕНРАДИУС, БЕЛЫЙ); }

// Кнопка удаления

если ((стр. 198) && (стр. x <219)) {deleteStorage (); }

// Загрузить действие кнопки

если ((стр. 219)) {loadStorage (); }}

Если пресс обнаружен, установите переменные для местоположения пресса.

Затем, если печатная машина находится в области рисования, сохраните точку на SD-карту в storage.txt и нарисуйте круг в нажатой точке определенного размера и цвета.

Затем, если пресс находится в месте кнопки удаления, запустите функцию, которая удаляет сохраненный рисунок. Если вы используете экран другого размера, попробуйте поиграть со значениями расположения кнопок.

Затем, если пресс находится в месте кнопки загрузки, запустите функцию, загружающую сохраненный рисунок. Если вы используете экран другого размера, попробуйте поиграть со значениями расположения кнопок.

Теперь я объясню функции.

Первая функция вызывается в настройке для рисования фона и кнопок.

void drawBackground () {// Устанавливаем фон tft.fillScreen (ЧЕРНЫЙ);

// Закрашиваем текст

tft.setTextColor (БЕЛЫЙ); tft.setTextSize (3); tft.setCursor (0, 0); tft.println («Краска»);

// Кнопка загрузки

tft.fillRect (219, 0, 21, 21, ЗЕЛЕНЫЙ);

// Кнопка очистки

tft.fillRect (198, 0, 21, 21, КРАСНЫЙ); }

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

void deleteStorage () {// Удаляем файл SD.remove ("storage.txt");

// Устанавливаем фон

tft.fillScreen (ЧЕРНЫЙ);

// Удаляем текст успеха

tft.setTextColor (БЕЛЫЙ); tft.setTextSize (2); tft.setCursor (0, 0); tft.println ("storage.txt удален");

// Позвольте пользователю прочитать это

задержка (2000);

// Продолжаем рисование

drawBackground (); }

Функция deleteStorage удаляет файл storage.txt, заполняет экран черным цветом и выдает сообщение об успешном удалении. Затем он вызывает функцию drawBackground, чтобы вы могли начать рисовать что-нибудь еще.

void loadStorage () {// Избегайте повторов из-за медленных пальцев delay (250);

// Проверяем наличие файла для хранения

if (! SD.exists ("storage.txt")) {Serial.println ("Нет файла storage.txt"); возвращение; }

// Открываем файл в режиме только для чтения

storage = SD.open ("storage.txt", FILE_READ);

// Пока есть данные, while (stoY> 0) {// Обновляем переменные позиции stoX = storage.parseInt (); stoY = storage.parseInt ();

// Рисуем из хранилища

tft.fillCircle (stoX, stoY, PENRADIUS, БЕЛЫЙ); } // Закрываем файл storage.close (); }

Наконец, функция loadStorage проверяет наличие файла хранилища, открывает его в режиме только для чтения, а затем повторяет этот цикл:

Пока есть больше данных,

  1. Обновите переменные позиции с помощью проанализированных данных из storage.txt
  2. Нарисуйте круг в загруженной точке

Когда цикл завершается и данных больше нет, он закрывает файл хранилища.

Код этого скетча можно найти ниже. Просто скачайте его, откройте в Arduino и загрузите на свою плату!

Шаг 4: Использование этой программы

Использование этой программы
Использование этой программы

Просто подключите Arduino к источнику питания - компьютеру, батарее, бородавке и т. Д. И начинайте рисовать. Чтобы стереть рисунок и сохраненные в нем данные, нажмите красную кнопку. Чтобы загрузить рисунок из хранилища и продолжить работу с ним, нажмите зеленую кнопку. Таким образом, вы можете многократно повторять рисунок!

В качестве расширения попробуйте нарисовать рисунок на своем компьютере:

  1. Подключите SD-карту с данными к компьютеру.
  2. Откройте storage.txt в своем любимом текстовом редакторе / редакторе кода.
  3. Скопируйте все значения в storage.txt.
  4. Перейдите по этой ссылке к программе точечного построения.
  5. Удалите две примерные точки слева.
  6. Вставьте свои данные туда, где были точки для примера.

Это отличный способ продемонстрировать свои рисунки - возможно, даже попробуйте изменить цвет точки на Arduino или в плоттере!

Модификации приветствуются, и я хотел бы увидеть некоторые предложения в комментариях. Спасибо, что взглянули на это, и я надеюсь, что вы найдете ему полезное применение в своих собственных проектах!

Рекомендуемые: