Lekce 7 - modul displeje z NOKIE 5110

15.02.2013 15:59

Zdravím všechny při naší další lekci, ve které si k Arduinu připojíme modul dipleje z dnes již legendárního mobilního telefonu NOKIE 5110. Jeho velikost je 1,6" s rozlišením 84 na 48 bodů. Jedná se samozřejmně o monochromatický displej. K sehnání je již jako osazený modul (viz fotografie) se zabudovaným podsvětlením. Jeho cena se bude pohybovat okolo 100 Kč. 

Zapojení vývodů na modulu:

  • 1. RST
  • 2. CE
  • 3. IN
  • 4. CLK
  • 5. +3,3V
  • 6. Podsvětlení - na mém modulu připojeno k zemi
  • 7. GND

Zapojení vývodů modulu se může na modulech od různých výrobcu lišit, přočtetě se dokumentaci od výrobce. Napájení displeje je realizováno z Arduina pomocí pinu s vyvedeným napětím 3,3V hned vedle 5V pinu (pozn.: Zkoušel jsem napájet displej i napětím 5V a nic se nestalo a zlepšil se dokonce kontrast. Vzhledem k omezeným informacím od výrobce, lze mít za to že napájení 5V je též možné). V mém případě je to:

 LCD (pin) Arduino (pin)                                            
1 7
2 6
3 5
4 4
5 3
6  +3,3V (5V ??)
7 GND
8 GND

 

   K ovládání jsem vytvořil knihovnu pro modul displeje. Z části jsem vytvořil již napsaný kód  a upravil jsem ho a nějaké nové funkce jsem přidal. Vám bude stačit stáhnout knihovnu zde (alternativní odkaz v rar) a zkopírovat jí jako v předchozí lekci do adresaře libraries. 

    Schéma zapojení zde nedávám. Přesto si můžete stáhnou obrázky zapojení zde a taky zde Důležité je jen zapojit správně datové vývody a napájení modulu. K Arduino je možné zase zapojit i více těchto displejů, záleží pouze na počtu volných pinů.

Program

Ted něco málo (více) k programu (ke stažení zde). Dle komentářů je snad vše jasné. Důležité je vytvořit objekt displeje pomocí funkce LCDnokia5110 lcd(7,6,5,4,3)a správně napsat čísla pinů do kterých je displej v Arduinu zapojen. Poté stačí displej inicalizovat funkcí lcd.LcdInitialise();Dále již můžeme s diplejem pracovat. Po spuštení by se na dipleji měl objevit nápis Arduino a poté obrázek žárovky s textem Lekce 7 a šipkou. a následně ukázkový text s různými šiřkami mezer, abecedou a nějakými znaky. Všechny znaky jsou uloženy v knihovně jak se sami můžete podívat. Je tam uloženo prvních 127 znaků ASCII code. Česká diakritika chybí ale knihovnu si o daší znaky můžete rozšířit. Jak je vidno, každé písmeno se skláda z pěti 8 bitových vertikálních proužků. Poslední nejvišší bit je vždy 0. Pro názornou ukázku na obrázku, jak vytvořit data pro vykřičník:

Data pro tento znak tedy budou:

 

 {0x00, 0x00, 0x00, 0x00, 0x00} // 20
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
...

TIP

Já jsem si ještě v knihovně modifikoval znak ' (apostrof) na ° (stupně) a to z důvodu potřeby zobrazovatudaje o teplotě pro moje jiné projekty. V knihovně , kterou jsem vám dak k dispozici ke stažení jsem tuto modifikaci ponechal, protože si myslím, že stupně využijete častěji než apostof. Podkud tedy bude chtít zobrazit znak °, odešlěte na displej znak ' (apostrof - ALT+39). Pro příklad  39,6'C -- > 39,6°C.

 

Zde funkce z knihovny NOKIA5110:

