Lekce 7 - modul displeje z NOKIE 5110 II. díl
23.02.2013 15:33Zdravím opět všechny po krátké době. Dnes si v pokračování 7. lekce ukážeme zapojení senzoru intenzity osvětlení. Jená se o levná modul s několika součástkami, který světlo převádí do analogové hodnoty 0-5V což se náramně hodí pro naše Arduino. Obsahuje též digitální výstup, ketrý se spíná, když intezita osvětlení dosáhne požadované hodnoty nastavené odporovým trimrem na modulu. Toto však nevyužijeme a budeme si všímat pouze analogového výstupu.
Na obrázku níže vidíte, že modul má celkem 4 piny. Popis zapojení s Arduinem je jednoduchý:
- Vcc - 5V
- GND - GND
- DO - A0
- DI - nezapojeno
Zapojení bude stejné jako v předchozím případě. Pouze změna je v tom, že displej napájím napětím 5V z Arduina a podsvětlení je zapojeno na zem přes odpor 1,2kOhm, aby mi to moc nezářilo do očí.
Vzhledem k tomu, že jsem chtěl vyjadřovat analogovou hodnotu ze senzoru jinak než číselnou formou, upravil jsem trošku naší knihovnu a přidal 3 nové funkce, které vykreslují hodnotu ve sloupci. Ukázky mužete vidět na videu níže.
Nejprve uvedu zdrojový kód pro tento program:
#include <Nokia5110.h> // LCDnokia5110::LCDnokia5110(int rst, int ce, int dc, int in, int clk) // vytvoří objekt LCDnokia5110 s názvem lcd na pinech 7,6,5,4,3 LCDnokia5110 lcd(7,6,5,4,3); // vytvoří proměnou sensorValue; int sensorValue = 0; // datový buffer pro textovou podobu hodnoty char data[5] = " "; void setup(void) { // inicializuje diplej lcd.LcdInitialise(); // vymaže displej lcd.LcdClear(); //nastaví mezery mezi pismeny na 0 bodů lcd.CharSpace = 0; //text lcd.GotoXY(4,0); lcd.LcdString("Lighting sensor"); lcd.GotoXY(2,1); lcd.LcdString("----------------"); // popisky HorizontalBaru lcd.GotoXY(0,3); lcd.LcdString("0"); lcd.GotoXY(37,3); lcd.LcdString("50"); lcd.GotoXY(69,3); lcd.LcdString("100"); void loop(void) { // přečte analogovou hodnotu z A0 sensorValue = analogRead(0); // převede hodnotu do procent a uloží jí promené "data" // slouží k zobrazení na displeji - zde nepoužito (můžete zakomentovat) // nebo použít jak budete chtít sprintf(data, "%d" , (1023 - sensorValue)/(1023/100)); //*************************************** // HorizontalBar(int Hodnota, int radek) //*************************************** // zobrazí hodnotu z proměné sensorValue // převednou na procenta na 5. řádku // pozn.: // Hodnota: 0-100 // radek: 0-5 // --- Tuto funkci obsahuje pouze knihovna Nokia5110 // --- od veze 1.2 lcd.HorizontalBar((1023 - sensorValue)/(1023/100),4); // čeká 20 ms delay(20); }
V programu vidíte funkci HorizontalBar(int Hodnota, int radek);. Tak nám vykreslí takový "progres bar" v horizontální poloze. Hodnotu pro vykreslení zadávejte v rozmezí 0 až 100. Proto je ve funkci převod analogové hodnoty do procentuelního vyjádření a vzhledem k tomu, že analogový výstup senzoru dává tím větší napětí čím je víc tma, tak si hodnotu obrátíme. Viz přepočet ve funkci (1023 - sensorValue)/(1023/100), kdyby senzor dával hodnoty opačně, tzn. čím více světla tím větší napětí přepočet by byl sensorValue/(1023/100). Pozn. výpočet jednoho procenta hodnoty není 1024/100, ale 1023/100. Vysvětlení - maximální hodnota dosažená u funkce analogRead(pin) je 1023. Rozlišení je 1024 hodnot avšak musí být započítána i nula, protože je to také hodnota. Tudíž 1% = 1023/100. Dálší paramer funkce je int radek. Můžeme tedy zapsat číslo od 0 (pro první řádek) až 5 (pro 6. řádek), je to tedy index řádku. Funkce nezobrazuje samotné popisky nebo hodnoty - v našem případě se nápis grafu (čísla 0,50 a 100) dopsal do programu zvlášť a je napsrosto volitelný. Míasto toho mužeme použít teyt Světlo a Tma atd.
Popis nových funkcí:
|
HorizontalBar(int Hodnota, int radek); Hodnota: 0 - 100 radek: 0 - 5 příklad: HorizontalBar(47,2); - zobrazí graf s hodnotou 47 na 3. řádku.
|
|
HorizontalBar2(int Hodnota, int radek); Hodnota: 0 - 100 radek: 0 - 5 příklad: HorizontalBar2(75,5); - zobrazí graf s hodnotou 75 na 4. řádku. |
|
VerticalBar(int Hodnota, int left); Hodnota: 0 - 100 left: 0 - 83 příklad: VerticalBar(80,41); - zobrazí graf s hodnotou 80 na 42. bodu zleva |
Novou knihovnu Nokia5110 v1.2, zdrojový kód a obrázky z lekce si můžete stáhnout zde.
———
ZpětLekce 7 - modul displeje z NOKIE 5110 II. díl
Datum | 06.10.2015 |
---|---|
Vložil | David |
Titulek | Velké fonty |
Dobrý den, potřeboval bych na displeji zobrazovat i velké číslice - cca 16x32 bodů. Prosím o radu.
———
Datum | 24.02.2015 |
---|---|
Vložil | Karel |
Titulek | Zobrazení desetinných čísel na displeji |
Zdravím,
V posledním komentáři píšete, jak vypsat proměnou na displej zaokrouhlenou na celá čísla pomocí příkazů:
char data[5] = " ";
sprintf(data, "%d" , hodnota_v_int);
lcd.LcdString(data);
Chci se zeptat jestli jde vypsat proměnou na displej s desetinnými místy? Nějak se mi to nedaří. I když číslo mám ve formátu FLOAT, tak stejně to na displej nevypíše desetinný čísla.
Díky za radu
———
Datum | 06.04.2015 |
---|---|
Vložil | Lada |
Titulek | Re: Zobrazení desetinných čísel na displeji |
Ahoj, taky jsem se s tím trápil a nakonec mě funguje toto:
lcd.GotoXY(0,2);
lcd.LcdString("U=");
char szNumber[10]; // Musí mít dostatečnou velikost !!!
dtostrf(voltage,0,2,szNumber); //převod float na string - 0=pozice z leva, 1=počet des. míst
lcd.LcdString(szNumber);
lcd.LcdString("V");
———
Datum | 06.12.2013 |
---|---|
Vložil | Setros |
Titulek | Pomoc s přepisem pro LCD Nokia |
Už nějakou dobu se pokouším přepsat následující program pro LCD Nokia a stále mi to nejde. Program je původně psaný pro dvouřádkový displej a nějak nemůžu pochopit jak se na LCD Nokia vypisují hodnoty funkcí. Rád bych docílit toho, aby údaje na displeji byly pěkně pod sebou. Předem díky za pomoc.
Zde je odkaz na program:
https://drive.google.com/file/d/0B85z9qLh85VgNHlmUkFYRHctTWM/edit?usp=sharing
———
Datum | 18.12.2013 |
---|---|
Vložil | Setros |
Titulek | Re: Pomoc s přepisem pro LCD Nokia |
Tak jsem to již vyřešil. Použil jsem následující:
int buffer[12];
.
.
lcd.LcdString(itoa(promenna, buffer, 10));
———
Datum | 18.12.2013 |
---|---|
Vložil | Setros |
Titulek | Re: Re: Pomoc s přepisem pro LCD Nokia |
Srr. Má tam být:
char buffer[12];
———
Datum | 19.11.2013 |
---|---|
Vložil | Honza |
Titulek | Zobrazení hodnot z čidla DHT11 |
Zdravím,
nějak si lámu hlavu, jak zobrazit na tomto displeji hodnoty např. z čidla DHT11, či modulu BMP085.
Mohl by mi prosím někdo poradit, pokud je to ovšem možné?
Děkuji
———
Datum | 05.11.2014 |
---|---|
Vložil | PF |
Titulek | Re: Zobrazení hodnot z čidla DHT11 |
Ano, mělo by to jít takto:
Místo textu jednoduše zobrazíš proměnou např. řádek
"lcd.LcdString("Lighting sensor");"
nahradíš
"lcd.LcdString(teplota);"
v proměnné teplota bude číslo s teplotou z DHT11
POZOR! Nesmí tam být uvozovky jako u textu!!!
Nezkoušel jsem to, čekám až mi displey dorazí domů :)
———
Datum | 30.06.2013 |
---|---|
Vložil | Aleš |
Titulek | Pomoc |
Jak prosim vypisu hodnotu promene na display?
———
Datum | 02.07.2013 |
---|---|
Vložil | Admin |
Titulek | Re: Pomoc |
char data[5] = " ";
sprintf(data, "%d" , hodnota_v_int);
lcd.LcdString(data);
...jinak máš to v ukázce kódu :-)) použi fci sprintf