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 | 03.07.2013 |
|---|---|
| Vložil | Aleš |
| Titulek | Re: Re: Pomoc |
Díky moc už to běží.
———
| 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
———
| Datum | 30.06.2013 |
|---|---|
| Vložil | Aleš |
| Titulek | Pomoc |
Jak prosim vypisu hodnotu promene na display?



