Problemas con pantalla LCD Nokia 3310/5110

Hola a todos,
Me he comprado una pantallita LCD Nokia 3310 y al estoy aprenciendo a utilizarla, pero soy incapaz de que imprima una variable, ya que me da error en la compilación, dice algo así como:

exit status 1
invalid conversion from ‘long int’ to ‘char*’ [-fpermissive]

el sketch de prueba que estoy usando es lo que sigue (calcula un número aleatorio y lo muestra en pantalla):

#include <NokiaLCD.h>

NokiaLCD NokiaLCD(3, 4, 5, 6, 7); // (CLK, MOSI, DC, RST, CE)

int randNumber;

void setup() {
  NokiaLCD.init(); // Init screen.
  NokiaLCD.clear(); // Clear screen.
}

void loop() {

  randNumber = random(100);

  NokiaLCD.setCursor(10, 2);
  NokiaLCD.print(randNumber);
  delay(500);
  NokiaLCD.clear();
  delay(300);

}

La librería que estoy usando (NokiaLCD) la he bajado de internet y cuando lo que hay que mostrar es:

 NokiaLCD.print("Hola Mundo!!");

en este caso funciona sin problema.

He intentado usar un long en lugar de un int, pasar el número a string, pero me sigue dando error.

Si alguno tiene experiencia con las pantallas Nokia y me sabe como mostrar variables en pantalla me vendrían bien sus comentarios.

Saludos
Javier

Puedes probar a hacerle un casting a int.

  NokiaLCD.print( (int) randNumber);

O también puedes probar la biblioteca de Adafruit

1 me gusta

Efectiviwonder, el problema puede ser la salida de rand(), que lo mismo está sacando un long o un float (lo cual sería curioso).

¿Puede ser que la función solo te admita chars y no números ? Intenta convertir el número a char.

1 me gusta

La biblioteca de Adafruit si permite números, pues la usaba yo con el sensor de humedad. La de NokiaLCD ya no sé.

No se si se puede hacer un cast a char y que es lo que resultaría. Pero la pinta que tiene es que solo admita cadenas, porque es lo que le funciona. Si estuviera sobrecargado, admitiría todo tipo de números.

Si tiene solo sobrecargado el int no va a dejar un long int ni un double… Solo hace castings directos a «mayores». Si tuviese sobrecargado el long y le pasas un int sí funciona, pero no al revés.

1 me gusta

¿No hay ninguna documentación que podamos consultar de NokiaLCD?

Aunque lo mejor sería usar la librería de Adafruit como dice @MiguelAngelLV, nunca está de mal mirar la de Nokia a ver que se cuenta. La he buscado sin éxito, por cierto

Gracias por vuestros comentarios,
He intentado lo del:

NokiaLCD.print( (int) randNumber);

pero no funciona sale como error:

invalid conversion from 'int' to 'char*' [-fpermissive]

convertir el número en char: lo que había probado era a pasarlo por un string y tampoco funciona, Cuando empezais con las “sobrecargas” y los “castings” ya me pierdo…

Documentación sobre la librería NokiaLCD tampoco he encontrado.

Probaré con la librería de Adafruit que indica @MiguelAngelLV, a ver si lo hago funcionar. El ejemplo que trae la librería sí funciona bien, aunque parece bastante complejo.

Gracias.

-Le pones un char* y te funciona, le pones un int y no te funciona y además te dice que no puede pasarlo a char*
Ayudale un poco en esa conversión, ya sabes seguro que tienes que meterle char* .

¿Y un int.toString…?

No confundáis «casting» con «conversión». En un casting básicamente intepretáis los mismos datos de otra forma. Por ejemplo:

char letra = '1';
int numero = (int) letra;

El valor de número no será 1, sino 49.

Afortunadamente la clase String de Arduino está bastante bien y permite:

String texto = String(numero);

Podéis ver unos ejemplos aquí

1 me gusta

Hola,
He puesto lo del char* directamente así:
NokiaLCD.print( (char*) randNumber);

Y compila el shetck, no da error, como comentaba @josemar1992. El problema es que cuando lo cargo en el arduino lo que aparece en pantalla no tiene nada que ver con un número, son caracteres aleatorios sin ningún significado. Supongo que estará relacionado con lo que comentaba @MiguelAngelLV sobre las diferencias de casting y conversión.

Lo del “int.toString” tampoco funciona ya que esta librería parece que solo funcionas con char, he mirado en algunas páginas como pasar in int a char y comentan de usar arrays (los cuales no se manejar), así que al final he probado con la otra librería y he conseguido que me funcion.
Dejo el pequeño shetch de prueba con la libreria de Adafruit por si a alguin le interesa:

//#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);

long randNumber;

void setup()
{

  Serial.begin(9600);
  display.begin();

  display.setContrast(50);
  display.clearDisplay();
}

void loop() {

  display.display();

  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(10, 20);

  randNumber = random(100);

  display.print(randNumber);
  delay(400);

}

La libreria SPI dicen que es obligatoira pero a mí me ha funcionado sin ella, supongo que será por la elección de los pines usado. Las otras dos librerías si son necesarias para que funcione.

Creo que hay otra librería por ahí para las pantallas Nokias, si consigo probarla lo colgaré por si hay interes.
Saludos

Seguramente al incluir las otras bibliotecas estas han añadido las de SPI.

Me alegro que te funcione.

Adafruit salvando la situación

He encontrado la otra librería que os comentaba más arriba para controloar la pantalla Nokia, se llama LCD5110_Basic y el mismo autor tiene otras librerías para arduino. Además en la misma página tenéis un manual en pdf para sobre la librería. Yo la he probado con los ejemplos que trae y funciona bien, me muestra algún comentario en la parte de abajo del Arduino IDE al cargarla, pero funciona. Aquí el enlace para el que le pueda interesar:

LCD5110_Basic

También he encontrado otra librería pero esta no trae ejemplo ni manual. el video que muestran en la web sobre la misma se ve bastante bien. El enlac[e:

Libreria pantalla gráfica LCD Nokia 3310

Espero que os sea útil.