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.

  3. Test, just a test (Rodrigoliato, 13.10.2018 19:32:54) Odpovědět

    Hello. And Bye.

  4. essay writing for mba (Davidfounc, 15.10.2018 14:59:17) Odpovědět

    competition essay writing <a href=http://s.workflowfaq.com/Buyessayonline34878>help writing a essay</a>
    show me how to write an essay <a href=http://s.workflowfaq.com/Buyessayonline48137>how to write a good essay in english</a>
    useful vocabulary for essay writing <a href=http://84036.ml/uyessayonline76221>writing a law essay</a>
    how to write an introductory paragraph for an essay <a href=https://aaa.moda/howtowriteanalyticalessay98163>write essays for me</a>
    how to improve english essay writing <a href=http://rih.co/howtowriteaninformativeessay35780>essay writing on football</a>
    writing a conclusion to an essay <a href=https://dziku.ovh/writingscholarshipessays54458>expository writing essay topics</a>
    urgent essay writing service <a href=http://projectultimatum.altervista.org/Buyessayonline78088>how to write a concluding paragraph for an essay</a>
    buy essay australia <a href=https://arill.us/writingapersonalessay12239>essay writing technique</a>
    writing college admission essays <a href=http://webhop.se/uyessayonline92933>descriptive essay writing examples</a>

  5. writing persuasive essay (PatrickNug, 15.10.2018 14:59:18) Odpovědět

    how to write a humorous essay <a href=http://corta.co/writeessay58908>guide to write an essay</a>
    easy steps to write an essay <a href=http://goto.iamaws.com/uyessayonline96469>how to write a humorous essay</a>
    writing a biographical essay <a href=https://dziku.ovh/Buyessayonline71513>cheap custom essay writing service</a>
    how write a persuasive essay <a href=http://to.ht/howtowriteanessayaboutyourself98035>type of essay writing</a>
    why do people write essays <a href=https://arill.us/stepstowritinganessay43060>writing a rhetorical analysis essay</a>
    write narrative essay <a href=https://arill.us/uyessayonline62349>samples of essay writing in english</a>
    how to write a visual analysis essay <a href=https://aaa.moda/uyessayonline95911>how to write a reflective essay</a>
    writing essay introductions and conclusions <a href=https://ameo.link/thesite>writing academic essays</a>
    essay writing graphic organizers <a href=https://atho.me/3AhY>ideas to write an essay</a>

  6. custom essay writing australia (AlbertArelm, 15.10.2018 14:59:18) Odpovědět

    write a good thesis statement for an essay [url=http://999.sh/uyessayonline16817]how to write an admissions essay for graduate school[/url]
    cheap essay writing service [url=http://motz.tk/essayswriter94721]how to write a written essay[/url]
    writing the college application essay [url=http://jnl.io/writingessay65659]how to write a play name in an essay[/url]
    how to write a persuasive essay [url=https://arill.us/uyessayonline26835]australia essay writing[/url]
    how to write a compare and contrast essay for kids [url=http://yourls.site/uyessayonline52952]american essay writing service[/url]
    academic essay writing tips [url=http://utiny.ml/Buyessayonline47079]how to write a text analysis essay[/url]
    how to write an application essay for high school [url=http://xn--n1af6d.net/Buyessayonline65419]how to write an narrative essay[/url]
    writing good essays [url=https://atho.me/3Aau]how 2 write an essay[/url]
    how to write a proposal for an essay [url=http://fapme.pw/Buyessayonline57307]write essay on my family[/url]

  7. template for essay writing (JamesPes, 15.10.2018 14:59:18) Odpovědět

    australia essay writing service <a href=http://999.sh/essaywritings38455>writing a conclusion in an essay</a>
    how to write mba essays <a href=http://www.vkvi.net/uyessayonline33861>argument essay writing</a>
    write a personal essay <a href=http://84028.ml/howtowriteathesisstatementforanessay17037>writing a discussion essay</a>
    how to write a good college essay <a href=http://webhop.se/howtowriteapersonalnarrativeessay17795>guidelines for essay writing</a>
    how to write conclusion in essay <a href=http://to.ht/uyessayonline38070>how to make essay writing easy</a>
    essay writing about my school <a href=https://is.gd/helpwritinganessay53403>how to write academic essays</a>
    how to write a perfect persuasive essay <a href=https://atho.me/3Ahq>steps in writing a good essay</a>
    essay writing help <a href=https://tinyurl.com/howtowriteagoodargumentessay12916>how to write a debate essay</a>
    process of writing essay <a href=http://bulangiul.net/howtowriteapersuasiveessay46114>essay writing on my mother</a>

  8. open university essay writing (RaymondPat, 15.10.2018 14:59:19) Odpovědět

    how to write college essays <a href=https://atho.me/3Aao>how to write speech essay</a>
    how to write a proposal for an essay <a href=http://utiny.ml/essayswriters22696>example of outline essay writing</a>
    how to write law essays and exams <a href=http://awalsh.com/writeapersuasiveessay47965>writing the persuasive essay</a>
    how to write essay introduction <a href=http://tans.me/uyessayonline38214>how to write an essay without plagiarizing</a>
    writing evaluation essay <a href=http://gaei.tk/collegeessaywriter65306>family essay writing</a>
    a method for writing essays about literature <a href=http://utiny.ml/Buyessayonline46925>writing a compare contrast essay</a>
    how to write a brilliant essay <a href=http://www.short4free.us/Buyessayonline40945>kind of essay writing</a>
    school essay writing <a href=http://bulangiul.net/uyessayonline33867>steps to writing a good essay</a>
    essay writing my family <a href=http://motz.tk/uyessayonline24403>how to write a 2 paragraph essay</a>


TOP produkty

Arduino DUE

Arduino DUE
696 Kč s DPH

Arduinotech GSM shield

Arduinotech GSM shield
877 Kč s DPH

Kontakt

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