2012-04-11 3 views
10

Ich lese Daten von 9 verschiedenen Sensoren für meinen Roboter und ich muss sie alle gleichmäßig im selben Fenster anzeigen, damit ich die Werte vergleichen und sehen kann, ob einer der Messwerte aus ist.Löschen des Terminalbildschirms?

Das Problem, das ich bin mit sowohl Serial.print und lcd.print mit, dass die Werte ständig bewegen und ich kann nicht wirklich einen guten Blick auf sie haben, während der Roboter bewegt.

Ich dachte, etwas wie Serial.clear() zu nennen, bevor irgendetwas anderes angezeigt wird, und das würde nur die Dinge stabil und an einem Ort halten, nur die Werte ändern.

Von dem, was ich bisher gefunden habe, wird Serial.print (17, BYTE) zum Beispiel nicht mehr unterstützt (Aufruf der ESC-Taste).

Also ... für diejenigen mit ein bisschen mehr Arduino Erfahrung ... Was ist der richtige Weg, dies zu tun?

Antwort

25

Der serielle Arduino-Monitor ist kein reguläres Terminal, daher ist es nicht möglich, den Bildschirm mit Standard-Terminalbefehlen zu löschen. Ich schlage vor, einen tatsächlichen Terminal-Emulator zu verwenden, wie Putty.

Der Befehl einen Terminal-Bildschirm zum Löschen ist ESC [2J

Um in Arduino Code auszuführen:

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

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

1

ESC zu lernen, ist der Charakter _ _7, nicht _ _7. Sie können auch versuchen, Dezimal 12 (aka. FF, Form Feed).

Beachten Sie, dass alle diese Sonderzeichen nicht vom Arduino, sondern vom Programm auf der Empfängerseite behandelt werden. Ein Standard-Unix-Terminal (xterm, gnome-terminal, kterm, ...) behandelt also einen anderen Satz von Steuersequenzen und sagt dann ein Windows-Terminalprogramm wie HTerm.

Daher sollten Sie angeben, welches Programm Sie genau für die Anzeige verwenden. Danach ist es möglich, Ihnen zu sagen, welche Steuerzeichen und Kontrollsequenzen verwendbar sind.

+0

ich den grundlegendsten, Standard Arduino IDE bin mit (nicht einmal von Eclipse C++ noch) und seinen enthaltenen seriellen Anschluss auf einem Windows 7 64bit: D – Eugen

+0

versucht Formfeed Senden ' 0xC' und verwende Putty als serielles Terminal. – Sibster

1

Es ist nicht möglich, den Serial Monitor Fenster basierend auf eingehenden seriellen Daten zu löschen.

Ich kann mir ein paar Optionen vorstellen, die einfachste (und schummligste) ist die Verwendung mit einer festen Breite Zeichenfolge, die Sie generiert haben, die Ihre Sensordaten enthält.

Autoscroll Das Kontrollkästchen Autoscroll des seriellen Monitors von Arduino bedeutet, dass wenn Sie die Zeichenfolge mit fester Breite (mit 500 ms Verzögerung) ständig senden, der Eindruck entsteht, dass sie aktualisiert wird, sobald sie nach unten geht und zu scrollen beginnt. Sie können auch die Höhe des Fensters verkleinern, damit es so aussieht, als hätte es nur eine Linie.

Um eine feste Breite Zeichenfolge zu erreichen, die für serielle println() geeignet ist, benötigen Sie Funktionen, um Ihre Sensorwerte in Zeichenfolgen zu konvertieren, und sie auf eine persistente Größe zu trimmen. verketten dann die Werte zusammen

ähnlich Eine Ausgabe von etwas (einschließlich Separatoren, wenn es um die Daten besser lesbar zu machen) zu dieser ist, was ich anspielend auf:

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

Alles in allem, dieses isn‘ t eine großartige Lösung, aber es würde Ihnen ein Ergebnis bringen.

Eine weit intelligentere Idee ist, ein anderes Programm außerhalb von Arduino zu bauen und es ist IDE, die für die Sensorwerte an den COM-Port lauscht aus dem Arduino gesendet.Ihr Arduino-Programm muss eine Nachricht senden, die Ihr externes Programm eindeutig interpretieren kann, etwa 1=0.5;, wobei 1 = Sensor-ID und 0,5 = Sensorwert. Das externe Programm würde dann diese Werte behalten (1 für jeden Sensor). Das externe Programm kann dann diese Informationen anzeigen in welcher Weise auch immer Sie möchten, eine schöne Ausgabe der Konsole wäre relativ einfach sein :-) zu erreichen

C# hat .NET ‚s serialport Klasse, die ein Vergnügen zu verwenden. (die meiste Zeit!)

Python hat ein Modul namens pyserial, das auch einfach großartig ist.

Beide Sprachen geben Ihnen viel mehr Kontrolle über die Konsolenausgabe, sollten Sie diesen Weg wählen.

+0

WWW ... OW! Dachte nicht, dass das Löschen des Bildschirms so viel Arbeit bedeuten würde. Vielen Dank Kumpel, ich werde das morgen versuchen und zu dir zurückkommen, wenn ich irgendwelche Probleme habe. – Eugen

7

Es gibt keine Möglichkeit, den Bildschirm zu löschen, aber eine wirklich einfache Möglichkeit, es zu fälschen, kann so viel drucken Serial.println();, wie Sie alle alten Daten aus dem Bildschirm halten müssen.

3

Sie könnten versuchen:

Serial.write(13); 

, die einen Wagenrücklauf bieten wird, zu Beginn der Zeile jeder Iteration zurückkehren - was tun sollten, was Sie jagen? (Vor allem wenn alles fest ist).

2

eine blöden einfache Möglichkeit gefunden, dieses Problem zu beheben . Ändern Sie die Größe des Terminalfensters auf nur eine Zeilenhöhe und es wird viel einfacher zu lesen sein!

+1

Nicht möglich lol. Die minimale Größe des Fensters liegt bei ungefähr 10 Zeilen für mich (Windows). – C4u

1

Wenn Sie Baudraten zum Beispiel wieder ändern und her löscht er die Serial-Monitor-Fenster in Version 1.5.3 von Arduino IDE für Intel Galileo Entwicklung

-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

Ich habe festgestellt, dass ASCII-12 macht eine Formfeed Das ist eine neue Seite. Hier ist eine Wikipedia-Definition

"Formularvorschub ist eine Seitenumbruch ASCII-Steuerzeichen.Es zwingt den Drucker die aktuelle Seite auszuwerfen und den Druck an der Spitze eines anderen“

Der Code fortzusetzen ist

Serial.write(12); 

Arduino ist Beenden Sie die Zeichen nicht unterstützen aber Putty ein Licht Open-Source-Telnet-Client kann es

Ein Beispiel des Codes

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

Terminals sind keine Drucker. Es funktioniert zufällig mit putty, aber siehe [xterm FAQ] (http://invisible-island.net/xterm/xterm.faq.html#xterm_form_feed). –

1

Ein weiterer Tritt in der Dose:

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

Sie könnten nur tun:

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

oder wenn Sie wollen:

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

ich diesen simple function gemacht, dies zu erreichen:

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

Es funktioniert gut für mich in den default terminal

Verwandte Themen