Componente: Ecran LCD cu conectare seriala tip Sparkfun

Autor: Viorel -29/07/2010-


Ecranul LCD Serial permite afisarea de text utilizand doar un singur fir (pe langa firul de alimentare si masa). Varianta prezentata in acest articol este cea produsa de Sparkfun, fiind atat mai simplu de utilizat cat si mai configurabila decat cea prezentata anterior aici.

Dispozitivul se cupleaza la Arduino prin trei fire : VCC si GND, cuplate respectiv la portul de 5 V si GND al Arduino, si un al treilea fir pentru semnalul util, fir care se cupleaza pe portul TX al Arduino.

Mai departe, orice caracter este scris pe portul Serial al Arduino apare scris pe ecranul LCD (spre exemplu, caracterul “a” scris pe portul serial determina aparitia literei “a” pe ecranul LCD).

Acest lucru se intampla pentru aproape toate caracterele, cu exceptia caracterului cu codul ASCII 254 si caracterului cu codul ASCII 124 care sunt rezervate ca si caractere de control.

Cele doua caractere de control sunt folosite pentru a transmite comenzi speciale ecranului LCD (spre exemplu comenzi referitoare la reglarea luminozitatii).

In ceea ce urmeaza voi trece direct la prezentarea unui program Arduino care include toate comenzile care se pot da ecranului LCD serial, fiecare comanda fiind grupata intr-o metoda separata.






#include "SoftwareSerial.h"

#define TX_PIN 7

SoftwareSerial SerialLCD = SoftwareSerial(0, TX_PIN); 

void setup() {
  pinMode(TX_PIN, OUTPUT);
  SerialLCD.begin(9600);
  delay (1000);

  stergeLCD();

  nivelIluminare(29); 

  mutaCursorLaPozitia(1, 0);
  SerialLCD.print("line 1");
  cursorInvizibil();

}

void loop() {

}

//valoare nivel intre 0 si 29 inclusiv
void nivelIluminare(int nivel) {
   SerialLCD.print(124, BYTE);
   SerialLCD.print(128 + nivel, BYTE);
   delay(100);
}

void selecteazaLiniaUnu(){
  SerialLCD.print(254, BYTE);
  SerialLCD.print(128, BYTE);
  delay(100);
}

void selecteazaLiniaDoi(){
  SerialLCD.print(254, BYTE);
  SerialLCD.print(192, BYTE);
  delay(100);
}

void stergeLCD(){
  SerialLCD.print(254, BYTE);
  SerialLCD.print(1, BYTE);
  delay(100);
}

void mutaCursorDreapta(){
  SerialLCD.print(254, BYTE);
  SerialLCD.print(0x14, BYTE); 

}

void mutaCursorStanga(){
  SerialLCD.print(254, BYTE);
  SerialLCD.print(0x10, BYTE); 

}

//linie 0 sau 1, iar coloana intre 0 si 16
void mutaCursorLaPozitia(int linie, int coloana){
  SerialLCD.print(254, BYTE);
  if (linie == 0) {
    SerialLCD.print(128 + coloana, BYTE);
  } else {
     SerialLCD.print(128 + 64 + coloana, BYTE);
  }

}

void cursorTipLinieVizibil() {
  SerialLCD.print(254, BYTE);
  SerialLCD.print(0x0E, BYTE);
  delay(100);
}

void cursorTipBaraVizibil() {
  SerialLCD.print(254, BYTE);
  SerialLCD.print(0x0D, BYTE);
  delay(100);
}

void cursorInvizibil() {
  SerialLCD.print(254, BYTE);
  SerialLCD.print(0x0C, BYTE);
  delay(100);
}

void scrollTextDreapta() {
  SerialLCD.print(254, BYTE);
  SerialLCD.print(0x1C, BYTE);
  delay(100);
}

void scrollTextStanga() {
  SerialLCD.print(254, BYTE);
  SerialLCD.print(0x18, BYTE);
  delay(100);
}


Analiza program

Pentru acest exemplu am folosit o conexiune de tip  SoftwareSerial , conectata pe pinul digital 7. Alternativ, as fi putut ca pur si simplu sa conectez firul de semnal pe portul TX, dar in acest caz ori de cate ori as fi urcat un program pe Arduino ar fi trebuit sa decuplez ecranul LCD serial.

Mai jos voi detalia fiecare dintre functiile utilizate in program.

  • nivelIluminare(int nivel)

seteaza nivelul de iluminare al ecranului LCD; parametrul “nivel” poate avea orice valoare intre 0 (complet stins) si 29 (complet luminos)

  • selecteazaLiniaZero()

muta cursorul la inceputul primei linii a ecranului LCD

  • selecteazaLiniaUnu()

muta cursorul la inceputul celei de-a doua linii a ecranului LCD

  • stergeLCD()

sterge intreg continutul afisat pe ecranul LCD

  • mutaCursorDreapta()

muta cursorul cu un caracter spre dreapta

  • mutaCursorStanga()

muta cursorul cu un caracter spre stanga

  • mutaCursorLaPozitia(int linie, int coloana)

muta cursorul la pozitia ceruta; valoarea pentru parametrul “linie” poate fi 0 sau 1, iar valoarea pentru parametrul “coloana” poate fi o valoare intre 0 si 15 inclusiv

  • cursorTipLinieVizibil()

pe ecran este afisat un cursor tip de tip linie de subliniere (dupa ultimul caracter)

  • cursorTipBaraVizibil()

pe ecran este afisat un cursor tip de tip bara plina  (dupa ultimul caracter)

  • cursorInvizibil()

pe ecran nu este afisat nici un tip de cursor (ramane doar textul)

  • scrollTextStanga()

intreg textul afisat pe ecran este miscat cu un caracter spre stanga

  • scrollTextDreapta()

intreg textul afisat pe ecran este miscat cu un caracter spre dreapta


Acest ecran LCD il gasiti in oferta Robofun .



Despre... Viorel

Acest autor a publicat 137 articole.

Share

FacebookTwitterEmailWindows LiveTechnoratiDeliciousDiggStumbleponMyspaceLikedin

Comentarii


Cosmin
June 3rd, 2011

Cu libraria de mai sus se poate afisa un float? ex temperatura in grade celsius cu 2 zecimale? daca se poate un exemplu.
Multumesc


iard
June 3rd, 2011

LCD-ul din exemplul de mai sus este cel de la Sparkfun de aici: http://www.sparkfun.com/products/9393

Exista o biblioteca pentru el aici: http://openmoco.org/node/153

Exemplul cerut:

float temperatura = 34.21;
byte zecimale = 2;
SerialLCD.print ( temperatura, zecimale );

Succes!


Cosmin
June 4th, 2011

da cu biblioteca indicata functioneaza, multumesc.
eu foloseam cele mentionate in exemplu http://www.robofun.ro/lcd/lcd_serial_25
care foloseste #include “SoftwareSerial.h”

ar fi bine de adaugat si acolo link ul http://openmoco.org/node/153

Trimite un comentariu