OK

Při poskytování služeb nám pomáhají soubory cookie. Používáním našich služeb vyjadřujete souhlas s naším používáním souborů cookie. Více informací

Úvodní stránka » Arduino » Arduino v příkladech - IX. díl - Displej a příkazy z knihovny

Arduino v příkladech - IX. díl - Displej a příkazy z knihovny

Už to svítí a maluje kolečka. Displej toho za pomoci knihovny dokáže mnohem více. V tomto díle si projdeme jednotlivé příkazy, které nám na displeji vykouzlí různé obrázky. Proč obrázky, protože všechno co na grafickém displeji zobrazujete je jenom obrázek.

Často používané příkazy:

init()

Inicializuje displej, nastaví parametry komunikace a resetuje displej. Inicializuje se ve funkci setup(), nebo kdykoliv potřebujete.

setRotation(uint8_t m)

Nastavuje orientaci displeje. Obvykle se inicializuje ve funkci setup, je ale možné kdykoliv změnit. Používají se hodnoty 0,1,2,3 – jedná se o otočení o 90 stupňů ve směru hodinových ručiček.

height()

Vrací hodnotu šířky displeje v pixelech. Hodnota je vypočítána podle nastavené orientace displeje. Můžete tak ve smyčce SETUP vypočítat rozdělení displeje na segmenty pro snadnější programování.

width()

Vrací hodnotu výšky displeje v pixelech. Hodnota je vypočítána podle nastavené orientace displeje. Můžete tak ve smyčce SETUP vypočítat rozdělení displeje na segmenty pro snadnější programování.

fillScreen(uint16_t color)

Překreslí celou plochu displeje barvou color. Dá se využít pro vymazání dat z celého displeje, např. před vykreslením jiné stránky.

drawPixel(int16_t x, int16_t y, uint16_t color)

Změní barvu jednoho pixelu na pozici xy.

drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color)

Nakreslí čáru o šířce jednoho pixelu z bodu x0 y0 do bodu x1 y1, barvě color. Můžete kreslit čáry libovolného směru.

drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color)

Nakreslí vodorovnou čáru z bodu xy o délce w, barvě color.

drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color)

Nakreslí svislou čáru z bodu xy o délce h, barvě color.

drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)

Nakreslí rámeček ve tvaru čtverce/obdélníku. Levý horní roh začíná na pozici xy, délce w, výšce h, barvě color.

drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color)

Nakreslí rámeček, se zakulacenými rohy ve formátu čtverce/obdélníku. Levý horní roh začíná na pozici xy, délce w, výšce h, zaoblení roku r, barvě color.

fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color)

Nakreslí obrazec ve formátu čtverce/obdélníku. Levý horní roh začíná na pozici xy, délce w, výšce h, barvě color.

fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color)

Nakreslí obrazec, se zakulacenými rohy ve tvaru čtverce/obdélníku. Levý horní roh začíná na pozici xy, délce w, výšce h, zaoblení roku r, barvě color.

drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color)

Nakreslí rámeček ve tvaru kruhu. Střed kruhu je na pozici x0y0, poloměr r, barvě color.

fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color)

Nakreslí kruh, střed na pozici x0y0, poloměr r, barvě color.

drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color)

Nakreslí rámeček ve tvaru trojúhelníku. Pozice jednotlivých rohů je x0y0, x1y1, x2y2, barvě color.

fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color)

Nakreslí trojúhelník. Pozice jednotlivých rohů je x0y0, x1y1, x2y2, barvě color.

setTextColor(uint16_t c)

Nastaví barvu textu c. Text je transparentní, ale pouze pokud je jednobarevný.

setTextColor(uint16_t c, uint16_t b)

Nastaví barvu textu c a pozadí b. Text není transparentní. Výhodně se dá použít pro aktualizaci textu, aniž by ho ylo potřeba předtím vymazat. Pouze je potřeba dát pozor na délku textu.

drawNumber(long long_num, int poX, int poY, int font)

Zobrazí číslo typu integrer. Osobně ji považuji za úplně zbytečnou, stejně kreslí za pomoci funkce drawString. Jenom má hezčí znak mínus.

drawFloat(float floatNumber, int decimal, int poX, int poY, int font)

