Arduino LCD – krótka instrukcja

Electropia.pl wprowadziła do sprzedaży serię wyświetlaczy LCD z funkcją dotykową o rozmiarze 2.4 przystosowanych do użycia z Arduino:
arduino_clone_and_lcdlcd_tft_backlcd_tft_on_arduino
Wyświetlacze te napędzane są przez układ Samsung S6D0154.

Biblioteki

Żeby uruchomić wyświetlacz należy najpierw dodać kilka bibliotek do Arduino IDE:

Biblioteki te umieszczone są w repozytoriach git-a; żeby je dodać do Arduino IDE (instrukcje dla Internet Explorera):

  • Otwórzcie podane linki
  • Z prawej strony znajdziecie klawisz ‚Download ZIP’; wciśnijcie go, żeby pobrać kod
  • Kliknijcie ‚Otwórz’ (nie: ‚Zapisz’); otwarte archiwum pojawi się po chwili w eksploratorze, np. katalog TFTLCD-Library-master
  • Przekopiujcie cały rozpakowany katalog do bibliotek Arduino IDE (zob. ramka poniżej):
    • [CTRL]+[C] na katalogu (skopiowanie do schowka)
    • Przejdźcie do: C:\Program Files (x86)\Arduino\libraries
    • Wklejcie katalog [CTRL]+[V]

Arduino IDE trzyma biblioteki w katalogu wskazanym przez jego konfigurację. Możecie sprawdzić ten katalog w menu Plik/Preferencje w polu „Lokalizacja szkicownika”. Biblioteki są odczytywane z podkatalogu „libraries”.

Powyższe operacje wykonajcie dla każdej z 3 bibliotek. Możecie do tego potrzebować praw administratora. Po tej operacji katalog ‚C:\Program Files (x86)\Arduino\libraries’ powinien zawierać nowe podkatalogi ‚Adafruit-GFX-Library-master’, ‚TFTLCD-Library-master’ i ‚Touch-Screen-Library-master’. Nowe biblioteki pojawią się w Arduino IDE pod Szkic-Importuj bibliotekę

Pierwszy kod

Oto przykładowy kod, który umożliwi Wam wykreślenie niebieskiego kwadratu na tle czerwonego ekranu. Otwórzcie Arduino IDE i dołączcie biblioteki ‚Szkic-Importuj bibliotekę-Adafruit-GFX-Library-master’ oraz ‚Szkic-Importuj bibliotekę-TFTLCD-Library-master’. Kod programu wygląda tak:

#include <registers.h>
#include <pin_magic.h>
#include <Adafruit_TFTLCD.h>
#include <Adafruit_GFX.h>
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define RED 0xF800
#define BLUE 0x001F
//Tworzymy instancję wyswietlacza:
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup(){
  //...
  tft.reset();
  tft.begin(0x154);
  //Czerwony ekran
  tft.fillScreen(RED);
}
void loop(){
  //Niebieski ekran
  tft.fillRect(50, 50, 100, 100, BLUE);
}

Kilka przydatnych poleceń poniżej:

tft.setRotation(i); Kierunek ekranu; i=0..3
tft.fillScreen(z); Wypełnienie całego ekranu; z: kolor w systemie 565, np:
#define RED 0xF800
z = tft.color565(r,g,b) Podaj kod koloru (r,g,b); do wykorzystania z np. fillScreen()
tft.fillRect(x, y, xl, yl, z); Wykreśl na pozycji (x,y) wypełniony kwadrat o bokach (xl, yl) i kolorze z
tft.drawPixel(x,y,c); Zapal piksel na pozycji (x,y) na kolor c
tft.setTextSize(4); Ustaw wielkość czcionki na 4
tft.setCursor(x,y); Ustaw kursor w pozycji (x,y)
tft.println(„a”); Wyświetl napis „a” na ekranie

Dla przykładu, żeby wyświetlić napis „electropia” na ekranie:

  • Ustaw wielkość czcionki:tft.setTextSize(4);
  • Ustaw kursor w pozycji 0,20:tft.setCursor(0,20);
  • Wyświetl napis:tft.println("electropia");

Arduino Mega 2560

Powyższe instrukcje zadziałają dla Arduino UNO R3. Jeżeli jednak spróbujecie przełożyć wyświetlacz do Arduino Mega 2560 i uruchomić ten sam kod (z tymi samymi bibliotekami) – zobaczycie jedynie jasny ekran.

