Usando un LCD nokia 5100 con el Stellaris Launchpad

Ha pasado mucho tiempo apagado el pequeño Stellaris Launchpad, y por eso, aprovechando que tuve un poco de tiempo libre el fin de semana, decidí jugar un poco con él.

En esta ocasión, he conectado un LCD Nokia 5100 que tenía por ahí, y he armado un pequeño voltímetro digital.

Primero, hay que descargar la librería lcd_5100 e instalarla dentro de nuestra carpeta de Energia, en la ruta energia\hardware\lm4f\libraries. Esto debemos hacerlo antes de abrir Energia, para que al iniciar la aplicación, se instale la librería para poder ser usada por nuestro Launchpad

Para la conexión del Launchpad con el LCD, vamos a usar los siguientes pines:

  • Backlight: PA6
  • SCLK: PA3
  • MOSI: PA5
  • DC: PA2
  • RST: PB5
  • SCE: PA7

y el código fuente para el Stellaris es el siguiente:

// ejemplo para uso del display nokia 5100
/*
Pines usados en el display

led:   PA6
SCLK:  PA3
MOSI:  PA5
DC:    PA2
RST:   PB5
SCE:   PA7

*/

#include "Energia.h"
#include 
#include "LCD_5110.h"
#include 

// Variables
LCD_5110 myScreen;
boolean	backlight = false;
uint8_t k = 0;

// Add setup code
void setup() {
    myScreen.begin();

    myScreen.setBacklight(backlight);
    myScreen.setFont(0);
    myScreen.text(0, 0, "Launchpad ADC.");
    myScreen.setFont(0);
    myScreen.text(0, 1, "--------------");

    delay(1000);
    myScreen.text(0, 5, "Backlight off");
}

// Add loop code
void loop() {
    int analog=analogRead(A0);
    double valorReal = (analog-1093)/318.79;
    String valor=floatToString(valorReal, 3);
    if (myScreen.getButton()) {
        backlight = (backlight==0);
        myScreen.setFont(0);
        myScreen.text(0, 5, backlight ? "Backlight on " : "Backlight off");
        myScreen.setBacklight(backlight);
    }

    myScreen.setFont(1);

    myScreen.text(0, 2, valor);
    myScreen.setFont(0);
    for (uint8_t i=0; i<14; i++) myScreen.text(i, 4, (i==k) ? "*" : " ");
    k++;
    k %= 14;

    delay(100);
}

String floatToString(double number, uint8_t digits) 
{ 
  String resultString = "";
  if (number < 0.0)
  {
     resultString += "-";
     number = -number;
  }
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)     rounding /= 10.0;      number += rounding;   unsigned long int_part = (unsigned long)number;   double remainder = number - (double)int_part;   resultString += int_part;   if (digits > 0)
    resultString += "."; 

  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    resultString += toPrint;
    remainder -= toPrint; 
  } 
  return resultString;
}

El ejemplo es bastante sencillo. Lo único adicional que he tomado de un ejemplo en C, es la conversión de Double a String, para mostrar el valor convertido desde el ADC en el LCD.

Y dado que una imágen vale mas que 1000 palabras, les dejo la prueba del funcionamiento.

IMG_20130914_130648

Si desean visualizar el código fuente en Codebender, pueden utilizar este enlace