2012-04-11 30 views
10

Estoy leyendo datos de 9 sensores diferentes para mi robot y necesito mostrarlos de manera constante, en la misma ventana para poder comparar los valores y ver si alguna de las lecturas está desactivada.¿Borrando la pantalla del terminal?

El problema que tengo con Serial.print y lcd.print es que los valores se mueven constantemente y realmente no puedo mirarlos mientras muevo el robot.

Estaba pensando en llamar a algo así como Serial.clear() antes de mostrar cualquier otra cosa y eso simplemente mantendría las cosas estables y en un solo lugar, cambiando solo los valores.

Por lo que he encontrado hasta ahora, Serial.print (17, BYTE) por ejemplo ya no es compatible (Llamar a la tecla ESC).

Entonces ... para aquellos con un poco más de experiencia Arduino ... ¿cuál es la forma correcta de hacerlo?

Respuesta

25

El monitor serie Arduino no es un terminal regular, por lo que no es posible borrar la pantalla con los comandos de terminal estándar. Sugiero usar un emulador de terminal real, como Putty.

El comando para limpiar una pantalla de terminal es ESC [2J

Para llevar a cabo en el código de Arduino:

Serial.write(27);  // ESC command 
    Serial.print("[2J"); // clear screen command 
    Serial.write(27); 
    Serial.print("[H");  // cursor to home command 

Fuente:
http://www.instructables.com/id/A-Wirelessly-Controlled-Arduino-Powered-Message-B/step6/Useful-Code-Explained-Clearing-a-Serial-Terminal/

1

CES es el carácter _ _7, no _ _7. También puede probar el decimal 12 (también conocido como FF, alimentación de formulario).

Tenga en cuenta que todos estos caracteres especiales no son manejados por el Arduino sino por el programa en el lado de recepción. De modo que un terminal Unix estándar (xterm, gnome-terminal, kterm, ...) maneja un conjunto diferente de secuencias de control y luego dice un programa de terminal de Windows como HTerm.

Por lo tanto, debe especificar qué programa está utilizando exactamente para su visualización. Después de eso, es posible decirle qué caracteres de control y secuencias de control se pueden usar.

+0

estoy usando el más básico, Arduino IDE estándar (ni siquiera Eclipse C++ todavía) y su terminal de serie incluido en una máquina 7 de 64 bits de Windows: D – Eugen

+0

intente enviar Formfeed ' 0xC' y use masilla como terminal serial. – Sibster

1

No es posible borrar la ventana del Supervisor serie según los datos seriales entrantes.

Puedo pensar en un par de opciones, la más simple (y más complicada) es usar println() con una cadena de ancho fijo que ha generado que contiene los datos de su sensor.

La casilla de verificación Arduino IDE's Serial Monitor Autoscroll significa que si envía persistentemente la cadena de ancho fijo (con un retraso de 500ms quizás) esto dará la impresión de que se está actualizando una vez que llega al final y comienza a desplazarse. También puede reducir la altura de la ventana para que parezca que solo tiene una línea.

Para lograr una cadena de ancho fijo que sea adecuada para la serie println(), necesitará funciones para convertir los valores de sus sensores en cadenas, así como para rellenarlas/ajustarlas a un tamaño persistente. A continuación, concatenar los valores juntos (incluidos sus separadores si se hace que los datos más fácil de leer)

Una salida de algo parecido a esto es lo que estoy haciendo alusión a:

| 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7 | 1.8 | 

A fin de cuentas, esto no es' Es una gran solución, pero obtendría un resultado.

Una idea mucho más inteligente es construir otro programa fuera de Arduino y es IDE que escucha el puerto de comunicación para los valores del sensor enviados desde el Arduino.Su programa Arduino deberá enviar un mensaje que su programa externo pueda interpretar inequívocamente, algo como 1=0.5; donde 1 = ID del sensor y 0.5 = valor del sensor. El programa externo mantendría estos valores (1 para cada sensor). El programa externo a continuación, puede mostrar esta información de la manera que desea, una buena salida de la consola sería relativamente fácil de lograr :-)

C# tiene .NET 's serialport clase que es un placer de usar. (la mayoría de las veces!)

Python tiene un módulo llamado pyserial, que también es muy fácil.

