2012-04-11 183 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