Fórum ElektroLab.eu

Arduino v praxi - Olimex SHIELDLCD16x2

Arduino v praxi - Olimex SHIELDLCD16x2
TME S.r.o. Pridal  TME S.r.o.
  66 zobrazení
2
 0
Arduino a príbuzné platformy

Predchádzajúci článok, ktorý nájdete tu, zahŕňal opis modulu LCD displeja. Ukázali sme si, ako pripojiť displej k doske Arduino UNO a ako ho používať so softvérom. Priznajme si však, že samotný displej nenájde v mnohých zariadeniach veľa uplatnenia, pretože takýto jednoduchý modul LCD neposkytuje možnosť zadávania nastavení. Na tento účel potrebujeme klávesnicu, a hoci sa jej budeme podrobnejšie venovať v niektorom z ďalších článkov, teraz použijeme hotové riešenie z ekosystému Arduino – dosku spoločnosti Olimex s názvom SHIELDLCD16x2.

Doska je druh rozšírenia zväčšujúceho možnosti Arduina, je vybavená modulom LCD displeja (2 riadky po 16 znakov), 4 tlačidlami a 8 ďalšími pinmi GPIO. Na doske sa nachádza procesor PIC, ktorý komunikuje s Arduinom UNO prostredníctvom rozhrania TWI. Vďaka prístupu ku knižnici funkcií by prevádzka tohto modulu so zabudovaným mikrokontrolérom nemala spôsobovať žiadne väčšie problémy. Začnime s prípravou modulu na prevádzku.

Príprava na prevádzku s doskou Olimex

Príprava modulu na prácu pozostáva z dvoch krokov: hardvérového a softvérového. Prvý z nich je triviálny – stačí zapojiť rozšírenie k doske Arduino UNO a je to. Druhá možnosť však vyžaduje inštaláciu knižnice obsahujúcej funkcie pre obsluhu modulu.

Ak chcete nainštalovať knižnicu, prejdite na webovú stránku výrobcu modulu, t. j. spoločnosti Olimex. Potom do vyhľadávacieho poľa (vedľa tlačidla Search) zadajte časť názvu modulu "LCD16x2" (obrázok 1). Kliknite na tlačidlo Search. V čase písania tohto článku vyhľadávač zobrazoval dva výsledky – vyberáme "SHIELD-LCD16x2".

Obrázok 1. Fragment webovej stránky spoločnosti Olimex s vyhľadávacím poľom

Pod popisom modulu sa nachádza blok "SOFTWARE" (obrázok 2). Každý riadok textu v tomto bloku je zároveň odkazom na súbor, ktorý si môžeme stiahnuť z webovej stránky Olimex. V tejto chvíli nás zaujíma odkaz s názvom "OLIMEXINO-328 + SHIELD-LCD16x2 – a library and set of demo examples".

Súbor ZIP dostupný na tomto odkaze by sa mal stiahnuť na disk nášho počítača. Samozrejme, že sa oplatí pozrieť si aj dostupné príklady, ale pre naše potreby stačí nainštalovať knižnicu uloženú v adresári LCD16x2.

Arduino IDE umožňuje rôzne spôsoby inštalácie knižníc. V tomto prípade je najjednoduchšie nahrať zdrojové kódy do adresára projektu, ktorý obsahuje aj podadresár libraries. Adresár projektu sa vytvára počas inštalácie Arduino IDE a zvyčajne ho Windows umiestňuje do podadresára Tento počítač → Dokumenty → Arduino. Ak chcete pridať zdroje knižnice do dnešného príkladu, stačí presunúť adresár LCD16x2 do priečinka libraries. Po dokončení spustite prostredie Arduino IDE.

Obrázok 2. Blok vzorových programov dostupných pre modul.

SHIELD-LCD16x2 - stav tlačidiel

Skôr ako začnete pracovať na vlastnom programe, je dobré prečítať si príklady použitia funkcií knižnice LCD16x2.h, ktoré sú k dispozícii v adresári Examples. Je to oveľa účinnejšia metóda učenia sa ako čítanie dokumentácie, hoci aj na ňu sa oplatí pamätať.

Ako už bolo spomenuté, rozšírenie komunikuje s doskou UNO pomocou sériového rozhrania. Je teda ľahké uhádnuť, že funkcie opísané v predchádzajúcom článku sa musia upraviť, pretože používali paralelné, 4-bitové rozhranie. Môžeme predpokladať, že mikrokontrolér na rozširucej doske komunikuje s modulom LCD displeja rovnakým spôsobom, ale naše Arduino UNO "nevidí" displej a ovládanie prebieha nepriamo. Preto začnite program zahrnutím knižníc na podporu príslušného sériového rozhrania a zobrazovacieho modulu namontovaného na doske rozšírenia.

#include <LCD16x2.h>