Cualquiera de los dos idiomas le dará un mayor control sobre la salida de la consola, si decide continuar de esta manera.

+0

WWW ... ¡OW! No creí que limpiar la pantalla significaría mucho trabajo. Muchas gracias amigo, intentaré eso mañana y me pondré en contacto con usted si encuentro algún problema. – Eugen

7

No hay manera de borrar la pantalla, pero una forma realmente fácil de falsificarlo puede ser imprimir tantos Serial.println(); como sea necesario para mantener todos los datos antiguos fuera de la pantalla.

3

Usted podría intentar:

Serial.write(13); 

que proporcionará un retorno de carro, volviendo al comienzo de la línea cada iteración - que debe hacer lo que usted está persiguiendo? (Especialmente si todo es ancho fijo).

2

encontrado una manera estúpida sencillo de solucionar este problema . ¡Cambie el tamaño de la ventana de la terminal a solo 1 línea de alto y será mucho más fácil de leer!

+1

No es posible lol. El tamaño mínimo de la ventana es de aproximadamente 10 líneas para mí (Windows). – C4u

1

Si cambia la velocidad en baudios, por ejemplo, de ida y vuelta que borra la ventana de monitor de serie en la versión 1.5.3 de Arduino IDE para el desarrollo de Intel Galileo

-1
/* 
As close as I can get to Clear Screen 

*/ 


void setup() { 
// put your setup code here, to run once: 
Serial.begin(115200); 

} 

void loop() { 

Serial.println("This is Line ZERO "); 

// put your main code here, to run repeatedly: 

for (int i = 1; i < 37; i++) 
{ 

// Check and print Line 
    if (i == 15) 
    { 
    Serial.println("Line 15"); 
    } 

    else 
    Serial.println(i); //Prints line numbers Delete i for blank line 
    } 

    delay(5000); 

    } 
5

he encontrado que ASCII 12 hacer una alimentación Formulario , esa es una página nueva. aquí hay una definición de wikipedia

"La alimentación de formulario es un carácter de control de ASCII.Obliga a la impresora para expulsar la página actual y continuar con la impresión en la parte superior de otro "

El código es

Serial.write(12); 

Arduino Terminar no admite el carácter pero Putty una luz abierta cliente telnet fuente puede hacerlo

Un ejemplo del código

void setup() { 
    Serial.begin(9600);//Initializase the serial transmiter speed 

} 

void loop() { 
    //Code tested with Putty terminal 

    Serial.write(12);//ASCII for a Form feed 
    Serial.println("This is the title of a new page");// your code 

    delay(500);//delay for visual 
    } 
+0

Los terminales no son impresoras. Sucede que funciona con masilla, pero consulte [Preguntas frecuentes xterm] (http://invisible-island.net/xterm/xterm.faq.html#xterm_form_feed). –

1

Otra patada a la lata:

void setup(){  /*123456789 123456789 123456789 123456789 123*/ 
    String newRow="\n|________________________________________"; 
    String scrSiz="\n|\n|\n|\n|\n|\n|\n|\n|\n|\t"; 
    Serial.begin(115200); 
     // this baudrate should not have flicker but it does as seen when 
     // the persistence of vision threshold is insufficiently exceeded 
     // 115200 baud should display ~10000 cps or a char every 0.1 msec 
     // each 'for' loop iteration 'should' print 65 chars. in < 7 msec 
     // Serial.print() artifact inefficiencies are the flicker culprit 
     // unfortunately '\r' does not render in the IDE's Serial Monitor 

    Serial.print(scrSiz+"\n|_____ size screen vertically to fit _____" ); 
    for(int i=0;i<30;i++){ 
    delay(1000); 
    Serial.print((String)scrSiz +i +"\t" + (10*i) +newRow);} 
} 
void loop(){} 
0

Se podía hacer:

Serial.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 

o si desea:

for (int i=0; i<100; i++) { 
    Serial.print("\n"); 
} 
0

Hice este simple function para lograrlo:

void clearscreen() { 
    for(int i=0;i<10;i++) { 
     Serial.println(\n\n\n\n\n\n\n\n\n\n\n\n\n); 
    } 
} 

Funciona bien para mí en el default terminal

Cuestiones relacionadas