2012-04-11 179 views
10

我正在從我的機器人的9個不同傳感器讀取數據,我需要在同一個窗口中穩定地顯示它們,以便我可以比較這些值並查看是否有任何讀數已關閉。清除終端屏幕?

我既Serial.print和lcd.print遇到的問題是,這些值都在不斷移動,我真的不能好好看看他們在移動機器人。

我想打電話顯示任何事情之前類似Serial.clear(),而只想讓事情變得穩定,在同一個地方,只是改變了值。

從我發現到目前爲止,Serial.print(17字節),例如不再支持(電話ESC鍵)。

那麼......對於那些擁有更多Arduino體驗的人......這樣做的正確方法是什麼?

回答

25

Arduino串行監視器不是一個普通的終端,所以它不可能使用標準的終端命令清除屏幕。我建議使用實際的終端仿真器,如Putty

用於清除終端屏幕的命令是ESC [2J

爲了實現在Arduino的代碼:

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

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

1

ESC是字符_ _7,而不是_ _7。你也可以嘗試十進制12(即FF,換頁)。

請注意,所有這些特殊字符不是由Arduino處理,而是由接收端的程序處理。因此,一個標準的Unix終端(xterm,gnome-terminal,kterm,...)處理一組不同的控制序列,然後說一個Windows終端程序,如HTerm。

因此,您應該指定準確顯示的程序。之後,可以告訴你哪些控制字符和控制序列可用。

+0

我使用的是最基礎的,標準的Arduino IDE(甚至沒有Eclipse的C++還)和64位Windows 7機器上的包括串行終端:d – Eugen 2012-04-11 19:32:37

+0

嘗試發送換頁' 0xC'並使用putty作爲串行終端。 – Sibster 2012-04-12 10:46:54

1

無法根據傳入的串行數據清除串行監視器窗口。

我可以想到幾個選項,最簡單(也是最有效)是使用println(),其中包含您生成的包含傳感器數據的固定寬度字符串。

Arduino IDE串行監視器的Autoscroll複選框表示如果您持續發送固定寬度的字符串(也許延遲500毫秒),這會給人一種感覺,一旦它到達底部並開始滾動時,它會進行更新。您還可以縮小窗口的高度,使其看起來像只有一條線。

要完成適用於系列println()的固定寬度字符串,您需要將傳感器值轉換爲字符串的功能,以及將其修剪/修剪爲持久大小的功能。然後串連的值加在一起(包括分隔符,如果它使數據更易於閱讀)

的類似於這樣的輸出就是我在暗示什麼:

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

認爲,這ISN」所有的事情這是一個很好的解決方案,但它會給你一個結果。

一種遠更聰明的想法是建立的Arduino之外另一個程序,它的IDE偵聽的COM端口從Arduino的發送傳感器值。您的Arduino程序將需要發送一條消息,您的外部程序可以明確解釋,如1=0.5;,其中1 =傳感器ID,0.5 =傳感器值。外部程序將保留這些值(每個傳感器1個)。然後,外部程序可以顯示任何方式這個信息,你想,一個漂亮的控制檯輸出將是比較容易實現:-)

C#.NETserialport類,這是一個使用樂趣。 (大部分時間!)

Python有一個叫做pyserial的模塊,它也很容易。

如果您選擇以這種方式進行操作,那麼兩種語言都會給您更多的控制檯輸出控制權。

+0

WWW ... OW!沒想到清除屏幕意味着很多工作。非常感謝,我會在明天嘗試,如果遇到任何問題,請回復您。 – Eugen 2012-04-11 19:31:16

7

有沒有辦法清除屏幕,但是,一個真正簡單的假冒它的方式可以打印儘可能多的Serial.println();,因爲你需要將所有舊數據保持在屏幕外。

3

你可以嘗試:

Serial.write(13); 

這將提供一個回車,返回每次迭代線的起點 - 這應該做你追什麼? (特別是如果一切都是固定的寬度)。

2

找到一個愚蠢簡單的方法來解決這個問題。只需將終端窗口的大小調整爲只有1行,並且閱讀起來會更容易!

+1

不可能哈哈。對於我來說窗口的最小大小約爲10行(Windows)。 – C4u 2015-04-20 18:12:08

1

如果改變波特率例如來回就清零的Arduino IDE 1.5.3版本的英特爾伽利略發展串口監視器窗口

-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

我發現,ASCII 12使換頁 ,那是一個新的頁面。這裏是一個維基百科的定義

「換頁是一個分頁的ASCII控制字符。它迫使 打印機彈出當前頁,並在另一個」

代碼頂級 繼續打印

Serial.write(12); 

Arduino的終止不支持的字符Putty一輕的開源telnet客戶端可以做到這一點

代碼示例

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

終端不是打印機。它恰好與putty一起使用,但請參閱[xterm FAQ](http://invisible-island.net/xterm/xterm.faq.html#xterm_form_feed)。 – 2017-08-30 08:06:36

1

在可以在另一踢:

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

你可能只是這樣做:

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

,或者如果你想:

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

我做了這個simple function來實現這一目標:

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

它很適合我的default terminal