我从我的机器人9米不同的传感器读取数据,我需要稳定地显示所有这些,在同一个窗口,所以我可以比较值,看看是否有任何的读数是关闭的。
我既Serial.print和lcd.print遇到的问题是,这些值都在不断移动,我真的不能好好看看他们在移动机器人。
我想打电话给显示任何事情之前类似Serial.clear(),而只想让事情变得稳定,在同一个地方,只是改变了值。
从我发现到目前为止,不再支持Serial.print(17字节),例如(调用ESC键)。
所以...对于那些多一点的Arduino体验...什么是做到这一点的正确方法?
Answer 1:
Arduino的串行监控不是正规终端,从而其无法使用标准的终端的命令,以清除屏幕。 我建议使用一个实际的终端仿真器,如腻子 。
用于清除终端屏幕的命令是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/
Answer 2:
有没有办法来清除屏幕,但是,一个非常简单的方法来伪造它可以打印多达Serial.println();
因为你需要把所有的旧数据移出屏幕。
Answer 3:
我发现,ASCII 12使进纸 ,这是一个新的一页。 这里是一个维基百科的定义
“换页是一个网页破ASCII控制字符,它强制打印机弹出当前页,并继续打印在另一顶”
该代码是
Serial.write(12);
Arduino的终止不支持的字符 ,但腻子光开源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
}
Answer 4:
你可以试试:
Serial.write(13);
这将提供一个回车,返回行的每个迭代的开始 - 这应该做你追什么? (特别是,如果一切都固定宽度)。
Answer 5:
发现了一个愚蠢简单的方法来解决这个问题。 只要调整终端窗口中只有1号线高,这将是一个更容易阅读!
Answer 6:
我能想到的最好的办法是利用处理有在网络上几个类似的介绍显示串行数据 , Arduino的图形和Arduino的雷达
由于Arduino是基于处理它并不难学
Answer 7:
ESC是字符_ 2 _7,不_ 1 _7。 您也可以尝试十进制12(又名。FF,换页)。
请注意,所有这些特殊字符不被Arduino的,而是由接收端程序进行处理。 因此,一个标准的Unix终端(xterm中,GNOME终端,kterm,...)处理一组不同的控制序列,然后说喜欢HTerm一个Windows终端程序。
因此,你应该指定要使用完全相同的显示什么程序。 之后,它可以告诉你什么控制字符和控制序列是可用的。
Answer 8:
这是不可能的基于输入串行数据清除串口监视器窗口。
我能想到的几个选项中,最简单的(和cheatiest)是使用println()
用包含您的传感器数据,您已经生成一个固定宽度的字符串。
Arduino的IDE的串行监视器的Autoscroll
复选框意味着,如果你坚持送固定宽度的字符串(用500ms的延迟可能),这将给人的印象是它的更新,一旦它到达底部,并开始滚动。 你也可以缩小窗口的高度,以使它看起来像它只有一条线。
为了完成固定宽度的字符串,是适合于连续println()
你需要的功能,以您的传感器值转换为字符串,以及垫/他们修剪到持久性的大小。 然后级联这些值加在一起(包括分离器,如果它使更容易读出的数据)
的一些类似的输出是什么,我在暗示什么:
| 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7 | 1.8 |
所有的事情考虑,这不是一个很好的解决方案,但它会让你的结果。
一种远更聪明的想法是建立的Arduino之外另一个程序,它的IDE侦听的COM端口从Arduino的发送传感器值。 你的Arduino程序将需要发送的消息你的外部程序可以明确地解释,像1=0.5;
其中1 =传感器ID,并且0.5 =传感器值。 然后,将外部程序将保持这些值(1为每个传感器)。 然后,外部程序可以显示你想要的任何方式,一个漂亮的控制台输出将是比较容易实现:-)这个信息
C#
有.NET
的serialport
类,这是一种乐趣使用。 (大多数时候!)
Python有一个叫模块pyserial
,这也是很大的方便。
无论哪种语言会给你更大的控制权控制台输出,你应该选择继续这样。
Answer 9:
比如你改变波特率来回它清除串口监视器窗口中的Arduino IDE 1.5.3版本的英特尔伽利略发展
Answer 10:
另一个踢在罐:
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(){}
Answer 11:
你可以只是做:
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");
}
Answer 12:
我做了这个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
Answer 13:
在线打印数据与给定的间隔和数据列具有相同的变量,会更清楚
打印的行中的所有数据,所以你必须与数据行你需要,我只是解决这样同样的问题,只是让苏尔你不得不之间asignad恒定的数据大小和spacement,我做了这个
Serial.print("cuenta q2: ");
Serial.print( cuenta_pulsos_encoder_1,3);
Serial.print("\t");
Serial.print(q2_real,4);
Serial.print("\t");
Serial.print("cuenta q3: ");
Serial.print( cuenta_pulsos_encoder_2,3);
Serial.print("\t");
Serial.print(q3_real,4);
Serial.print("\t");
Serial.print("cuenta q4: ");
Serial.print( cuenta_pulsos_encoder_3,3);
Serial.print("\t");
Serial.println(q4_real,4);
Answer 14:
如果你们中的一个使用变形虚拟终端,并想清楚它只是添加Serial.write(0x0C); 它会做工精细
Answer 15:
/*
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);
}
文章来源: Clearing the terminal screen?