Mostrando postagens com marcador lcd. Mostrar todas as postagens
Mostrando postagens com marcador lcd. Mostrar todas as postagens

quarta-feira, 23 de julho de 2014

Shield LCD KeyPad



   A Shield LCD KeyPad, foi desenvolvida para placas Arduino, para oferecer uma interface de fácil utilização que permite aos usuários criarem menus, fazer seleções, etc. Composto por um LCD branco de 16x2 (Caractere x Linha) com luz de fundo azul, e um teclado de cinco teclas: Selecione (select), Acima (up), direita (rigth), abaixo (down), e esquerda (left). Para otimizar o uso dos pinos digitais I/O, a interface do teclado usa apenas uma entrada analógica. Os valores da chave são lidos através de um divisor de tensão de cinco estágios.

 Na imagem abaixo veja quais as entradas e saidas necessárias pra conectar ao arduino.


na tabela abaixo veja as funções de cada pino usado.

Dimensões da placa.





   Todas as informações citadas acima, foram disponibilizadas pelo fabricante da shield.

  Identificando valores dos botões do keypad:


  Como citado acima, os comandos do keypad são recebidos pelo arduino por apenas uma entrada analógica. Isso é possível porque cada botão fornece um nível de tensão que lhe corresponde.

   Como no datasheet do fabricante não contém esses  valores, foi necessário mensurá-los usando a própria entrada analógica do arduino. Para isso é necessário programar o arduino de forma que ele amostre os valores da entrada analógica no monitor serial. veja o código abaixo:

void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue, DEC);
}

   Depois de carregado o código no arduino, é necessário abrir o monitor serial ( Ctrl + Shift + M ) para poder visualizar os valores.

Abaixo os resultados obtidos no teste.

Nenhum botão pressionado = 1023


Botão select = 640


Botão left = 410


Botão rigth = 0


Down = 258


Up = ficou variando entre 100 e 101



Código teste.




   Este código foi desenvolvido com objetivo didático e para testar o funionamento do display. Na primeira linha ele exibe apenas um texto simples. Na segunda linha à esquerda exibe qual o botão está sendo pressionado. À esquerda da segunda linha, exibe um contador em segundos que mostra a quanto tempo o arduino está ligado.

/*******************************************************

Este teste irá testar o LCD e os botões

********************************************************/

#include <LiquidCrystal.h> // carrega biblioteca do display

// selecionar os pinos utilizados no painel LCD

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// definir alguns valores utilizados pelo painel e botões
int lcd_key     = 0;
int adc_key_in  = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// ler os botões
int read_LCD_buttons()
{
 adc_key_in = analogRead(0);      // Ler o valor da entrada analógica 0
 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
 // we add approx 50 to those values and check to see if we are close
 if (adc_key_in > 1000) return btnNONE; // Fazemos esta a opção 1, por razões de velocidade, uma vez que irá ser o resultado mais provável
 if (adc_key_in < 50)   return btnRIGHT;
 if (adc_key_in < 195)  return btnUP;
 if (adc_key_in < 380)  return btnDOWN;
 if (adc_key_in < 555)  return btnLEFT;
 if (adc_key_in < 790)  return btnSELECT;  
 return btnNONE;  // quando todas as outras falham, devolva este ...
}

