Pages: [1]   Go Down
Author Topic: caracteres no ascii en serLCD  (Read 2009 times)
0 Members and 1 Guest are viewing this topic.
Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
he conectado un serLCD al arduino, y usando la librería SoftwareSerial este código funciona bien:
Code:
#include <SoftwareSerial.h>
SoftwareSerial LCD = SoftwareSerial(0, 2);

LCD.print("Hello world!");

Pero cuando intento mostrar el símbolo de grado de la temperatura,

Code:
int n = 22;
char txt[33];

sprintf(txt, "Tenp: %dºC", n);
LCD.print(txt);

el símbolo de grado (el cero pequeño) ser muestra como basura. Pienso que la razón es que no es un carácter ascii, es el carácter 186, y no puede representarse por un signed char.

He probado a usar sin signo haciendo cast,

Code:
int n = 22;
unsigned char txt[33];

sprintf(txt, (unsigned char)("Tenp: %dºC)", n);
LCD.print(txt);

error: cast from 'const char*' to 'unsigned char' loses precision


Sabéis cómo se muestran caracteres ansi mayores de 127 en serLCD?
Gracias.



Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 52
Enginyeria Geek
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Desconozco como funciona el LCD conectado al puerto serie...
Para un LC conectado con 4 bits o 8 bits la forma de imprimir el caracter "º" es:

lcd.print((char)223);

La tabla ASCII no corresponde a la tabla de caracteres del display así que se debe llamar directamente a la posición ocupada por el símbolo.

Salut!
« Last Edit: December 31, 2010, 03:01:30 am by piniflopa » Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias piniflopa.
Estoy pensando que me han metido gato por liebre. Debe de ser el problema de siempre, el dificilísimo problema que tiene los americanos del norte de mostrar la 'ñ' en una pantalla!

Si envío al monitor serie el siguiente código
Code:
   Serial.print("ñ ");    //  ansi: ñ = 241
    Serial.print(byte(241));
la primera línea no funciona, pero sí funciona bien la segunda.

Pero cuando pido lo mismo a serLCD (serLCD v2.5 16x2 sparkfun)
Code:
   LCD.print("ñ ");
    LCD.print(byte(241));
no funciona de ninguna forma.
Por qué no avisarán de esos detalles.



Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 52
Enginyeria Geek
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hombre... avisar, si que avisan.

Dale un vistazo a esta pàgina (por ejempleo): http://www.electronic-engineering.ch/microchip/datasheets/lcd/lcd_data_sheets.html#rom_code_a00

Aquí se encuentra el mapa de representación de caracteres para el estandar del chip  HD44780.
Como veras en la tabla, tampoco 'los americanos del norte' tienen toda la culpa de todo. El estandard que creó HITACHI sigue estando en vigencia. Actualmente la memória de un display podria tener una tabla de carácteres mucho mas extensa, pero se sigue el mismo estandard.

De todas maneras estos displays pueden almacenar caracteres especiales creados por el usuario y buscando un poco es facil encontrar como implementar estos carácteres con Arduino.

Un saludo.
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 711
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias, piniflopa
Miraré el estándar. Pero seguiré echando la culpa a los mencionados anglófonos, porque ellos inventaron los códigos ascii, pensando sólo en el inglés.
Logged

Pages: [1]   Go Up
Jump to: