Съдържание:

Arduino TFT програма за рисуване: 4 стъпки
Arduino TFT програма за рисуване: 4 стъпки

Видео: Arduino TFT програма за рисуване: 4 стъпки

Видео: Arduino TFT програма за рисуване: 4 стъпки
Видео: Текстовые LCD дисплей на контроллере HD44780, Уроки Arduino 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. Микро SD четец дъска - използва се за съхраняване на чертежни данни на SD карта. Моят екран имаше вграден четец под дисплея.
  4. Stylus - екранът ми дойде с такъв. Ноктите също работят добре.
  5. Micro SD карта - не повече от 32 GB, поради ограничения за форматиране 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. Отворете File Explorer и намерете SD картата.
  3. Щракнете с десния бутон върху него и изберете Форматиране.
  4. Задайте опциите въз основа на екранната снимка.
  5. Щракнете върху Старт.
  6. Извадете картата, когато процесът приключи.

Ако не използвате Windows, опитайте да използвате SD Formatter от SD асоциацията.

Стъпка 2: Подгответе Arduino

Пригответе Arduino
Пригответе Arduino
Пригответе Arduino
Пригответе Arduino
  1. Натиснете екрана си върху Arduino, като внимавате да подредите щифтовете.
  2. Поставете SD картата в четеца под екрана.

Стъпка 3: Скица на Arduino

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

#включва

#включи #включи #включи #включи

Всички Elegoo_GFX, _TFTLCD и TouchScreen са специфични за хардуера. Ако използвате различен екран, използвайте предоставените от производителя библиотеки.

SPI и SD се използват за комуникация със SD картата. SPI е протоколът, използван от контролера на SD картата.

#ако е дефиниран (_ SAM3X8E _) #undef _FlashStringHelper:: F (string_literal) #define F (string_literal) string_literal #endif

Това също е специфично за хардуера.

#дефинирайте YP A3 // трябва да бъде аналогов щифт #дефинирайте XM A2 // трябва да бъде аналогов щифт #дефинирайте YM 9 #дефинирайте XP 8

// Докоснете за нов ILI9341 TP

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

#дефинирайте CSPIN 10

#дефинирайте LCD_CS A3

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

Всеки от тези изявления #define кара IDE да замени името със стойността. Тук те задават LCD и SD I/O щифтове.

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

Това са някои от цветовете, използвани в кода. #дефинирането им улеснява четенето на кода.

#дефинирайте PENRADIUS 3

Това определя размера на химикалката за рисуване.

#дефинирайте MINPRESSURE 10#дефинирайте 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 setup (void) {Serial.begin (9600); Serial.println ("Програма за боядисване");

tft.reset ();

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

if (идентификатор == 0x0101) {идентификатор = 0x9341; Serial.println (F ("Намерен 0x9341 LCD драйвер")); }

// Стартиране на екрана

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

pinMode (13, OUTPUT);

// Стартиране на SD карта

if (! SD.begin (CSPIN)) {Serial.println ("SD инициализацията е неуспешна"); връщане; } Serial.println ("SD инициализиран");

// Начертайте фона

drawBackground (); }

Функцията за настройка стартира Serial, ако е налична, нулира екрана, открива 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 карта = SD.open ("storage.txt", FILE_WRITE); storage.print (p.x); storage.print (","); storage.println (p.y); storage.close ();

// Точка в позицията на докосване

tft.fillCircle (p.x, p.y, PENRADIUS, WHITE); }

// Бутон за изтриване

if ((p.y 198) && (p.x <219)) {deleteStorage (); }

// Действие на бутона за зареждане

if ((p.y 219)) {loadStorage (); }}

Ако бъде открита преса, задайте променливи за местоположението на пресата.

След това, ако пресата е в зоната за рисуване, запишете точката на SD картата в storage.txt и нарисувайте кръг в натиснатата точка с определен размер и цвят.

След това, ако натискането е на мястото на бутона за изтриване, стартирайте функция, която изтрива съхранената рисунка. Ако използвате екран с различен размер, опитайте да играете със стойностите на местоположението на бутона.

След това, ако натискането е на мястото на бутона за зареждане, стартирайте функция, която зарежда съхранената чертеж. Ако използвате екран с различен размер, опитайте да играете със стойностите на местоположението на бутона.

Сега ще обясня функциите.

Първата функция се извиква в настройката за изчертаване на фона и бутоните.

void drawBackground () {// Задайте фона tft.fillScreen (BLACK);

// Боядисване на текст

tft.setTextColor (БЯЛ); tft.setTextSize (3); tft.setCursor (0, 0); tft.println ("Paint");

// Бутон за зареждане

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 () {// Избягвайте повторения от бавно забавяне на пръстите (250);

// Проверете за файл за съхранение

if (! SD.exists ("storage.txt")) {Serial.println ("No storage.txt файл"); връщане; }

// Отваряне на файл в режим само за четене

хранилище = SD.open ("storage.txt", FILE_READ);

// Докато има данни, while (stoY> 0) {// Актуализиране на променливите на позицията stoX = storage.parseInt (); stoY = storage.parseInt ();

// Извличане от хранилище

tft.fillCircle (stoX, stoY, PENRADIUS, WHITE); } // Затваряне на файла storage.close (); }

И накрая, функцията loadStorage проверява за файл за съхранение, отваря го в режим само за четене и след това повтаря този цикъл:

Докато има повече данни,

  1. Актуализирайте променливите на позицията с анализираните данни от storage.txt
  2. Начертайте кръг в заредената точка

Когато цикълът завърши и няма повече данни, той затваря файла за съхранение.

Кодът за тази скица може да бъде намерен по -долу. Просто го изтеглете, отворете го в Arduino и го качете на дъската си!

Стъпка 4: Използване на тази програма

Използване на тази програма
Използване на тази програма

Просто включете вашия Arduino към източник на захранване - компютър, батерия, брадавица и т.н. и започнете да рисувате. За да изтриете чертежа и неговите съхранени данни, натиснете червения бутон. За да заредите чертеж от хранилището и да продължите да работите върху него, щракнете върху зеления бутон. По този начин можете да повторите многократно рисунка!

Като разширение, опитайте да начертаете чертежа на вашия компютър:

  1. Включете SD картата с данни в компютъра си.
  2. Отворете storage.txt в любимия си редактор на текст/код.
  3. Копирайте всички стойности в storage.txt.
  4. Следвайте тази връзка към програма за начертаване на точки.
  5. Изтрийте двете примерни точки вляво.
  6. Поставете данните си там, където бяха примерните точки.

Това е чист начин да покажете вашите рисунки - може би дори да опитате да промените цвета на точката на Arduino или в точков плотер!

Промените са добре дошли и бих искал да видя някои предложения в коментарите. Благодаря ви, че разгледахте това и се надявам, че ще намерите чисти приложения за това във вашите собствени проекти!

Препоръчано: