KURZ: Práce s displejem
- Podrobnosti
- Mgr. Jan Baťko
- Aktualizováno: 15.03.2021
- Zobrazení: 13334
KAPITOLY
Řídící jednotka NXT je opatřena černobílým displejem, který slouží jako výstupní zařízení a také jako ovládací prvek. Jako výstupní zařízení slouží v případě, že jej využíváme pro výpis různých hlášení během chodu programu nebo zobrazení obrázků. Výpis hlášení nebo údajů na displeji využijeme například při průběžném zobrazení snímaných hodnot některého ze senzorů. Typickým příkladem může být zobrazení vzdálenosti od překážky, kterou snímá ultrazvukový senzor.
Použití v programovacích prostředích
NXT-G
Blok pro práci s displejem
Rozcestník
Umístění bloku
Výstup na displej řídící jednotky můžeme ovládat díky bloku Display umístěného v paletě Complete > Common.
Popis bloku
Blok Display obsahuje celkem devět možných konektorů, které mohou být využity.
Action - nastavením udávámáme druh výstupu > Obrázek (Image), Text(Text), Bod (Point), Křivka (Line), Kruh (Circle), Obnovení displeje (Restore System Screen). Volbu provedeme zadáním hodnoty v rozmezí 0 až 5.
Clear - pomocí této volby je možné kompletně vymazat displej.
Filename - slouží ke zvolení souboru či obrázku, který se má zobrazit během chodu programu na displeji.
Text - připojení značící textový vstup nebo výstup.
X - značí hodnotu souřadnice X, která vyjadřuje umístění výstupu na displeji v horizontálním směru a její hodnota se zadává v rozmezí od 0 do 99.
Y - značí hodnotu souřadnice Y, která vyjadřuje umístění výstupu na displeji ve vertikálním směru a její hodnota se zadává v rozmezí od 0 do 63.
End point X - možnost slouží ke zvolení koncového bodu X v horizontálním směru v případě, že výstupem na displej je křivka.
End point Y - možnost slouží ke zvolení koncového bodu Y ve vertikálním směru v případě, že výstupem na displej je křivka.
Radius - značí průměr vykreslovaného kruhu v rozmezí od 0 do 120.
Parametry bloku
Práce s parametry programového bloku Display umožňuje zobrazovat na displej tři základní druhy výstupů. Jsou to obrázek (Image), text (Text) a kresbu (Drawing), která se ještě dělí na vykreslení jednotlivých bodů, přímek nebo kruhů. Tuto volbu provedeme v sekci Action. Pokud chceme, aby byl displej před každým dalším zobrazením vymazán, vybereme v sekci Display volbu Clear.
Zobrazení obrázku
Na prvním obrázku můžeme vidět, že je zvolena možnost zobrazení obrázku (Image) a v sekci File poté volíme obrázek ze souboru, který je uložený v paměti řídící jednotky. Na pravé straně je obrázek zobrazen v sekci Position, kde můžeme také nastavit jeho umístění na displeji pomocí zadání X a Y souřadnice.
Vypsání textu na displej
Druhý obrázek demostruje vypsání textu. Tato volba nabízí obdobné možnosti, ovšem místo sekce File se zde objevuje sekce Text, kde uživatel zadává text, který se má zobrazit na displeji. Jeho umístění můžeme ovlivnit stejně jako u obrázku zadáním souřadnic X a Y nebo číslem řádku displeje od 1 do 8.
Vykreslení bodů, křivek a kruhů
Třetí obrázek demonstruje kresbu na displej. V sekci Type je zvolena možnost Point (bod), pro jehož vykreslení stačí zadat souřadnice X a Y. Při zvolení možnosti Line (křivka) je nutné zadat její počáteční a koncové souřadnice. Posledním typem vykreslení na displej je kruh. Pro jeho využití je nutné zadat souřadnice X a Y pro jeho umístění a Radius, což je číslo udávající jeho průměr.
RobotC
Možnosti výstupu na displej
V programovacím prostředí RobotC je možné na displeji zobrazovat obrázky z řídící jednotky, text, nebo vykreslovat jednotlivé body, linie a kruhy. Oproti programovacímu prostředí NXT-G je možné vykreslit také čtverec, obdélník nebo elipsu.
Rozcestník
- Zobrazení obrázků
- Zobrazení textu
- Vykreslování na displej
- Mazání z displeje
- Vykreslení spojnice dvou bodů
Zobrazení obrázků
Pro výstup obrázků na displej řídící jednotky se využívá příkaz nxtDisplayRICFile(nleft, nBottom, sFileName). Příkaz obsahuje tři parametry, z nichž první dva jsou souřadnice (X a Y), které značí umístění levého dolního rohu obrázku. Levý dolní roh displeje má souřadnice (0, 0) a pravý horní roh (99, 63). Posledním parametrem je název souboru. V našem příkladě se jedná o soubor s koncovkou .ric, což je soubor charakteristický pro robotickou stavebnici NXT.
nxtDisplayRICFile (0, 0, "obrazek.ric"); // Zobrazi .ric soubor s nazvem "obrazek.ric" na pozici (x, y).
Zobrazení textu
Pro vypsání řetězce textu na displej můžeme využít nadeklarovanou proměnnou datového typu String nebo řetězec použít jako parametr daného příkazu. Vypsání textového řetězce je poté možné pomocí dvou příkazů.
Prvním je nxtDisplayString(nLineNumber, sFormatString, parm1, parm2, parm3) u nějž první parametr udává číslo řádku displeje, druhý definuje o jaký typ proměnné se jedná (v příkladu na obrázku můžete vidět deklaraci řetězce znaků) a poslední parametr je název proměnné datového typu String (proměnné mohou být až 3).
Obdobného výsledku dosáhneme i při použití příkazu nxtDisplayStringAt(xPos, yPos, sFormatString, parm1, parm2, parm3) s tím rozdílem, že parametr udávající číslo řádku je nahrazen dvěma parametry definujícími souřadnice (x, y). Tento příkaz lze použít i pro vypsání řetězce bez deklarace proměnné (viz. třetí příklad na obrázku).
nxtDisplayString(3, "%s", s1); // Zobrazi retezec znaku "s1" na tretim radku displeje. nxtDisplayStringAt(0, 0, "%s", s1); // Zobrazi retezec znaku "s1" na pozici (x, y). nxtDisplayStringAt(0, 0, "text"); // Zobrazi retezec znaku nazvany "text" na pozici(x, y). nxtDisplayBigStringAt(0, 0, "text") // Zobrazi retezec znaků nazvany "text" na pozici(x, y) velkym pismem.
Další možností pro vypsání textu nebo údajů na displej jsou příkazy:
- nxtDisplayTextLine(nLineNumber, sFormatString, parm1, parm2, parm3) - pro vypsání řetězce znaků na zvolený řádek displeje (obsahuje 3 volitelné parametry určené pro vypsání řetězců na displej),
- nxtDisplayCenteredTextLine(nLineNumber, sFormatString, parm1, parm2) - pro vypsání řetězce znaků na zvolený řádek displeje zarovnaného na střed (obsahuje 2 volitelné parametry určené pro vypsání řetězců na displej),
- nxtDisplayCenteredTextLine(nLineNumber, sString) - pro vypsání řetězce znaků na zvolený řádek displeje zarovnaného na střed.
- nxtDisplayBigTextLine(nLineNumber, sFormatString) - pro vypsání řetězce znaků na zvolený řádek displeje velkým písmem.
- nxtDisplayCenteredBigTextLine(nLineNumber, sFormatString) - pro vypsání řetězce znaků na zvolený řádek displeje velkým písmem na střed řádku.
Jejich využití je podobné jako u předchozích příkazů. Pracují ovšem pouze s parametrem umístění textu na příslušný řádek. Příklady využití můžete vidět na následujícím obrázku.
nxtDisplayTextLine(3, "%s", s1); // Zobrazi retezec znaku "s1"na tretim radku displeje. nxtDisplayCenteredTextLine(3, "%d, %d", a, b); // Zobrazi na stredu tretiho radku hodnoty promennych a, b. nxtDisplayCenteredTextLine(3, "1, 2"); // Zobrazi na stredu tretiho radku cisla 1, 2.
Vykreslování na displej
Programovací jazyk RobotC neumožňuje vykreslovat na displej pouze ucelené prvky, ale je možné vykreslit pouze jeho jediný pixel. Tuto možnost bychom ocenili v případě, že bychom pomocí senzorů snímali polohu určitého předmětu a displej využili jako radar. Zobrazení jediného pixelu docílíme příkazem nxtSetPixel(xPos, yPos), jehož jediné dva parametry jsou souřadnice (x, y).
nxtSetPixel(42, 46); // Zobrazi jeden cerny pixel na souradnicich (42, 46).
Oproti programovacímu prostředí NXT-G nabízí RobotC o něco širší možnosti zobrazení geometrických obrazců. Zatímco v NXT-G je možné zobrazit pouze kruh, v RobotC je možné navíc zobrazení elipsy a čtverce. Pro vykreslování čar a geometrických obrazců slouží tyto příkazy:
- nxtDrawLine(xPos, yPos, xPosTo, yPosTo) - slouží k vykreslení čar,
- nxtDrawCircle(Left, Top, Diameter) - slouží k vykreslení kruhů,
- nxtDrawEllipse(Left, Top, Right, Bottom) - slouží k vykreslení elips,
- nxtDrawRect(Left, Top, Right, Bottom) - slouží k vykreslení obdélníků.
Práce s nimi je obdobná jako u předchozích příkazů.
nxtDrawLine(20, 50, 60, 25); // Zobrazi caru spojujici body na souradnicich (20,50) a (60,25). nxtDrawCircle(20, 50, 25); // Zobrazi kruh; levy okraj na 20, horni okraj na 50, prumer 25. nxtDrawEllipse(20, 50, 60, 25); // Zobrazi elipsu; levy okraj na 20, horni okraj na 50, pravy okraj na 60, dolni okraj na 25. nxtDrawRect(20, 50, 60, 25); // Zobrazi obdelnik; levy okraj na 20, horni okraj na 50, pravy okraj na 60, dolni okraj na 25.
Odlišností je také možnost vykreslení obrazců s výplní. Možné je to ale pouze u elipsy a čtverce, využitím těchto dvou příkazů:
- nxtFillEllipse(Left, Top, Right, Bottom) - slouží k vykreslení elipsy s výplní,
- nxtFillRect(Left, Top, Right, Bottom) - slouží k vykreslení čtverce s výplní.
nxtFillEllipse(20, 50, 60, 25); // Zobrazi elipsu s vyplni; levy okraj na 20, horni okraj na 50, pravy okraj na 60, dolni okraj na 25. nxtFillRect(20, 50, 60, 25); // Zobrazi cteverec s vyplni; levy okraj na 20, horni okraj na 50, pravy okraj na 60, dolni okraj na 25.
Mazání z displeje
Doposud jsme se zabývali pouze výstupem na displej. Plochu displeje je, ale také nutné mazat a obnovovat. Prvním příkazem, kterým tohoto docílíme, je eraseDisplay(), který maže celou plochu displeje. Využijeme ho například na začátku programu, kdy předpokládáme výstup na displej nebo v programu kde se v krátkých časových úsecích bude měnit zobrazení na displeji. Tento příkaz tak bude fungovat jako obnovovací sekvence.
Existují ovšem ještě další dva příkazy, které mažou pouze část displeje. Prvním je nxtClearPixel(xPos, yPos), jehož pomocí smažeme pouze určitý pixel na zadaných souřadnicích a druhým je nxtDisplayClearTextLine(nLineNumber), který je určený pro mazání učitého řádku displeje.
eraseDisplay(); // Vymaze cely displej ridici jednotky NXT. nxtClearPixel(50, 32); // Vymaze pixel na souradnicich (50, 32). nxtDisplayClearTextLine(3); // Vymaze treti radek displeje.
Vykreslení spojnice dvou bodů
Výstup na displej umožňuje také vykreslovat spojnici dvou bodů určených souřadnicemi v Kartézské soustavě souřadnic. Můžeme tak vykreslovat například křivky grafu. K vykreslení se používá příkaz nxtInvertLine(). První dvě čísla vyjadřují souřadnice prvního bodu (první číslo hodnota X a druhé hodnota Y). Druhá dvě čísla určují souřadnice druhého bodu (první číslo hodnota X a druhé hodnota Y).
nxtInvertLine(20, 50, 60, 25); // Propoji body na souradnicich (20, 50) a (60, 25).
EV3
blok pro práci s displejem
Rozcestník
Umístění bloku pro práci s displejem
Programový blok Display je umístěn v paletě Action.
Změna režimu
Programový blok Display můžeme využívat ve čtyřech základních režimech. Přepínání mezi nimi se provádí pomocí tlačítka v levé spodní části bloku (červeně zvýrazněno).
Přidání vstupního portu
Kliknutím do bílého pole v pravém horním rohu programového bloku Display a vybráním možnosti Wired (červeně zvýrazněno) přidáme do programového bloku nový vstupní port File Name, který slouží k odeslání zvoleného souboru k vykreslení na displeji.
Přidání vstupního portu je možné také v režimech pro výpis textu. Jediný rozdíl je ten, že se nám pro příslušný účel zobrazí vstupní port s názvem Text.
Režimy programového bloku
Text - Pixels (vypsání textu na pozici konkrétního pixelu displeje)
Umožňuje vypsat libovolný text na pozici konkrétního pixelu displeje řídící jednotky v rovinné kartézské soustavě souřadnic. Rozměr displeje je u robotické stavebnice EV3 rozdělen na 178x128 pixelů. V tomto řežimu máme k dispozici pět vstupních portů.
Clear Screen - mazání displeje. Pokud je logická hodnota nastavena na True (pravda), dojde ke smazání displeje. V případě, že je nastavena na hodnotu False (nepravda), ke smazání nedojde.
a - souřadnice displeje určující počáteční bod výpisu zvoleného textu. Souřadnice určují levý horní roh zobrazovaného textu. Hodnota se pohybuje v rozmezí od - 177 do 177 a hodnota v rozmezí od -127 do 127.
Color - volba způsobu výpisu na displej. Zvolíme-li možnost True (pravda), bude se text vypisovat bílou barvou na černé pozadí, pokud zvolíme False (nepravda), bude se vypisovat černou barvou na bílém pozadí.
Font - volba fontu vypisovaného textu. Na výběr máme ze tří možností (Normal, Bold, Large).
Text - Grid (vypsání textu na konkrétní pozici v mřížce)
Režim umožňující výpis textu na konkrétní pozici displeje určenou pozicí v mřížce. Displej je rozdělený na 22 sloupců (číslovány 0 - 21 zleva doprava) a 12 řádků (číslovány 0 - 11 zhora dolů). Každý sloupec je široký 8px a každý řádek 10 px.
Výška řádku je uzpůsobena řádce textu psané fontem Normal nebo Bold. Každý znak je vypisován na jednu buňku mřížky.
Clear Screen - mazání displeje. Pokud je logická hodnota nastavena na True (pravda), dojde ke smazání displeje. V případě, že je nastavena na hodnotu False (nepravda), ke smazání nedojde.
Column - označuje počáteční sloupec pro výpis textu do mřížky. Sloupce jsou očíslovány 0 - 21 zleva doprava.
Row - označuje počáteční řádek pro výpis textu do mřížky. Řádky jsou číslovány 0 - 11 zhora dolů.
Color - volba způsobu výpisu na displej. Zvolíme-li možnost True (pravda), bude se text vypisovat bílou barvou na černé pozadí, pokud zvolíme False (nepravda), bude se vypisovat černou barvou na bílém pozadí.
Font - volba fontu vypisovaného textu. Na výběr máme ze tří možností (Normal, Bold, Large).
Shapes - Line (vykreslení čáry na displej)
Režim umožňující vykreslení čáry definované počátečním a koncovým bodem na displej.
Clear Screen - mazání displeje. Pokud je logická hodnota nastavena na True (pravda), dojde ke smazání displeje. V případě, že je nastavena na hodnotu False (nepravda), ke smazání nedojde.
a - souřadnice počátečního bodu vykreslované čáry v rovinné kartézské soustavě souřadnic.
a - souřadnice koncového bodu vykreslované čáry v rovinné kartézské soustavě souřadnic.
Color - volba způsobu výpisu na displej. Zvolíme-li možnost True (pravda), bude se text vypisovat bílou barvou na černé pozadí, pokud zvolíme False (nepravda), bude se vypisovat černou barvou na bílém pozadí.
Shapes - circle (vykreslení kružnice na displej)
Režim umožňující vykreslení kružnice definované poloměrem a pozicí středu na displej.
Clear Screen - mazání displeje. Pokud je logická hodnota nastavena na True (pravda), dojde ke smazání displeje. V případě, že je nastavena na hodnotu False (nepravda), ke smazání nedojde.
a - souřadnice středu kružnice v rovinné kartézské soustavě souřadnic zadávané v pixelech.
Radius - poloměr kružnice udávaný v pixelech.
Fill - výplň vykreslované kružnice. Pokud je hodnota nastavena na True (Pravda), vykresluje se kružnice s výplní, v opačném případě bez výplně.
Color - volba způsobu výpisu na displej. Zvolíme-li možnost True (pravda), bude se text vypisovat bílou barvou na černé pozadí, pokud zvolíme False (nepravda), bude se vypisovat černou barvou na bílém pozadí.
Shapes - Rectangle (vykreslení obdélníku nebo čtverce na displej)
Režim umožňující vykreslení čtverce nebo obdélníku definovaného pozicí a rozměry na displej.
Clear Screen - mazání displeje. Pokud je logická hodnota nastavena na True (pravda), dojde ke smazání displeje. V případě, že je nastavena na hodnotu False (nepravda), ke smazání nedojde.
a - souřadnice levého horního rohu vykreslovaného obdélníku nebo čtverce v pixelech.
Width - šířka obdélníku nebo čtverce v pixelech.
Height - výška obdélníku nebo čtverce v pixelech.
Fill - výplň vykreslované kružnice. Pokud je hodnota nastavena na True (Pravda), vykresluje se kružnice s výplní, v opačném případě bez výplně.
Color - volba způsobu výpisu na displej. Zvolíme-li možnost True (pravda), bude se text vypisovat bílou barvou na černé pozadí, pokud zvolíme False (nepravda), bude se vypisovat černou barvou na bílém pozadí.
Shapes - Point (vykreslení konrétního bodu (pixelu) na displeji)
Režim umožňující vykreslení (vybarvení) konrétního bodu (pixelu) na displeji.
Clear Screen - mazání displeje. Pokud je logická hodnota nastavena na True (pravda), dojde ke smazání displeje. V případě, že je nastavena na hodnotu False (nepravda), ke smazání nedojde.
a - souřadnice konkrétního bodu (pixelu) na displeji.
Color - volba způsobu výpisu na displej. Zvolíme-li možnost True (pravda), bude se text vypisovat bílou barvou na černé pozadí, pokud zvolíme False (nepravda), bude se vypisovat černou barvou na bílém pozadí.
Image (vykreslení obrázku na displej)
Režim umožňující vykreslení obrázku z paměti řídící jednotky na displej.
Clear Screen - mazání displeje. Pokud je logická hodnota nastavena na True (pravda), dojde ke smazání displeje. V případě, že je nastavena na hodnotu False (nepravda), ke smazání nedojde.
a - souřadnice levého horního rohu vykreslovaného obrázku.
Výběr obrázku z paměti řídící jednotky
Výběr obrázku z galerie umístěné v paměti řídící jednotky se provádí pomocí bílého pole v pravém horním rohu programovacího bloku (červeně zvýrazněno).
Po kliknutí na bílé pole se zobrazí nové okno, ve kterém buďto provedeme výběr obrázku z galerie umístěné v paměti řídící jednotky (složka LEGO Image Files) nebo zvolíme vlastní připravené obrázek ze složky Project Image.
Reset Screen (smazání plochy displeje)
Režim umožňující kompletní smazání plochy displeje.