Spisu treści:

Program do rysowania Arduino TFT: 4 kroki
Program do rysowania Arduino TFT: 4 kroki

Wideo: Program do rysowania Arduino TFT: 4 kroki

Wideo: Program do rysowania Arduino TFT: 4 kroki
Wideo: Tutorial: How to use 2.4 TFT Display in Arduino | SPFD5408 | ILI9341 2024, Październik
Anonim
Program do rysowania Arduino TFT
Program do rysowania Arduino TFT
Program do rysowania Arduino TFT
Program do rysowania Arduino TFT
Program do rysowania Arduino TFT
Program do rysowania Arduino TFT

Ta instrukcja szczegółowo opisuje kod, który służy do tworzenia programu do rysowania dla ekranu Arduino TFT. Ten program jest jednak wyjątkowy, ponieważ pozwala na zapisanie rysunku na karcie SD i wczytanie go później w celu wprowadzenia większej liczby edycji!

Kieszonkowe dzieci

  1. Arduino Uno - oryginalny lub kompatybilny klon
  2. Ekran dotykowy TFT - korzystałem z ekranu Elegoo, co oznacza, że potrzebowałem sterowników Elegoo.
  3. Płytka czytnika Micro SD - służy do przechowywania danych rysunkowych na karcie SD. Mój ekran miał wbudowany czytnik pod wyświetlaczem.
  4. Rysik - mój ekran był wyposażony w jeden. Paznokcie też działają dobrze.
  5. Karta Micro SD - nie więcej niż 32GB, ze względu na ograniczenia formatowania exFAT (Arduino może czytać karty sformatowane w systemie FAT32, ale NIE exFAT. Większość większych kart jest sformatowana w systemie exFAT.). Jest to rodzaj, który można umieścić w telefonie z możliwością rozszerzenia pamięci.
  6. Komputer z Arduino IDE
  7. Kabel do programowania - USB A do USB B. Mój Arduino został dostarczony z jednym.
  8. Adapter karty SD - służy do konwersji karty Micro SD na normalną kartę SD, aby umieścić ją w gnieździe SD LUB taki, który łączy kartę SD z gniazdem USB.

Krok 1: Sformatuj kartę SD

Sformatuj kartę SD
Sformatuj kartę SD
Sformatuj kartę SD
Sformatuj kartę SD
  1. Weź kartę Micro SD i podłącz ją do komputera za pomocą czytnika kart SD
  2. Otwórz Eksplorator plików i znajdź kartę SD.
  3. Kliknij go prawym przyciskiem myszy i wybierz Format.
  4. Ustaw opcje na podstawie zrzutu ekranu.
  5. Kliknij Start.
  6. Wysuń kartę po zakończeniu procesu.

Jeśli nie używasz systemu Windows, spróbuj użyć programu SD Formatter z powiązania SD.

Krok 2: Przygotuj Arduino

Przygotuj Arduino
Przygotuj Arduino
Przygotuj Arduino
Przygotuj Arduino
  1. Dociśnij osłonę ekranu do Arduino, uważając, aby wyrównać szpilki.
  2. Włóż kartę SD do czytnika pod ekranem.

Krok 3: Szkic Arduino

Chociaż lista części była dość prosta, jest mnóstwo kodu. Przejdę przez to krok po kroku tutaj.

#włączać

#include #include #include #include

Elegoo_GFX, _TFTLCD i TouchScreen są specyficzne dla sprzętu. Jeśli używasz innego ekranu, skorzystaj z bibliotek dostarczonych przez producenta.

SPI i SD służą do komunikacji z kartą SD. SPI to protokół używany przez kontroler kart SD.

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

Jest to również specyficzne dla sprzętu.

#define YP A3 // musi być pinem analogowym#define XM A2 // musi być pinem analogowym #define YM 9 #define XP 8

//Dotknij dla nowego ILI9341 TP

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

#zdefiniuj CSPIN 10

#define LCD_CS A3

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

