Aqui vai minha primeira contribuição para o mundo micro processado o Arduino. Um mundo novo que abre a as portas da automação de forma mais simples que outros circuitos programáveis, como os PIC eProns e etc. Pelo seu enfoque educativo facilidade uso e de programação e um mundo de informações para buscar na rede. Nesta primeira viajem vamos aprender a ligar um LCD 2×16 reciclado. Pois é, quer entrar na robótica automação, tem de saber usar o ferro de solda, sugador, alicate etc e usar sucata!
Era um LCD de um Bina que já tinha sido aproveitado para meu antigo projeto um case-mod. Mas como a minha MoBo, não tem serial, e muito menos paralela estava em desuso a muito.
Como não tinha os Jumpers que facilitam muito as montagem experimentais na protoboard utilizei aqueles cabinhos de gabinetes velhos e os pinos de conexão dos Jumpers de uma antiquíssima placa de modem uma UsRobotics de 33kbps ISA, para fazer as pontas dos cabos e com a solda isolada por tirinhas de fita isolante, ficou melhor que a da China, e Leds e push-buttons já prontos para experimentos, custo zero e 100 ecológico!
Como é um LCD Paralelo compatível com o TS1620A, e sem a interface serial (STV1602) tenho que ligar ele diretamente e neste processo quase todos os pinos digitais (I/O) vão ficar ocupados, optei pela ligação econômica que utiliza menos 4 pinos, porem mais lenta no carregamento do display mas imperceptível, para o tipo de aplicações que vamos fazer e sobram I/O’s suficientes para a maioria dos experimentos.
Como este é um LCD sem Backlight, assim como alguns roubados de telefones públicos, vão ter duas ligações a menos, os pinos 16(Gnd) e o 15, Drive do Led do backlight que em alguns displays já tem um resistor em serie, se não tiver tem de coloque um de 220R antes de ligar ao 5V, e opcionalmente pode ser controlado por um potenciômetro ou pelo próprio Arduino.
Da direita para a esquerda pinos 1-2-3-4-5-6-7-8-9-10-11-12-13-14, normalmente vem marcado no próprio display, ou melhor, procure o datasheet.
1- Gnd
2- V+ (5v)
3- Contraste, ponte com um resistor de 82R e Gnd
4- (RS) – D7 Arduino
5- (RW) – Gnd
6- (EN) – D8 Arduino
7- (DB0)
8- (DB1)
9- (DB2)
10- (DB3)
11- (DB4) – D9 Arduino
12- (DB5) – D10 Arduino
13- (DB6) – D11 Arduino
14- (DB7) – D12 Arduino
Liguei um push bottom entre o Gnd e o Pino 6 (D6) do Arduino, só para testar a IF ELSE. Neste circuito não coloquei o resistor de 10M ligado do D6 ao Gnd, que serve para evitar flutuações e interferências, faça o mesmo e experimente retirar a linha “digitalWrite(PINO6, HIGH);”
Ficou maluco não é? As vezes conta, para, começa do zero. E que quando configuramos uma I/O digital no Arduino como entrada esta linha de comando liga um resistor interno de 20M, para deixar a entrada em alta impedância, e evitar flutuações. Mas a boa pratica, é sempre ligar um resistor de 10M como Gnd, quando uma I/O for configurada como entrada.
#include <LiquidCrystal.h> LiquidCrystal lcd(7, 8, 9, 10, 11, 12); int PINO13 = 13; //inicia as variáveis (led on board) int BOTAOLIGA = 0; // variavel que armazena o status do pino 6 int PINO6 = 6; int VAR1 = 0; void setup() { Serial.begin(9600); pinMode(PINO13, OUTPUT); //Define os modos das saidas pinMode(PINO6, INPUT); digitalWrite(PINO6, HIGH); // Liga o resistor interno do pino 6 lcd.begin(16, 2); //Inicia o LCD reciclado lcd.print("www.CdeF.com.br!"); } void loop() { BOTAOLIGA = digitalRead(PINO6); //Le o status do pino 6 if (BOTAOLIGA == HIGH) { Serial.println("PARADO = "); //condicional que testa se o VAR1 = 0; //Botao do pino 6 e zera a variavel VAR1 } else { // Se nao pressionado continua por aqui digitalWrite(PINO13, HIGH); //liga o led do p13 delay(500); // atrazo de 0,5 segundos VAR1 ++; //He a mesma coisa que VAR1 = ++ VAR1; Serial.print("teste = "); //imprime no serialmonitor sem quebra de linha Serial.println(VAR1); // valor de VAR1 na tela digitalWrite(PINO13, LOW); //apaga o led do pino 13 lcd.setCursor(7, 1); //define LCD coluna 7 linha 2 lcd.print(VAR1); //imprime VAR1 em coluna 7 linha 2 delay(100); // atraso de 0,5 segundos } }