Lekce 7 - modul displeje z NOKIE 5110 II. díl

23.02.2013 15:33

     Zdraví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ět

Lekce 7 - modul displeje z NOKIE 5110 II. díl

Datum
Vložil
Titulek

Velké fonty

Dobrý den, potřeboval bych na displeji zobrazovat i velké číslice - cca 16x32 bodů. Prosím o radu.

Datum
Vložil
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
Vložil
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
Vložil
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
Vložil
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
Vložil
Titulek

Re: Re: Pomoc s přepisem pro LCD Nokia

Srr. Má tam být:

char buffer[12];

Datum
Vložil
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
Vložil
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
Vložil
Titulek

Pomoc

Jak prosim vypisu hodnotu promene na display?

Datum
Vložil
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

1 | 2 >>

Vyhledávání

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