Arduino a 2.4" LCD TFT Shield (aitendo UL024TF) II. díl

Dneska se podíváme jak zprovoznit dotykový panel na 2.4″ LCD TFT Shield (aitendo UL024TF). Budeme potřebovat knihovnu Touch Screen Library Master. Po stažení a nakopírování do složky libaries, můžeme zkusit testovat (pozn. pokud název adresáře obsahuje znaky “-” zamněte je za “_” nebo adresář pojmenujte jinak).

     Vybereme “soubor”–>”příklady”–>”Touch_Screen_Library_Master!”–>”touchscreendemoshield” a nahrajeme do našeho Arduina UNO. Na obrazovce se nám nic neobjeví, protože jsem ji neinicializovali, ale zapneme si SerialMonitor a při doteku na displej se nám začnou ukazovat nějaké hodnoty jako na obrázku níže:

      K vysvětlení k těmto hodnotám. Všechny hodnoty jsou analogové a neukazují zrovna na pozici v pixelech na displeji. Jedná se o hodnotu X a Y. Poslední hodnota je síla tlaku na displej, avšak jak koukám tak čím vetší tlak tím menší hodnota. Aby jsme tyto hodnoty, nějak využili a převedli do pro nás užitečné hodnoty, která bude korespondovat s pozicí pixelů, musíme tyto hodnoty převést. Abych Vám práci ulehčil, napsal jsem program pro kalibraci displeje, kdy na konci programu zjistíme analogové hodnoty pro minimální a maximální pozici X a Y, ze které se poté bude počítat pozice na displeji. Program je zde a počítá s tím, že již máte nahrané knihovny z předchozího dílu o tomto LCD shieldu. Takže, nahrajte tento program do Arduina:

 

Po spuštění programu si pusťte SerialMonitor. Na obrazovce TFT displeje uvidíte černou obrazovku a malý bíly čtvereček v levém horním rohu. Aby byla kalibrace co nejpřesnější, vezmete si nějaký špičatý (ne ostrý! – v mém případě jsem použil vypnutou propisovací tužku) a dotkněte se čtverečku. Ten zmizí a objeví se v dalším rohu. To proveďte se všemi rohy kde se objeví bílý čtvereček. Nakonec se na displeji objeví 4 hodnoty, které budeme používat pro další práci s displejem. Hodnoty máte i v SerialMonitor, kde půjdou snadněji zkopírovat do dalšího kódu.

     Tak to by jsme měli a nyní si napíšeme program třeba pro kreslení na displej. Využijeme hodnoty, které jsme kalibrací dostali a které budou součástí programu. Nejdříve si ale trošku vysvětlíme jak dostaneme hodnoty v pixelech a jak nám k tomu pomůžou právě data, které jsme kalibrací získali.

  • hodnota TS_MINX – nejmenší analogová hodnota souřadnice X na displeji = osa X = pixel 0
  • hodnota TS_MINY – nejmenší analogová hodnota souřadnice Y na displeji = osa Y = pixel 0
  • hodnota TS_MAXX – největší analogová hodnota souřadnice X na displeji = osa X = pixel 240 (v případě TFT 240×320)
  • hodnota TS_MAXY – největší analogová hodnota souřadnice Y na displeji = osa Y = pixel 320 (v případě TFT 240×320)
    Aby jsme nemuseli, nějak složitě počítat využijeme v programu funkci map().   – viz. reference arduino.cc 

Tato funkce se nám při programování bude hodit ještě mnohokrát.

výsledná hodnota = map(

vstupní hodnota,

minimální hodnota vstupní hodnoty,

maximální hodnota vstupní hodnoty,

minimální hodnota výsledné hodnoty,

maximální hodnota výsledné hodnoty);

Takže vysvětlíme si to na příkladu. Máme nějakou hodnou, kterou nám dává analogový senzor jak víme v rozsahu 0 – 1023, ale výsledek potrebujeme např. jako procenta od 0 do 100. Řešení:

hodnota_v_procentech = map(hodnotaZanalogovehoCidla, 0, 1023, 0, 100);

nebo víme-li, že analogové čidlo dává pro naše potřeby pouze hodnoty od 478 do 798 tak i tyto změny mužeme přemapovat do rozsahu 0 až 100:

hodnota_v_procentech = map(hodnotaZanalogovehoCidla, 478, 798, 0, 100);

Teď ale koukám, že jsem hodně odbočil tak zpět k našemu problému. Jak jsem již zmínil, my máme již zjištěné hodnoty pro X i Y jak v minimu tak v maximu. Výpočet tedy proběhne následovně je to v programu na řádkách 57 a 58.

A teď už si můžeme jen hrát a já na závěr připojuji lehce změněný program pro kreslení, kde jsem využil, že Touch Panel je vetší než samotná plocha pro kreslení a má vyobrazené ikonky různých významů, tak jsem uvedl podmínku, že pokud se někdo dotkne ikony domečku “Home”, tak se obrazovka smaže.

Prioritně nebudeme používat displej pro kreslení, ale k zobrazování a nastavování hodnot. Sami si již vyzkoušejte a napište do diskuze jak Vám to šlo, jinak tyto programy slouží především pro tento typ displeje s označením UL024TF a na ostatních fungovat nebudou. U ostatních displejů fungují již připojené příklady bez dalšího nastavování a tento návod jsem zde umístil proto, že spousta lidí s tímto typem displeje má problém.

 

3 Komentářů

  1. Lukáš

    Dobrý den v předchozím díle tft displaye mi vše fungovaloale ted po nahrani prvniho programu ze stranky tft display touch screen mi nic neukaže display ale když dám seriovy monitor tak funguje prosím co by se dalo udělat ? Děkuji za odpověd

  2. detik

    Zdravím, je možné nějak jinak překreslovat text příklad…
    tft.fillRect(0,300,150,15, BLACK);
    tft.setTextColor(WHITE);
    tft.setCursor(30,300);i
    tft.setTextSize(2);
    tft.print(x);tft.print(“x”);tft.print(y);
    Z důvodu toho, že mi vždy proměnná “x” “problikne” když se refreshuje, ne že by to tady vadilo, ale když bych takto použil například hodiny, tak mi to co vteřinu přepíše celý čas a to už by bylo nepříjemný pro oko.

  3. bubak27

    Dobrý den,
    potřeboval bych pomoci tímto problémem https://www.youtube.com/watch?v=iGC41Yh6NDo
    po kalibraci a následné úpravě programu(přidání čtyř linek a zobrazení dotyku)
    jsem zjistil že vykreslované dráhy se rozcházejí.To mi komplikuje další programování.
    Jak vyřesit tento problém? Má angličtina je velice slabá proto je pro mne zisk informaci
    obtížný.Byl bych vděčný za každou pomoc.

Napsat komentář

Translate »