Każda z tych instrukcji #define powoduje, że IDE zastępuje nazwę wartością. Tutaj ustawiają piny LCD i SD I/O.

// Przypisz nazwy do niektórych 16-bitowych wartości kolorów:#define CZARNY 0x0000 #define BIAŁY 0xFFFF #define CZERWONY 0xF800 #define NIEBIESKI 0x001F #define ZIELONY 0x07E0

Oto kilka kolorów użytych w kodzie. #definiowanie ich ułatwia czytanie kodu.

#define PENRADIUS 3

To definiuje rozmiar pióra do rysowania.

#zdefiniuj CIŚNIENIE MINIMALNE 10#zdefiniuj CIŚNIENIE MAKSYMALNE 1000

// Aby uzyskać lepszą precyzję docisku, musimy znać opór

// między X+ i X- Użyj dowolnego multimetru, aby go odczytać // Dla tego, którego używam, jego 300 omów na płycie X TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

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

Stwierdzenia te definiują nacisk potrzebny do zarejestrowania dotyku, zainicjowania funkcji dotyku i uruchomienia ekranu.

Przechowywanie plików;int storageSize; int stoX = 1; int stoY = 1;

Są to zmienne części pamięci programu.

void setup(void) { Serial.begin(9600); Serial.println("Program do malowania");

tft.reset();

identyfikator uint16_t = tft.readID();

if (identyfikator == 0x0101) { identyfikator = 0x9341; Serial.println(F("Znaleziono sterownik LCD 0x9341")); }

//Uruchom ekran

tft.begin(identyfikator); tft.setRotation(2);

pinMode(13, WYJŚCIE);

//Uruchom kartę SD

if (!SD.begin(CSPIN)) { Serial.println("Inicjalizacja SD nie powiodła się"); powrót; } Serial.println("Zainicjowano SD");

//Narysuj tło

narysujTło(); }

Funkcja konfiguracji uruchamia Serial, jeśli jest dostępny, resetuje ekran, wykrywa sterownik TFT, uruchamia ekran, uruchamia kartę i wywołuje funkcję rysowania tła.

Przejdę do głównej części funkcji pętli. Cała reszta służy tylko do obsługi ekranu dotykowego.

//Wykryj naciśnięcie ekranu i zapisz go do zmiennych if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { //Scale p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0); p.y = (tft.height() - mapa(p.y, TS_MINY, TS_MAXY, tft.height(), 0));

//Remis

if (p.y > 21) { //Zapisz dane na karcie SD = SD.open("storage.txt", FILE_WRITE); przechowywanie.drukuj(p.x); przechowywanie.print(", "); przechowywanie.println(s.y); przechowywanie.zamknij();

//Kropka w pozycji dotykowej

tft.fillCircle(p.x, p.y, PENRADIUS, BIAŁY); }

//Przycisk Usuń

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

//Załaduj działanie przycisku

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

Jeśli prasa zostanie wykryta, ustaw zmienne dla lokalizacji prasy.

Następnie, jeśli prasa znajduje się w obszarze rysowania, zapisz punkt na karcie SD w pliku storage.txt i narysuj okrąg w miejscu naciśnięcia o określonym rozmiarze i kolorze.

Następnie, jeśli naciśnięcie znajduje się w miejscu przycisku usuwania, uruchom funkcję, która usunie zapisany rysunek. Jeśli używasz ekranu o innym rozmiarze, spróbuj pobawić się wartościami lokalizacji przycisków.

Następnie, jeśli prasa znajduje się w miejscu przycisku ładowania, uruchom funkcję, która wczytuje zapisany rysunek. Jeśli używasz ekranu o innym rozmiarze, spróbuj pobawić się wartościami lokalizacji przycisków.

Teraz wyjaśnię funkcje.

Pierwsza funkcja jest wywoływana w konfiguracji, aby narysować tło i przyciski.

