Imatge | Descripció |
---|---|
Arduino Uno o compatible amb S4A i amb el firmware per S4A carregat. | |
Una protoboard | |
Cables de connexió | |
Un potenciòmetre | |
Una pantalla LCD 16x02 |
La pantalla LCD-1602 és una pantalla de cristall líquid de 16 caràcters de 2 línies de baixa potència, amb interfície sèrie. Podeu descarregar la fulla de característiques (en anglés) aquí.
Les pantalles LCD (Liquid Cristall Display) són una de les formes més senzilles i econòmiques de dotar d’un display a un autòmat.
El Hitachi HD44780 és un dels controladors de LCDs més àmpliament estesos per la seua senzillesa i baix preu. L’HD44780 està dissenyat per a controlar LCDs monocroms de fins a 80 caràcters alfanumèrics i símbols. També disposa d’una xicoteta memòria RAM per a configurar els nostres propis caràcters o dibuixos.
Les pantalles LCD amb el controlador HD44770 es fabriquen en diferents grandàries, sent comunes 16x02 (2 línies de 16 caràcters), 20x02, 20x04 i 40x02.
Les pantalles LCD disposen de retroil·luminació posterior en blava o en verd. El contrast pot ser variat connectant un potenciòmetre al LCD.
Connectar directament un LCD a Arduino requereix una gran quantitat de pins. Sol ser aconsellable emprar un adaptador a bus I2C, com veurem en la propera entrada.
Com podeu veure són necessaris un bon número de cables per fer les connexions, així que és molt fàcil equivocar-se. Per això es recomana utilitzar un mòdul I2C, que simplifica moltíssim el muntatge.
La relació dels pins i la seua connexió tant per al arduino com per a la pantalla és la següent:
LCD | Arduino | |
---|---|---|
01 - GND | negatiu pantalla | GND |
02 - Vcc | positiu pantalla | 5V |
03 - V0 | ajust del contrast | Pot 10K pin variable |
04 - RS | registre de senyal de selecció | Pin 12 |
05 - R/W | senyal de selecció de lectura / escriptura | GND |
06 - E | senyal d’activació d’operació | Pin 11 |
07 - D0 | ||
08 - D1 | ||
09 - D2 | ||
10 - D3 | ||
11 - D4 | Transferència de dades | Pin 05 |
12 - D5 | Transferència de dades | Pin 04 |
13 - D6 | Transferència de dades | Pin 03 |
14 - D7 | Transferència de dades | Pin 02 |
15 - A | il·luminació de fons | 5V |
16 - K | il·luminació de fons | GND |
Per aquest muntatge pujarem el exemple contingut en «Fitxer>Exemples>LiquidCrystal>Hello world».
La llibreria necessària per controlar la pantalla LCD s’anomena «LiquidCrystal» i podeu consultar la referència a l’enllaç https://www.arduino.cc/en/Reference/LiquidCrystal
Codi: ARD_11.ino
#include <LiquidCrystal.h> // inclou el codi de la biblioteca
// inicialitza la biblioteca associant qualsevol pin d'interfície LCD necessari al número de pin arduino al qual estigui connectat
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup()
{
lcd.begin(16, 2); // configura el nombre de columnes i files de la pantalla LCD
lcd.print("hello, world!"); // Escriu un missatge a la pantalla LCD
}
void loop()
{
lcd.setCursor(0, 1); // posiciona el cursor a la columna 0, línia 1 (Nota: la línia 1 és la segona fila, ja que el recompte comença per 0)
lcd.print(millis() / 1000); // imprimeix el nombre de segons des del reinici
}
Definirem un caràcter propi, el símbol de graus centígrads, per exemple.
El primer que heu de saber, és que els caràcters es defineixen amb un array de 8×8, com si els dibuixàreu en una quadricula d’aqueixa grandària, i emplenant el quadradet pertinent.
Així per exemple per al símbol del grau seria:
Abans del setup(), en les declaracions i definicions es on creem els caràcters personals.
byte grado[8] =
{
0b00001100, // _Els definim com binaris_ 0bxxxxxxx
0b00010010,
0b00010010,
0b00001100,
0b00000000,
0b00000000,
0b00000000,
0b00000000
};
Per a muntar els caràcters definits usem:
lcd.createChar(0, euro);
lcd.createChar(1, grau);
I ara ja estan disponibles. Tingueu en compte que només podem definir 8 caràcters especials en un moment donat
Aquí tenim un exemple de codi:
#include <LiquidCrystal.h>
LiquidCrystal lcd(_12_, _11_, _5_, _4_, _3_, _2_);
byte grado[8] =
{
0b00001100,
0b00010010,
0b00010010,
0b00001100,
0b00000000,
0b00000000,
0b00000000,
0b00000000
};
void setup()
{
lcd.begin(16, 2); // inicialitzar el LCD
lcd.createChar(1, grado); // crea el caràcter grado
lcd.setCursor(0, 0); // posiciona el cursor
lcd.print("Estamos a 25 "); // missatge
lcd.write(1); // escritura del caràcter persona
}
void loop()
{
}