lcd.ShowLogo(int miliseconds) - zobrazí na určený počet milisekund obrázek z nápisem Arduino (tuto funkci jsem přidal do knihovny NOKIA5110 jako ukázku. Data k obrázku jsou uložena již v samotné knihovně. 

lcd.Clear() - smaže diplej

lcd.GotoXY(int index_bodu_zleva, int radek) - přesune kurzor na určené místo na displeji (příklad lcd.GotoXY(3,2); - přesune kurzor na 4. bod 3. řádku)

lcd.LcdString(char[]) - zobrazí na dipleje určený text (příklad lcd.LcdString("Ahoj"); - zobrazí na pozici kurzoru text Ahoj)

int lcd.CharSpace - nastaví paramer mezer mezi jednotlivými znaky. Defaultně ja nastaveno ja 1. (nastavitelná hodnota je od 0 do 2). Rozdíl je vidět na ukázkovém programu. (příklad lcd.CharSpace = 2; - nastaveví mezeru mezi znaky na 2 body)

lcd.ShowImage(const unsigned char[], int delka_zobrazeni) - zobrazí obrázek na displeji pro požadovanou dobu v milisekundách. Jak v našem ukázovém programu můžete vidět, tak data obrázku jsou uložena např. v proměné logo_lekce. Tyto data vygeneruje dobrý malý prográmek s názvem LcdAssistant (ke stažení zde). Do tohoto programu nahrajete obrázek ve formátu bmp s rozměry přesně 84 x 48 v jednobitovém rozlišení (černá - bílá). Toto by měla zvládnout většina editorů obrázků. Prográmek vygeneruje již hotová data v souboru, ze kterého jej zkopírujete do vašeho programu. Dodržujete zadané rozměry a nastavení jako na obrázku níže.

  

   Tak doufám, že vám prográmek funguje a že vše bylo pro vás pochopitelné. Kdyby byly nějaké problémy, nebo kdyby jste našli v textu chybu, nebojte se napsat buď na mail nebo do komentářů pod článek. Na závěr přidávám video jak by měl výsledek vypadat.

 

Zpět

Lekce 7 - modul displeje z NOKIE 5110

Datum
Vložil
Titulek

Nefunkční

V tak jednoduchém příkladu tolik chyb? Myslím si, že pro začátečníka je toto naprosto nevhodné (zastaralé). Pokud to neumíte tak to nedělejte.

Datum
Vložil
Titulek

vypsání proměnné

Zdravím,

mám proměnnou typu string a v ní opravdu text. Když toto chci vypsat, tak mi to už neprojde přes kompilaci na chybu no matching function for call to 'LCDnokia5110::LcdString(String&)'
Jak tedy vypsat hodnoty z proměnné?

Díky

Datum
Vložil
Titulek

Re: vypsání proměnné

Už jsem to vyřešil tuto funkcí :)
char* string2char(String command){
if(command.length()!=0){
char *p = const_cast<char*>(command.c_str());
return p;
}
}

Datum
Vložil
Titulek

nefunguje program

Zdar, mám trošku problém.. nefunguje mi program... píše mi to: sketch_sep12a:6: error: expected constructor, destructor, or type conversion before '=' token
sketch_sep12a.ino: In function 'void setup()':
sketch_sep12a:52: error: 'lcd' was not declared in this scope

Díky za rady-...

Datum
Vložil
Titulek

float hodnota

Ahoj, jak byste teda do knihovny zakomponovali nějakou float hodnotu, ať se mi správně vypisujou hodnoty z teploměru třeba? :)

Datum
Vložil
Titulek

Re: float hodnota

nijak :)

Datum
Vložil
Titulek

Re: Re: float hodnota

To chcete říct, že tato knihovna tedy nedokáže na displeji vyobrazit jakékoliv desetinné číslo z nějaké proměnné?

Datum
Vložil
Titulek

Re: Re: Re: float hodnota

String cas = String(millis()/1000, DEC);
// vytvoření pomocné proměnné tisk pro
// uložení v tisknutelném tvaru,
// číslo 10 udává počet znaků zprávy
char tisk[10];
// převod proměnné cas do proměnné tisk
cas.toCharArray(tisk, 10);
// vytištění informace na displej
lcd.LcdString("Cas ");
lcd.LcdString(tisk);

Datum
Vložil
Titulek

delka

Dobrý den mohl bych se zeptat jak mám udělat aby mi to tam vypsalo text a po určité době zobrazilo další?
Dík za odpověď

Datum
Vložil
Titulek

České znaky

Jak propašovat české znaky na LCD? Například
0x30, 0x49, 0x4A, 0x49, 0x20, // ASCII-159 0x9F c s hackem

1 | 2 | 3 | 4 >>

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.