#include <Wire.h>

Aby sme nemuseli používať dlhý názov knižnice, je vhodné jej pre jednoduchosť priradiť alias lcd. Použijeme ho tak, že za bodku napíšeme názov knižničnej funkcie.

LCD16x2 lcd;

Ako si pamätáme z predchádzajúceho článku, programy vytvorené pre Arduino sa delia na dve časti: inicializačnú funkciu a nekonečnú slučku. Príkazy prvej z nich sú zapísané vo funkcii void setup() a tej druhej void loop(). Príkazy obsiahnuté vo funkcii setup sa vykonajú iba raz, zatiaľ čo príkazy v nekonečnej slučke - počas celého programu.

Inicializačná funkcia spustí rozhranie TWI, vymaže obrazovku LCD a zapne podsvietenie displeja pri maximálnej intenzite svetla LED (parameter 0 - vypne podsvietenie).

void setup()

{

Wire.begin(); //TWI interface init

lcd.lcdClear(); //LCD screen clear

lcd.lcdSetBlacklight(255); //maximum backlight on

}

V prípade dosky Olimex ak nie je stlačené žiadne tlačidlo, funkcia čítania tlačidiel vracia iba jednotky, zatiaľ čo stlačenie tlačidla vynuluje príslušný bit.

Funkcia čítania tlačidiel readButtons() vracia premennú typu int a jej spustenie je nasledovné:

premenná = lcd.readButtons();

Je možné pracovať aj s bitmi, ktoré sú logickými nulami, ale pre neskoršiu analýzu je oveľa pohodlnejšie a jednoduchšie, ak je príslušný bit nastavený. To sa vykoná pomocou tzv. jednotkového doplnku:

premenná =~premenná;

Ak je bit nastavený, je vhodné otestovať jeho hodnotu pomocou logického súčinu. Ten je pravdivý len vtedy, ak sú pravdivé obe zložky. Následné pozície bitov možno testovať pomocou konštánt: 0x01 pre bit na pozícii 0, 0x02 - na pozícii 1, 0x04 - na pozícii 2, 0x08 - na pozícii 3 atď. Samozrejme, je jedno, či na testovanie bitov použijete šestnástkový, dvojkový alebo desiatkový zápis čísel, ale keď si to osvojíte, šestnástkový sa zapisuje ľahko. Všimnite si, že ďalší používaný šestnástkový zápis použitý na testovanie pozície bitu je mocninou čísla 2.

buttons = lcd.readButtons();

if (buttons & 0x01) pressed = 1;

else if (buttons & 0x02) pressed = 2;

else if (buttons & 0x04) pressed = 3;

else if (buttons & 0x08) pressed = 4;

else pressed = 0;

Premenná buttons obsahuje informácie o stlačených tlačidlách. Použitie if ... else spôsobí, že spracovanie tlačidla sa skončí, keď je splnená podmienka. To skracuje čas behu programu, ale má to aj nevýhodu, že tlačidlá majú vlastnú hierarchiu a nie je možné čítať stav dvoch alebo viacerých stlačených tlačidiel, podobne ako pri kombinácii tlačidiel Shift a Ctrl na počítači.

Maska 0x01 zodpovedá prvému tlačidlu vľavo a 0x08 prvému vpravo. Program očísluje tlačidlá tak, že premennej pressed priradí hodnotu zodpovedajúcu dohodnutému číslu tlačidla. Potom sa toto číslo zobrazí na LCD displeji na pozícii začínajúcej v prvom riadku a prvom stĺpci. Správa sa zobrazí len vtedy, ak je hodnota stlačeného tlačidla iná ako 0. V opačnom prípade sa zobrazí správa "No button", čo znamená, že nie je stlačené žiadne tlačidlo. Správa je ukončená tromi medzerami preto, aby po zadaní na "1 is pressed", ktorá je dlhšia, sa čistili posledné znaky zápisu.

lcd.lcdGoToXY(1, 1);

if (pressed != 0)

{

lcd.lcdWrite(pressed);

lcd.lcdGoToXY(2, 1);

lcd.lcdWrite(" is pressed");

}

else lcd.lcdWrite("No button ");

Celý náčrt je k dispozícii v materiáloch priložených k článku. Skompilujeme ho a nahráme do pamäte mikrokontroléra Arduino UNO pomocou klávesovej skratky Ctrl+U (Sketch → Upload).

Na stiahnutie

Materiály na stiahnutie



Páčil sa Vám článok? Pridajte k nemu hodnotenie
 

     

Komentáre k článku

Zatiaľ nebol pridaný žiadny komentár. Pridáte prvý? Za obsah komentárov je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok.
Pre komentovanie sa musíte prihlásiť.

Vyhľadajte niečo na našom blogu

Webwiki ButtonSeo servis