void drawBackground() { //Ustaw tło tft.fillScreen(BLACK);

//Pomaluj tekst

tft.setTextColor(BIAŁY); tft.setRozmiarTekstu(3); tft.setCursor(0, 0); tft.println("Farba");

//Przycisk ładowania

tft.fillRect(219, 0, 21, 21, ZIELONY);

//Wyczyść przycisk

tft.fillRect(198, 0, 21, 21, CZERWONY); }

Wypełnia ekran na czarno, zapisuje słowo Paint i rysuje kolorowe kwadraty dla przycisków. Jeśli używasz ekranu o innym rozmiarze, spróbuj pobawić się wartościami lokalizacji przycisków.

void deleteStorage() { //Usuń plik SD.remove("storage.txt");

//Ustaw tło

tft.fillScreen(CZARNY);

//Usuń tekst sukcesu

tft.setTextColor(BIAŁY); tft.setRozmiarTekstu(2); tft.setCursor(0, 0); tft.println("storage.txt usunięty");

//Niech użytkownik to przeczyta

opóźnienie (2000);

//Kontynuuj rysowanie

narysujTło(); }

Funkcja deleteStorage usuwa plik storage.txt, wypełnia ekran na czarno i wyświetla komunikat o pomyślnym usunięciu. Następnie wywołuje funkcję drawBackground, aby umożliwić rozpoczęcie malowania czegoś innego.

void loadStorage() { //Unikaj powtórzeń powolnych palców delay(250);

//Sprawdź plik do przechowywania

if (! SD.exists("storage.txt")) { Serial.println("Brak pliku storage.txt"); powrót; }

//Otwórz plik w trybie tylko do odczytu

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

//Dopóki są dane, while (stoY > 0) { //Aktualizuj zmienne pozycji stoX = storage.parseInt(); stoY = przechowywanie.parseInt();

//Pobierz z magazynu

tft.fillCircle(stoX, stoY, PENRADIUS, WHITE); } //Zamknij plik storage.close(); }

Na koniec funkcja loadStorage sprawdza, czy istnieje plik pamięci, otwiera go w trybie tylko do odczytu, a następnie powtarza tę pętlę:

Dopóki jest więcej danych,

  1. Zaktualizuj zmienne pozycji za pomocą przeanalizowanych danych z pliku storage.txt
  2. Narysuj okrąg w obciążonym punkcie

Gdy pętla się zakończy i nie ma więcej danych, zamyka plik magazynu.

Kod tego szkicu można znaleźć poniżej. Wystarczy go pobrać, otworzyć w Arduino i przesłać na swoją tablicę!

Krok 4: Korzystanie z tego programu

Korzystanie z tego programu
Korzystanie z tego programu

Wystarczy podłączyć Arduino do źródła zasilania - komputera, baterii, brodawki ściennej itp. i rozpocząć rysowanie. Aby usunąć rysunek i zapisane w nim dane, naciśnij czerwony przycisk. Aby wczytać rysunek z pamięci i kontynuować pracę nad nim, kliknij zielony przycisk. W ten sposób możesz wielokrotnie powtarzać rysunek!

Jako rozszerzenie spróbuj wydrukować rysunek na komputerze:

  1. Podłącz kartę SD z danymi do komputera.
  2. Otwórz storage.txt w swoim ulubionym edytorze tekstu/kodu.
  3. Skopiuj wszystkie wartości z pliku storage.txt.
  4. Skorzystaj z tego łącza, aby przejść do programu do nanoszenia punktów.
  5. Usuń dwa przykładowe punkty po lewej stronie.
  6. Wklej swoje dane tam, gdzie były przykładowe punkty.

To fajny sposób na pokazanie swoich rysunków - może nawet spróbuj zmienić kolor punktu na Arduino lub w ploterze punktowym!

Modyfikacje są mile widziane i chciałbym zobaczyć kilka sugestii w komentarzach. Dziękuję za przyjrzenie się temu i mam nadzieję, że znajdziecie dla niego fajne zastosowania w swoich własnych projektach!

Zalecana: