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

Re: Re: Pomoc

Díky moc už to běží.

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

Datum
Vložil
Titulek

Pomoc

Jak prosim vypisu hodnotu promene na display?

<< 1 | 2

Vyhledávání

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