28 de septiembre de 2014

LCD+Keypad Kit for Raspberry Pi with Java

Kit LCD + teclado para Raspberry Pi con Java


Este Kit es vendido por Adafruit el cual trae los siguientes componentes:
  • Resistencias:
    • 2 de 220 ohm al 5%
    • 1 de 330 ohm al 5%
  • Un potenciometro ajustable de 10K
  • 5 pulsadores de 5x6mm
  • Expansor de puerto i2c: MCP23017
  • Una tira de 36 pines de conector macho
  • PCB kit
  • Bumper (Adhesibo grueso).
  • Character LCD 16x2 RGB (Positivo o Negativo). 
  • Header de 2x16

Imagen de Adafruit



Componentes adicionales que no vienen en el kit:
  • Raspberry Pi
  • Cinta aislante negra
  • Una base para chip integrado de 28 pines. (opcional).

 Armado


 Según el manual de Adafruit (assembly), se debe hacer en este orden:
  • Soldar la resistencia de 330 ohm en la etiqueta que dice GRN.
  • Soldar las otras dos resistencias.
  • Soldar los cinco pulsadores.
  • Soldar el potenciometro
  • Soldar el MCP23017, pero aquí un pequeño cambio, soldar la base de 28 pines, se recomienda esto para cuando no se sabe soldar muy bien y el exceso de calor no dañe el chip i2c, y también sirve cuando se requiere reutilizar MCP23017.
  • Soldar el "Header 2x16"
  • Soldar la tira de 18 pines al Display-LCD
  • Soldar (unir) el Diaply con el PCD-Kit.
  • Poner doble capa de cinta aislante negra en la pare de las resistencias, debido que al ponerlo sobre el Raspberry Pi  Model B+, los nuevos puertos USB hacen contantacto con las terminaciones de la resistencias.

El resultado es:





 Al conectar el LCD al Raspberry Pi tenga en cuenta la proteccion con la cinta adesiva.

Imagen de Adafruit

Para conectarlo se puede emsamblar directamente sobre el Raspberry Pi, o solo realizar las siguientes conexiones:
  • Conectar GND a GND del Kit Plate
  • Conectar 5V a 5V del Kit Plate
  • Conectar SDA a SDA del Kit Plate
  • Conectar SCL a SCL del Kit Plate
El Kit Plate tiene los mismos pin header de 26 pines del Raspberry PI Model A o B.



Controlador (Java)


El software esta disponible para descarga en:

git clone https://github.com/andresvelezperez/raspberry-pi.git

 Para saber como instalar el ambiente de desarrollo y otros usos ver:
Se necesita tener habilitado I2C:
Para usar el ejemplo en Python ver Adafruit: Usage - Character LCD+Keypad for Raspberry Pi

Uso

Cuando se ha descargado el código, se procede a abrir el proyecto con Netbeans, procedemos a abrir la clase rpi.main.Main, en esta clase observaremos los ejemplos que podemos correr, por defecto esta habilitado un ejemplo base, que para este caso NO Sirve, asi que cuando usemos el LCD+Keypad kit solo podemos usar el ejemplo que esta en la clase char_lcd_plate.java


//exampleCharLCD = new char_lcd();
//exampleCharLCD = new char_lcd_rgb();
//exampleCharLCD = new char_lcd_rgb_pwm();
//exampleCharLCD = new char_lcd_rgb_mcp();
exampleCharLCD = new char_lcd_plate();

Y se pueden usar todos lo metodos disponibles para "Character LCD con Raspberri Pi" menos las opciones del PWM, ya que el control del RGB se haciendo por el chip I2C MCP23017 y este no tiene PWM. La clase char_lcd_plate.java que tiene implementado los eventos de los pulsadores es basica: La configuracion, recibe el codigo del boton (pin del MCP23017), el nombre y la configuracion de color, el color usado en el ejemplo para cambiar el color cuando presionan un boton.

//Configuracion de los botones
buttons = new Button[]{
          new Button(SELECT, "Select", new int[]{1,1,1}),
          new Button(LEFT, "Left", new int[]{1,0,0}),
          new Button(UP, "Up", new int[]{0,0,1}),
          new Button(DOWN, "Down", new int[]{0,1,0}),
          new Button(RIGHT, "Right", new int[]{1,0,1})
        };

Ciclo para detectar que boton fue presionado.
//# Loop through each button and check if it is pressed.
        while(lcdPlate){
            for(Button button : this.buttons){
                if(lcd.is_pressed(button.getCode())){
                    try {
                        //# Button is pressed, change the message and backlight.
                        lcd.clear();
                        lcd.message(button.getName());
                        lcd.set_color(button.getRgb()[0],button.getRgb()[1],button.getRgb()[2]);
                    } catch (IOException ex) {
                        Logger.getLogger(char_lcd_plate.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
            try {
                Thread.sleep(250);
            } catch (InterruptedException ex) {
                Logger.getLogger(char_lcd_plate.class.getName()).log(Level.SEVERE, null, ex);
            }
        }


Cuando  este ejecutando el ejemplo no olvide ajustar el potenciometro (contraste) para visualizar los caracteres.


Nota: Esta es una implementación en Java ME Embedded del código que esta disponible por parte de Adfruit, el código original esta escrito en Python. Para ver el tutorial y código en Python dirigirse a la pagina de Adafruit.



No hay comentarios:

Publicar un comentario