To samé jako drawNumber, jenom pro desetinné číslo. Decimal určuje délku za desetinnou čárkou, výhodou této funkce je, že máte stále stejně dlouhé číslo za desetinnou čárkou. Jenom zarovnání je vlevo. Dá se to vyřešit jinak a elegantněji za pomoci drawString.

drawString(char *string, int poX, int poY, int font)

Zobrazí textový řetězec string, zarovnání vlevo na pozici xy, text o velikosti a tvaru font.

drawCentreString(char *string, int dX, int poY, int font)

Zobrazí textový řetězec string, zarovnání na střed na pozici xy, text o velikosti a tvaru font.

drawRightString(char *string, int dX, int poY, int font)

Zobrazí textový řetězec string, zarovnání vpravo na pozici xy, text o velikosti a tvaru font.

invertDisplay(boolean i)

Otočí barvy jako by, jste se dívali na negativ.

Ukázka používaných funkcí

Stáhněte si tento sketch a natáhněte do Arduina. Protože se mnoho tlačítek opakuje, dal by se program napsat mnohem kratší. Nechal jsem ho tak, aby bylo zřejmé co a kdy se děje.

Méně používané:

setTextSize(uint8_t s)

Nastaví velikost textu s. Dá se tak měnit velikost jakéhokoliv písma. Parametr 0 a 1 zobrazuje výchozí velikost. Dobře funguje i při drawString.

setTextFont(uint8_t f)

Nastaví typ fontu. Smysl má pouze při použití funkce drawChar. V jiných funkcích se musí font nastavit.

setTextWrap(boolean w)

TRUE = pokud text přesahuje zobrazitelnou šířku displeje, začne se část, která se nedá zobrazit znovu vypisovat na stejný řádek od pozice x = 0. FALSE = text zůstane skrytý. Tento příkaz nefunguje spolehlivě, nicméně pokud chcete běžící text, je nutné nastavit hodnotu na FALSE.

drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size)

Nakreslí jeden znak na pozici xy, o barvě color s pozadím bg o velikosti size.

drawChar(unsigned int uniCode, int x, int y, int font)

Nakreslí jeden znak na pozici xy, v barvě color, fontem font. Pozadí se dá nastavit příkazem setTextColor, viz dále.

drawCircleHelper( int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color)

Kreslí obrys kruhu na pozici xy o poloměru r a barvě color. Parametr cornermame se nastavuje v rozsahu 0-15 a určuje zda to bude čtvrtkruh, půlkruh, vlevo, vprovo, dole nahoře, brzdové obložení a celý kruh.

fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color)

Kreslí vyplněný ovál na pozici xy o poloměru r, zaoblení delta a barvy color. Parametr cornermame se nastavuje v rozsahu 0-3 a určuje zda to bude půlovál, nebo celý ovál. POZOR – uprostřed je pruh.

drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color)

Nakreslí transparentní jednobarevný .bmp obrázek uložený ve formátu PROGMEM, který se předtím zkonvertuje programem Image Converters. Program je uložený v adresáři s knihovnou pro displej. Obrázek se vykreslí na pozici x,y, obrázek bitmap, rozměry wh (nutno dodržet originální rozměr obrázku), color je barva pixelů pro vykreslení. Tomuto tématu se budeme věnovat v samostatném článku.

color565(uint8_t r, uint8_t g, uint8_t b)

Tato funkce vrací HEX data zadané 16 bit barvy RGB. Kdykoliv tak můžete zobrazit vlastní barvu, kreslit duhy a apod.

setAddrWindow(int16_t x0, int16_t y0, int16_t x1, int16_t y1)

Vytvoří oblast pro umístění textu, nebo kreslení. Tato funkce se dá využít pro zkrácení programu, když kreslíte tečky, gradient a další obrázky náročné na počet příkazů.

setCursor(int16_t x, int16_t y)

Postaví cursor na pozici xy. Můžete ale psát za pomoci vlastních příkazů. Dá se tak editovat rozepsaný text kdekoliv na jeho pozici.

setCursor(int16_t x, int16_t y, uint8_t font)

Postaví cursor na pozici xy a nastaví výchozí font. Můžete ale psát za pomoci vlastních příkazů. Dá se tak editovat rozepsaný text kdekoliv na jeho pozici.

writecommand

