Esoj
Por si acaso, aquí te dejo una función que hice hace un tiempo, que imprime un texto en letras grandes y mayúsculas.
No está todo el abecedario, ni hay minúsculas, pero hay bastantes y todos los números, y no es complicado añadir las letras que faltan, si las necesitas.
Cada carácter tiene 4 columnas y 2 filas. Si necesitas adaptarlo a otros, tampoco es complicado.
void bigLetter()
{
//Define los segmentos grandes que forman las letras
byte LT[8]; byte UB[8]; byte RT[8]; byte LL[8];
byte LB[8]; byte LR[8]; byte UMB[8]; byte LMB[8];
LT[0] = 7; LT[1] = 15; LT[2] = 31; LT[3] = 31; LT[4] = 31; LT[5] = 31; LT[6] = 31; LT[7] = 31; UB[0] = 31; UB[1] = 31; UB[2] = 31; UB[3] = 0; UB[4] = 0; UB[5] = 0; UB[6] = 0; UB[7] = 0; RT[0] = 28; RT[1] = 30; RT[2] = 31; RT[3] = 31; RT[4] = 31; RT[5] = 31; RT[6] = 31; RT[7] = 31;
LL[0] = 31; LL[1] = 31; LL[2] = 31; LL[3] = 31; LL[4] = 31; LL[5] = 31; LL[6] = 31; LL[7] = 31; LB[0] = 0; LB[1] = 0; LB[2] = 0; LB[3] = 0; LB[4] = 0; LB[5] = 31; LB[6] = 31; LB[7] = 31; LR[0] = 31; LR[1] = 31; LR[2] = 31; LR[3] = 31; LR[4] = 31; LR[5] = 31; LR[6] = 30; LR[7] = 28;
UMB[0] = 31; UMB[1] = 31; UMB[2] = 0; UMB[3] = 0; UMB[4] = 0; UMB[5] = 0; UMB[6] = 31; UMB[7] = 31; LMB[0] = 31; LMB[1] = 0; LMB[2] = 0; LMB[3] = 0; LMB[4] = 0; LMB[5] = 31; LMB[6] = 31; LMB[7] = 31;
lcd.createChar(8, LT);
lcd.createChar(1, UB);
lcd.createChar(2, RT);
lcd.createChar(3, LL);
lcd.createChar(4, LB);
lcd.createChar(5, LR);
lcd.createChar(6, UMB);
lcd.createChar(7, LMB);
}
void printLetter(char letter, byte *x)
{
//Devuelve la posición del siguiente carácter
switch (letter)
{
case char('A') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\006\002"));
lcd.setCursor(*x, 1);
lcd.print(F("\377\376\377"));
*x += 4;
break;
case char('B') :
lcd.setCursor(*x, 0);
lcd.print(F("\377\006\005"));
lcd.setCursor(*x, 1);
lcd.print(F("\377\007\002"));
*x += 4;
break;
case char('C') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\001\001"));
lcd.setCursor(*x, 1);
lcd.print(F("\003\004\004"));
*x += 4;
break;
case char('D') :
lcd.setCursor(*x, 0);
lcd.print(F("\377\001\002"));
lcd.setCursor(*x, 1);
lcd.print(F("\377\004\005"));
*x += 4;
break;
case char('E') :
lcd.setCursor(*x, 0);
lcd.print(F("\377\006\006"));
lcd.setCursor(*x, 1);
lcd.print(F("\377\007\007"));
*x += 4;
break;
case char('F') :
lcd.setCursor(*x, 0);
lcd.print(F("\377\006\006"));
lcd.setCursor(*x, 1);
lcd.print(F("\377 "));
*x += 4;
break;
case char('G') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\001\001"));
lcd.setCursor(*x, 1);
lcd.print(F("\003\004\002"));
*x += 4;
break;
case char('H') :
lcd.setCursor(*x, 0);
lcd.print(F("\377\004\377"));
lcd.setCursor(*x, 1);
lcd.print(F("\377\376\377"));
*x += 4;
break;
case char('I') :
lcd.setCursor(*x, 0);
lcd.print(F("\001\377\001"));
lcd.setCursor(*x, 1);
lcd.print(F("\004\377\004"));
*x += 4;
break;
case char('J') :
lcd.setCursor(*x, 0);
lcd.print(F(" \377"));
lcd.setCursor(*x, 1);
lcd.print(F("\004\004\005"));
*x += 4;
break;
case char('K') :
lcd.setCursor(*x, 0);
lcd.print(F("\377\004\005"));
lcd.setCursor(*x, 1);
lcd.print(F("\377\376\002"));
*x += 4;
break;
case char('L') :
lcd.setCursor(*x, 0);
lcd.print(F("\377 "));
lcd.setCursor(*x, 1);
lcd.print(F("\377\004\004"));
*x += 4;
break;
case char('M') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\003\005\002"));
lcd.setCursor(*x, 1);
lcd.print(F("\377\376\376\377"));
*x += 5;
break;
case char('N') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\002\376\377"));
lcd.setCursor(*x, 1);
lcd.print(F("\377\376\003\005"));
*x += 5;
break;
case char('O') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\001\002"));
lcd.setCursor(*x, 1);
lcd.print(F("\003\004\005"));
*x += 4;
break;
case char('P') :
lcd.setCursor(*x, 0);
lcd.print(F("\377\006\002"));
lcd.setCursor(*x, 1);
lcd.print(F("\377 "));
*x += 4; //corre 4 espacios
break;
case char('Q') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\001\002 "));
lcd.setCursor(*x, 1);
lcd.print(F("\003\004\377\004"));
*x += 5; //corre 5 espacios
break;
case char('R') :
lcd.setCursor(*x, 0);
lcd.print(F("\377\006\002"));
lcd.setCursor(*x, 1);
lcd.print(F("\377\376\002"));
*x += 4; //corre 4 espacios
break;
case char('S') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\006\006"));
lcd.setCursor(*x, 1);
lcd.print(F("\007\007\005"));
*x += 4;
break;
case char('T') :
lcd.setCursor(*x, 0);
lcd.print(F("\001\377\001"));
lcd.setCursor(*x, 1);
lcd.print(F("\376\377 "));
*x += 4;
break;
case char('U') :
lcd.setCursor(*x, 0);
lcd.print(F("\377\376\377"));
lcd.setCursor(*x, 1);
lcd.print(F("\003\004\005"));
*x += 5;
break;
case char('V') :
lcd.setCursor(*x, 0);
lcd.print(F("\003\376\376\005"));
lcd.setCursor(*x, 1);
lcd.print(F(" \002\010 "));
*x += 5;
break;
case char ('W'):
lcd.setCursor(*x, 0);
lcd.print(F("\377\376\376\377"));
lcd.setCursor(*x, 1);
lcd.print(F("\003\010\002\005"));
*x += 5;
break;
case char('X') :
lcd.setCursor(*x, 0);
lcd.print(F("\003\004\005"));
lcd.setCursor(*x, 1);
lcd.print(F("\010\376\002"));
*x += 4;
break;
case char('Y') :
lcd.setCursor(*x, 0);
lcd.print(F("\003\004\005"));
lcd.setCursor(*x, 1);
lcd.print(F(" \377 "));
*x += 4;
break;
case char('Z') :
lcd.setCursor(*x, 0);
lcd.print(F("\001\006\005"));
lcd.setCursor(*x, 1);
lcd.print(F("\010\007\004"));
*x += 4;
break;
//*************NUMEROS***************
case char('0') : //IGUAL QUE LA O
lcd.setCursor(*x, 0);
lcd.print(F("\010\001\002"));
lcd.setCursor(*x, 1);
lcd.print(F("\003\004\05"));
*x += 4;
break;
case char('1') :
lcd.setCursor(*x, 0);
lcd.print(F("\001\002 "));
lcd.setCursor(*x, 1);
lcd.print(F(" \377 "));
*x += 4;
break;
case char('2') :
lcd.setCursor(*x, 0);
lcd.print(F("\006\006\002"));
lcd.setCursor(*x, 1);
lcd.print(F("\003\007\007"));
*x += 4;
break;
case char('3') :
lcd.setCursor(*x, 0);
lcd.print(F("\006\006\002"));
lcd.setCursor(*x, 1);
lcd.print(F("\007\007\005"));
*x += 4;
break;
case char('4') :
lcd.setCursor(*x, 0);
lcd.print(F("\003\004\002"));
lcd.setCursor(*x, 1);
lcd.print(F(" \377"));
*x += 4;
break;
case char('5') :
lcd.setCursor(*x, 0);
lcd.print(F("\377\006\006"));
lcd.setCursor(*x, 1);
lcd.print(F("\007\007\005"));
*x += 4;
break;
case char('6') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\006\006"));
lcd.setCursor(*x, 1);
lcd.print(F("\003\007\005"));
*x += 4;
break;
case char('7') :
lcd.setCursor(*x, 0);
lcd.print(F("\001\001\002"));
lcd.setCursor(*x, 1);
lcd.print(F(" \010 "));
*x += 4;
break;
case char('8') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\006\002"));
lcd.setCursor(*x, 1);
lcd.print(F("\003\007\005"));
*x += 4;
break;
case char('9') :
lcd.setCursor(*x, 0);
lcd.print(F("\010\006\002"));
lcd.setCursor(*x, 1);
lcd.print(F(" \377"));
*x += 4;
break;
default:
break;
}
}
void bigText(String texto, byte col) {
//analiza el texto
bigLetter(); //Crea el set de letras grandes
//lcd.clear();
//lcd.home();
for (byte n = 0; n < texto.length(); n++)
{
printLetter(texto[n], &col);
}
}
Llamas con
bigText(F("HOLA"), 0);// HOLA es un ejemplo
Y te imprime un HOLA grande desde la columna 0.
Esto es para un LCD de 16x2, pero no creo que sea un problema adaptarlo al otro. Y ten en cuenta que al ser más grande, y en mi caso, sólo entran 4 caracteres en el LCD.
Espero que te sirva.
Saludos