void setup()
{
 ini ();  // inicia a sub rotina da tela de apresentação

 lcd.begin(16, 2);              // start the library
 lcd.setCursor(0,0);
 lcd.print("  Arduino Mais "); // texto a ser exibido no display

}
void loop()
{
 lcd.setCursor(9,1);            // move cursor to second line "1" and 9 spaces over
 lcd.print(millis()/1000);      // Segundos decorridos desde que o display foi ligado


 lcd.setCursor(0,1);            // move to the begining of the second line
 lcd_key = read_LCD_buttons();  // read the buttons

 switch (lcd_key)               // depending on which button was pushed, we perform an action
 {
   case btnRIGHT:
     {
     lcd.print("RIGHT ");
     break;
     }
   case btnLEFT:
     {
     lcd.print("LEFT   ");
     break;
     }
   case btnUP:
     {
     lcd.print("UP    ");
     break;
     }
   case btnDOWN:
     {
     lcd.print("DOWN  ");
     break;
     }
   case btnSELECT:
     {
     lcd.print("SELECT");
     break;
     }
     case btnNONE:
     {
     lcd.print("NONE  ");
     break;
     }
 }

}
void ini (){  /// tela de apresentação

 lcd.begin(16, 2);             // inicia biblioteca da tela
 lcd.setCursor(0,0);
 lcd.print("  Arduino Mais  ");  // exibe texto na tela na primeira linha
 lcd.setCursor(0,1);
 lcd.print("   Apresenta:   ");// exibe texto na tela na segunda linha
 lcd.setCursor(0,0);
 delay(2000);
 lcd.print("   LCD Keypad   ");  // exibe texto na tela na primeira linha
 lcd.setCursor(0,1);
 lcd.print("      Test      ");// exibe texto na tela na segunda linha
 delay(2000);  // segura informação na tela por 2 segundos
}

sexta-feira, 18 de julho de 2014

Display LCD Gráfico Touchscreen TW12864

Marca: TATO
Modelo: TW12864
Site: http://tato.ind.br/  
 
   O display gráfico serial TW-12864 combina um módulo serial com um display gráfico de 128x64 pontos, de fundo branco e letras pretas. Este conjunto recebe dados serialmente a velocidade de 2400 a 15200bps e mostra no display textos ou gráficos. No modo texto ele pode apresentar diferentes tamanhos de fontes.  
  Códigos especiais em ASCII são utilizados para enviar comandos ao display. Instruções adicionais permitem o controle do tamanho de fonte e posicionamento do cursor. As instruções gráficas traçam linhas, retângulos, círculos e pontos.
   O display TW-12864possui uma memória EEPROM que permite armazenar até 30 telas completas que podem ser criadas em qualquer computador PC rodando Windows e armazenadas no display. Com um simples comando as telas podem ser exibidas no display.

O conector do display TW-12864 é do tipo barra de pinos com espaçamento padrão de 0.1”.

ATENÇÃO: Não inverta o 5V e o terra, nem por um instante. Fazendo isto irá destruir o display. Não aplique mais de 5V. Isto pode queimar o display.

Controle de Contraste


   O contraste do display pode ser ajustado através de um trimpot localizado na parte trazeira.



Backlight LED


   O display TW-12864 possui um backlight de LED que possui um baixo consumo de corrente. A intensidade do backlight pode ser ajustada por controle do software.

Selecionando o Baud Rate


   O baud rate padrão do display é 9600bps e ele retornará a esta velocidade sempre que for ligado. A velocidade pode então ser alterada através de comandos de software.

Ligação de Uso


   O display TW-12864 necessita de 5Vx100mA para o funcionamento. Os dois pinos de comunicação são para ligar na UART de um microcontrolador. Para ligação a um PC é necessário um MAX232.

Operação Básica


   Uma vez que o TW-12864 esteja corretamente ligado e configurado para o baud rate do microcontrolador, comandos podem ser enviados para o display. Todos os comandos são em código ASCII e terminador por um <ENTER>.

Tempo de Inicialização


   O display TW-12864 necessita de 200ms para inicializar e estar pronto para receber comandos.

Comandos do Display

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   Nos comandos abaixo, sempre que o simbolo « aparecer, significa que um <ENTER> foi digitado.