Odesílá příkazy nastavení displeje. Pozor, některé příkazy vrací data a je zapotřebí zapojit MISO. Tato knihovna však nic takového nepodporuje.

getRotation()

Vrátí nastavení otočení displeje. Data nečte z displeje, ale z proměnné knihovny. Data se tedy mohou lišit.

Vytváření vlastních barev:

  • v záhlaví sketche vytvoříte proměnnou, kdy za názvem barvy zadáte 16 bit RGB barvu ve formátu HEX. Např. #define TFT_BLACK 0x0000, kdy 0x0000 je rovno R = 0, G = 0, B = 0. Pak v příkazech voláte pouze název TFT_BLACK.
  • ve funkci setup, nebo kdykoliv při běhu programu využijte proměnnou o velikosti int a HEX nechte vypočítat. Např. int cerna = color565(0, 0, 0); Samozřejmě můžete barvu počítat přímo ve funkci zobrazení. Např. fillCircle(10, 10, 5, color565(0, 0, 0)).

Závěr

Na displeji můžeme opravdu zobrazit co chceme a kdy chceme. Zde jsou uvedeny veškeré smysluplné příkazy, které pro to můžete využít.

Příště se podíváme už na konkrétní příklady práce s displejem a začneme tlačítky rozsvěcet diody, zobrazovat hodnoty a zobrazit naplnění nádrže. Také se podíváme jak pracovat s přerušením IRQ a na ně navazujícími příkazy.

JB

jaroslav.bohac@arduinotech.cz

Přidat komentář

Zvýrazněné položky jsou povinné.

Přehled komentářů

  1. bohat duchem (Cigler, 16.6.2016 13:35:41) Odpovědět

    Sic to vypadá nadějně, při bližším ohledání ne zas tak zajímavě. Zkus nakreslit kruhovou výseč, přesný kus pizzy, elipsu, vybrat čárkovanou tužku. Hle, s uzamčenou knihovnou je najednou konec cesty. To je přesně cesta mnoha populistů, než narazí na zásadní problém s nepřístupnými napůl hotovými knihovnami. Odpověďí jest, co bys chtěl? Arduino je dělané pro děti a študáky, než to zjistí sami. Velmi povrchový přístup.

    Dobrý den,
    Děkujeme za objevení Ameriky, patrně jste přehlédl jméno tohoto webu a jeho zaměření. Pro napravení jakékoliv újmy Vám doporučuji zakoupit si jakákoliv skripta z některé VŠ, tam je vše rozebráno do hloubky no a pak si dokonalé knihovny můžete napsat sám, hezky si je uložit na svém PC a mít radost, že jste pro sebe něco dobrého udělal. Povrchně nás pak prosím informujte, jakého levelu dokonalosti jste dosáhl, případně, zda Vám Váš počin vynesl nějaký akademický titul. Jo a doporučuji vše programovat v assembleru, to je krystalická čistota z pohledu kódu a rozhodně to není nic pro študáky, ale čistě pro Vás, profesionála nebo docenta bohatého duchem.

    Hezký den,
    PF

  2. Ad Cigler (Bob, 25.6.2016 18:31:52) Odpovědět | Zobrazit odpovědi

    Jaroslave, nic si z toho nedělej. Lidé, kteří plivají na vše jedovatou slinu, nikdy nic sami, zdůrazňuji sami, nevytvořili a vždy přišli k hotovému. Proto mají dost síly na to, aby mohli očerňovat, hanit, atd. Za celý svůj život jsem jich potkal spoustu a za nimi nic nezůstalo, jsou to pouze papouškové v předávání modrostí jiných a mnohdy to i vydávají za své dílo.
    Jaroslave chci Ti poděkovat za všechny Tvé příspěvky. Troubů a hlupáků (viz výše) si nevšímej.
    Moc zdraví Bohouš Kovářík

    1. Re: Ad Cigler (JB, 24.10.2016 22:57:11) Odpovědět

      Díky za podporu. Občas mě to zamrzí, ale že bych kvůli tomu nespal. To už mě přešlo.


TOP produkty

Arduinotech GSM shield

Arduinotech GSM shield
877 Kč s DPH

Arduino MEGA2560

Arduino MEGA2560
424 Kč s DPH

Kontakt

Ing. Petr Foltýn
Kunčice pod Ondřejníkem 814, 73913
TOPlist