W porównianiu do  UNO (i napędzającego go AtMega328p), w Arduino Mega piny cyfrowe Dx są podłączone do innych portów kontrolera AtMega2560. Stąd się bierze się różnica w działaniu.

Można to szybko rozwiązać:

  • Do katalogu z biblioteką ‚libraries/TFTLCD-Library-master’ dodajcie plik „mega_24_shield.h” pobrany z: githuba Smoke-And-Wires,
  • Z ‚libraries/TFTLCD-Library-master’ usuńcie plik „pin_magic.h” (skopiujcie oryginalny plik gdzieś na bok, żeby później przywrócić bibliotekę do stanu początkowego),
  • W pliku ‚libraries/TFTLCD-Library-master/Adafruit_TFTLCD.cpp’ zmieńcie linijkę:
    #include "pin_magic.h"
    na:
    #include "mega_24_shield.h"
  • Owórzcie nowy projekt, dodajcie biblioteki Szkic-Importuj bibliotekę-Adafruit-GFX-Library-master’ oraz ‚Szkic-Importuj bibliotekę-TFTLCD-Library-master’ (tak jak dla UNO); program powinien teraz teraz wyglądać tak:
#include <mega_24_shield.h>
#include <registers.h>
#include <Adafruit_TFTLCD.h>

#include <Adafruit_GFX.h>

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

Skopiujcie resztę kodu podobnie jak dla UNO:

#include <mega_24_shield.h>
#include <registers.h>
#include <Adafruit_TFTLCD.h>
#include <Adafruit_GFX.h>

#define RED 0xF800
#define BLUE 0x001F
//Tworzymy instancję wyswietlacza:
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup(){
  //...
  tft.reset();
  tft.begin(0x154);
  //Czerwony ekran
  tft.fillScreen(RED);
}
void loop(){
  //Niebieski ekran
  tft.fillRect(50, 50, 100, 100, BLUE);
}


Zauważyliście brak #define LCD_...? Nie są już potrzebne – autorzy „mega_24_shield.h” zdefiniowali je za Was!

Rezultatem powinna być oszałamiająca grafika:

mega_lcdOczywiście, żeby z powrotem użyć kodu na UNO, będziecie musieli przywrócić bibliotekę do stanu oryginalnego: zamienić „#include” w „libraries/TFTLCD-Library-master/Adafruit_TFTLCD.cpp”, z powrotem dodać  „pin_magic.h” (zrobiliście ich kopię przez modyfikacjami, prawda?) oraz usunąć „mega_24_shield” .

Biblioteka Swift Smoke-And-Wires obsługuje tylko wyświetlacze z czipem ST7781 (ID: 0x932x). Nie przyda się do tego LCD.

Podsumowanie

Keypad na Arduino z wyświetlaczem LCD TFT 2.4 cala
Keypad na Arduino z wyświetlaczem LCD TFT 2.4 cala

Moduł wyświetlacza będzie bardzo praktycznym uzupełnieniem Waszych projektów. Wbudowane gniazdo na karty SD pozwoli na przechowywanie kolorowych obrazków do wykorzystania na tło. Dotykowy interfejs wzbogaci Wasze projekty o element interakcji. Jestem pewien, że znajdziecie wiele zastosowań dla tego modułu. Moduł lcd tft 2.4 możecie kupić w sklepie electropia.pl

Źródła

  • http://misc.ws/2013/11/08/touch-screen-shield-for-arduino-uno/
  • http://forum.arduino.cc/index.php?topic=223769
  • http://forum.arduino.cc/index.php?topic=134708
  • http://forum.arduino.cc/index.php?topic=286790
  • https://github.com/samuraijap/TFTLCD-Library/issues/2
  • https://github.com/Smoke-And-Wires/

