Para usar mi GLCD + Arduino como una pantalla para LCD4Linux , usando LCD4Linux SimpleLCD Driver que envía un subconjunto de códigos VT100 (CR y LF).
He logrado aislar los códigos VT100 del texto regular utilizando el siguiente código:
// include the library code:
#include <glcd.h>
// include the Fonts
#include <fonts/allFonts.h>
void setup() {
// Initialize the GLCD
GLCD.Init();
// Select the font for the default text area
GLCD.SelectFont(System5x7);
GLCD.ClearScreen();
GLCD.println("Please wait: "); // output using Print class
GLCD.println(" System initializing"); // output using Print class
// could also use gText string output routine
// GLCD.Puts("Listening...\n");
Serial.begin(9600);
}
void loop()
{
char c;
// when characters arrive over the serial port...
if (Serial.available())
{
// read character from serial library buffer
c = Serial.read();
switch(c)
{
case 27:
if(handleVT100Code())
{
GLCD.ClearScreen();
}
break;
default:
// display character on glcd
GLCD.write(c); // use Print class for output
break;
}
}
}
boolean handleVT100Code()
{
char c;
String vt100Code;
while(Serial.available())
{
c = Serial.read();
vt100Code.concat(c);
if(c == 'H')
{
break;
}
}
if(vt100Code != "")
{
return(true);
}
}
Por ahora, solo debería limpiar la pantalla cuando se detecta un código VT100 (desagradable, pero para probar las cosas). Sin embargo, lo que sucede es que los códigos VT100 se imprimen de todos modos, probablemente porque GLCD.ClearScreen()
consume demasiado tiempo de CPU (?). Cuando no uso ClearScreen
, pero simple println
la variable vt100Code
(que devuelvo desde handleVT100Code()
) el código se imprime (aunque con algunos falsos positivos).
¿Qué tendría que hacer para que mi programa comprenda estos dos códigos VT100 (retorno de carro y avance de línea)? He hecho algunas búsquedas para una implementación inmediata de un simple terminal VT100, pero parece que no hay ninguna. Si hay alguna forma más fácil de usar el GLCD con LCD4Linux, no dude en decírmelo.