Draw line - Desenha linha - l x0 y0 x1 y1
Desenha uma linha
Exemplo: l 10 20 40 50«
Resultado: Desenha uma linha entre os pontos 10,20 e 40,50 com a cor de frente
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Draw Point - Desenha um ponto - po x y
Desenha um ponto
Exemplo: po 20 30«
Resultado: Desenha um ponto na posição 20,30 com a cor de frente.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Set Font - Seleciona a fonte - f <tipo>
Seleciona o tipo de fonte
Exemplo: f “13”«
Resultado: Seleciona a fonte tamanho 13
As opções de fonte são:
5, 11, 13, 17
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Text Display - Mostra um texto - t
Mostra um texto no display
Exemplo: t “texto de exemplo”«
Resultado: Escreve texto de exemplo no display
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Draw Rectangle - Desenha um retângulo - r x0 y0 x1 y1
Desenha um retângulo entre os pontos x0,y0 e x1,y1
Exemplo: r 10 20 40 50«
Resultado: Desenha um retângulo entre 10,20 e 40,50
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Draw Rectangle Filled - Desenha um Retângulo Preenchido - rf x0 y0 x1 y1
Desenha um retângulo preenchido
Exemplo: rf 10 20 40 50«
Resultado: Desenha um retângulo preenchido com a cor de frente.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Rectangle Erase - Apaga Retângulo - re x0 y0 x1 y1
Apaga uma área retangular do display
Exemplo: re 10 20 40 50«
Resultado: Apaga a área entre 10,20 e 40,50
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Rectangle Invert - Inverte Retângulo - ri x0 y0 x1 y1
Inverte uma área retangular do display
Exemplo: ri 10 20 40 50«
Resultado: Inverte a área entre 10,20 e 40,50
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Draw Circle - Desenha um Círculo - c x y r
Desenha um círculo
Exemplo: c 50 60 10«
Resultado: Desenha um círculo no ponto 50,60 com raio 10
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Draw Circle Filled - Desenha um Círculo Preenchido - cf x y r
Desenha um círculo
Exemplo: cf 50 60 10«
Resultado: Desenha um círculo preenchido no ponto 50,60 com raio 10
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Clear Screen - Apaga a Tela - z
Preenche a tela toda com a cor de fundo
Exemplo: z«
Resultado: A tela é preenchida com a cor de fundo.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
BackLight - bk 0|1|2|3|4|5
Ajusta a intensidade do backlight
Exemplo: bk 1«
Resultado: Liga o backlight na intensidade mínima
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Baud Rate - b 2400|9600|19200|38400|115200
Determina a velocidade de comunicação
Exemplo: b 19200«
Resultado: Muda a velocidade para 19200bps
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mostra Tela - T n
Mostra uma tela armazenada na memória
Exemplo: T 12«
Resultado: Mostra a tela número 12
O valor de ‘n’ pode ser de 1 a 30

================================================================================================================

Comandos do Touch Screen


Operação do Touch Screen


   O touch screen funciona de forma totalmente independente do display em dois modos diferentes:

Botão e Hotspot ou modo xy. 

  • No modo xy, os valores de x e y são retornados enquanto tiver um toque no display. Os valores são retornados em ASCII no formato xxx,yyy«
  • No modo Botão, até 20 botões podem ser definidos e são tratados automaticamente pelo display, se um botão for tocado, sua imagem é invertida no display e o código Bn«, onde n é o número do botão é enviado pela serial. Assim que o botão for solto o código bn« é enviado.
  • O modo HotSpot é similar ao modo Botão, a diferença é que a área sensível não é invertida e os códigos enviados são Hn« e hn« para o toque e quando é solto respectivamente.

Touch Calibrate - Calibra o Touch Screen - tc
Calibra o touch screen
Exemplo: tc«
Resultado: A tela de calibração é mostrada

Button Define - Define Botão - bd n x y "texto"
Cria um botão
Exemplo: bd 1 50 20 “Teste”«
Resultado: Desenha um botão com centro no ponto 50,20