6 thoughts on “Arduino LCD – krótka instrukcja”

  1. Nie wiem, czy jest Pan świadom tego, że Pana praca została wykorzystana na portalu majsterkowo.pl, bez podania źródła i autora (to się chyba nazywa plagiat).
    Proszę się zgłosić do administratora portalu, powinien zadziałać w temacie.

    1. Nie – nie byłem, dziekuję za reakcję. Swoje teksty publikuję na licencji Creative Commons: BY-NC-SA. każdy może ich użyć pod warunkiem dodania autorstwa, nie stosowania komercyjnego i dzielenia się na tych samych zasadach. Ba – nawiam do dzielenia się nimi i rozwijania – ale przy uznaniu powyższych zasad. Jeszcze raz dziękuję za informacje i zapraszam do dalszego odwiedzania mojego bloga:)

      1. Widzę, że odpowiedział Pan na tamten wpis.
        Wydaje mi się, że na majsterkowie wpis ten bierze udział w konkursie, w którym można uzyskać rabat na zakupy w sklepie botland. Więc podlega to pod kradzież.
        P.S. Nie, żebym nie lubił majsterkowa. Śledzę tamtą stronę prawie od początku istnienia. Ale kradzieży nie mogłem zostawić bez reakcji.

  2. Jestem ciekaw, dlaczego Pana odpowiedź dot. skopiowania bez zgody poradnika, na portalu majsterkowo.pl została usunięta ?

    1. Witam,
      Specjalnie poprosiłem admina majsterkowa, żeby nie usuwał tego tekstu – ale przepuścił mój komentarz (mimo że zawiera linki do tego bloga). Komentarz faktycznie pojawił się – ale zniknął po kilku godzinach. Nie wiem jak działa majsterkowo i kto może usuwać komentarze…
      Źle się czuję z całą tą sytuacją. Z jednej strony cieszę się, że ktoś korzysta z moich materiałów – z drugiej: szkoda, że w taki sposób… Może jednak w ten sposób sama idea dotrze do wiekszej liczby ludzi i to właśnie będzie plus? A może sprowokuje to gdzieś-u kogoś jakąś głębszą refleksję?
      Na forum majsterkowa natrafiłem na taki wątek: http://majsterkowo.pl/forum/czarna-seria-artykulow-w-poczekalni-t4301.html#p27047.
      Pozdrawiam,
      Arek

  3. Zamieszczone informacje pozwalają na szybkie uruchomienie oddzielnie wyświetlacza oraz karty SD. Ale jest pewien problem. Praca z wyświetlaczem oraz kartą jednocześnie . Mam płytę MEGA 2560 oraz 3.5”” Touchscreen Breakout ze sterownikiem HX8357D. Wyświetlacz obsługuję 8 bitową szyną (piny 28-29). Sygnały sterujące: CS – A3; C/D- A2; WR -A1; RD-A0. Przykłady pobrałem z TFTLCD_library_master : grafiphicstest oraz tftpaint – działają poprawnie. Nie działa przykład tftbmp który powinien odczytać plik graficzni z karty SD – karta nie jest dostępna. Uruchomiłem przykład z Toutchscreen –Touch-Scren-library-master : touchscreendemo – działa poprawnie. Teraz uruchomienie karty SD. Podłączyłem do ICSP znajdującego się obok przycisku RESET piny MOSI, MISO, CLK. Przykłady z SD : cardinfo, files, readwrite działają pod warunkiem uruchomienia ich jako pierwsze po włączeniu zasilania. Uruchomienie przykładu z obsługą wyświetlacza uniemożliwia ponowną poprawną prace karty SD. Zdefiniowanie lub nie sygnału CS w przykładach nie wpływa na ich działanie . Dopisanie w przykładach działających np. grafiphicstest linijki z”SD.begin()” powoduje „kaszankę” na wyświetlaczu. Mam wątpliwości co do oznaczeń na pakiecie wyświetlacza i oznaczeń w przykładach. Oznaczenie CS w przykładzie karty SD co to za styk na płytce?
    Oznaczone na płytce wyświetlacza styki CS na obu krawędziach są ze sobą połączone i podłączone do A3 MEGA- służy do obsługi wyświetlacza więc nie powinno być tam być nowego połączenia do obsługi karty SD. Styk WR i CLK są ze sobą połączone – to można wyczytać w dokumentacji. Jest jeszcze Card CS. W przykładach są oznaczenia SD_CS, SS, CS . Na wyświetlaczu jest jeszcze styk D/C prawdopodobnie steruje łączem SPI.
    Gdzie jest błąd w programach, jak go usunąć by karta SD działała razem z wyświetlaczem dotykowym.

Dodaj komentarz

Proszę dodaj swój komentarz. Pamiętaj, żeby nie podawać żadnych danych osobowych.