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 .









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