Criando telas gráficas


   As telas para o display podem ser criadas em qualquer programa gráfico disponível para Windows. Crie a tela com 128x64 pontos ou se já tiver alguma imagem pronta, redimensione para este tamanho.

   As imagens devem ser gravadas no formato BMP do Windows e 1 bit de color ou BW.

   Clique aqui e baixe o programa que permite o teste de todos os comandos suportados pelo display assim como o envio das telas gráficas.


Dimensões do display





Providências preliminares para uso do módulo:


Temos dois modos de ligar o módulo à Arduino:

  1. Arduino como intermediaria proporcionando comunicação do PC com o módulo - TX do módulo com TX da Arduino e RX do módulo com RX da Arduino.
  2. Arduino enviando comandos para o módulo – TX do módulo no RX da Arduino e RX do módulo com TX da Arduino.
Assim para realizar testes e enviar imagens para o módulo temos de fazer as ligações no modo 1, conforme o diagrama:



TECLADO MUSICAL

Circuito.



 #include <SoftwareSerial.h>

SoftwareSerial mySerial(4, 5); // RX, TX

char code[2]={0,0};
int bytesread = 0;
int  val = 0;
String codigoObtido="";

void setup()
{


  // Inicia comunicação Serial
  mySerial.begin(9600);

mySerial.println("z");
delay(300);
//desenha retangulo

//desenha botão Dó
mySerial.print("bd 1 8 10 ");
mySerial.write(34);
mySerial.print("D");
mySerial.write(34);
mySerial.println();
//desenha botão Ré
delay(200);
mySerial.print("bd 2 26 10 ");
mySerial.write(34);
mySerial.print("R");
mySerial.write(34);
mySerial.println();
//desenha botão Mi
delay(200);
mySerial.print("bd 3 46 10 ");
mySerial.write(34);
mySerial.print("M");
mySerial.write(34);
mySerial.println();
//desenha botão Fá
delay(200);
mySerial.print("bd 4 66 10 ");
mySerial.write(34);
mySerial.print("F");
mySerial.write(34);
mySerial.println();
//desenha botão Sol
delay(200);
mySerial.print("bd 5 83 10 ");
mySerial.write(34);
mySerial.print("S");
mySerial.write(34);
mySerial.println();
//desenha botão Lá
delay(200);
mySerial.print("bd 6 100 10 ");
mySerial.write(34);
mySerial.print("L");
mySerial.write(34);
mySerial.println();
//desenha botão Si
delay(200);
mySerial.print("bd 7 118 10 ");
mySerial.write(34);
mySerial.print("S");
mySerial.write(34);
mySerial.println();
  

}

void loop() {
  if (mySerial.available()) {
   //Havendo qualquer entrada na porta serial desvia para a função LeBotoes
    leBotoes(); 
  }
  
  

}


void leBotoes(){
 // Recebe as string do Touch screen
  
     if( mySerial.available() > 0) {

        val = mySerial.read();
        if(val!=13){
          //le todos os caracteres recebidos na porta serial até receber o caracter 13
          code[bytesread]=val;
          codigoObtido+=code[bytesread];
          //conta bytes lidos e monta string
          bytesread++;

        }else{
          //ao terminar de obter caracteres, desvia para função de comparação de String Recebida
          comparaStringRecebida();
          //Limpa variáveis
          bytesread=0;
          codigoObtido="";
        }
     
  }

}



void comparaStringRecebida(){
        Serial.print("Valor recebido do display : ");   
        Serial.println(codigoObtido);
        //compara Strings e toca nota correspondente
        if(codigoObtido.equals("B1")){tone(8,261,50);}
        if(codigoObtido.equals("B2")){tone(8,293,50);}
        if(codigoObtido.equals("B3")){tone(8,329,50);}
        if(codigoObtido.equals("B4")){tone(8,349,50);}
        if(codigoObtido.equals("B5")){tone(8,392,50);}
        if(codigoObtido.equals("B6")){tone(8,440,50);}
        if(codigoObtido.equals("B7")){tone(8,493,50);}
}