Terminal 清除终端屏幕?
我正在为我的机器人读取9个不同传感器的数据,我需要在同一个窗口中稳定地显示它们,这样我可以比较这些值,看看是否有任何读数关闭 我在Serial.print和lcd.print中遇到的问题是,这些值在不断移动,在移动机器人时,我无法很好地查看它们 我想在显示任何其他内容之前调用Serial.clear()之类的函数,这样可以使内容保持稳定,只在一个地方更改值 从我目前发现的情况来看,例如Serial.print(17字节)不再受支持(调用ESC键)Terminal 清除终端屏幕?,terminal,arduino,refresh,erase,Terminal,Arduino,Refresh,Erase,我正在为我的机器人读取9个不同传感器的数据,我需要在同一个窗口中稳定地显示它们,这样我可以比较这些值,看看是否有任何读数关闭 我在Serial.print和lcd.print中遇到的问题是,这些值在不断移动,在移动机器人时,我无法很好地查看它们 我想在显示任何其他内容之前调用Serial.clear()之类的函数,这样可以使内容保持稳定,只在一个地方更改值 从我目前发现的情况来看,例如Serial.print(17字节)不再受支持(调用ESC键) 那么…对于那些有更多Arduino经验的人来说…
那么…对于那些有更多Arduino经验的人来说…做这件事的正确方法是什么?我能想到的最好的方法是使用网上的一些介绍,以及
因为Arduino是基于处理的,所以它并不难学ESC是字符“u2\u7”,而不是“u1\u7”。您也可以尝试十进制12(aka.FF,表单提要) 请注意,所有这些特殊字符都不是由Arduino处理的,而是由接收端的程序处理的。因此,一个标准的Unix终端(xterm、gnome终端、kterm等)处理一组不同的控制序列,然后说是像HTerm这样的Windows终端程序
因此,您应该指定您使用的确切显示程序。之后,可以告诉您哪些控制字符和控制序列可用。无法根据输入的串行数据清除串行监视器窗口 我可以想出几个选项,最简单(也是最容易作弊的)是使用
println()
和您生成的包含传感器数据的固定宽度字符串
Arduino IDE的串行监视器的自动滚动
复选框意味着,如果您持续发送固定宽度的字符串(可能延迟500毫秒),这将给人一种印象,即一旦它到达底部并开始滚动,它就会更新。您还可以缩小窗口的高度,使其看起来只有一条线
要实现适用于串行println()
的固定宽度字符串,需要函数将传感器值转换为字符串,并将其填充/修剪为持久大小。然后将这些值连接在一起(如果它使数据更易于读取,则包括分隔符)
类似于此的输出就是我要暗示的:
| 1.0 | 1.1 | 1.2 | 1.3 | 1.4 | 1.5 | 1.6 | 1.7 | 1.8 |
从各方面考虑,这不是一个很好的解决方案,但它会给你一个结果
一个更聪明的想法是在Arduino之外构建另一个程序,它是一个IDE,用于侦听从Arduino发送的传感器值的com端口。您的Arduino程序需要发送一条您的外部程序可以明确解释的消息,比如1=0.5代码>其中1=传感器ID,0.5=传感器值。然后,外部程序将保留这些值(每个传感器1个)。然后,外部程序可以以您喜欢的任何方式显示此信息,一个好的控制台输出将相对容易实现:-)
C#
拥有.NET
的serialport
类,使用起来很愉快。(大多数时候!)
Python有一个名为pyserial
的模块,它也很简单
如果您选择这种方式,这两种语言都可以让您更好地控制控制台输出。没有办法清除屏幕,但是,伪造屏幕的一种非常简单的方法是打印尽可能多的Serial.println()代码>因为您需要将所有旧数据保留在屏幕之外。您可以尝试:
Serial.write(13);
它将提供一个回车符,每次迭代都返回到行的开头-哪个应该做你要做的?(尤其是在所有设备都是固定宽度的情况下)。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
来源:
如果来回更改波特率(例如),它将清除用于英特尔伽利略开发的Arduino IDE 1.5.3版中的串行监视器窗口/*
/*
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);
}
尽可能靠近屏幕
*/
无效设置(){
//将安装代码放在此处,以便运行一次:
序列号开始(115200);
}
void循环(){
Serial.println(“这是第零行”);
//将主代码放在此处,以便重复运行:
对于(int i=1;i<37;i++)
{
//支票和打印行
如果(i==15)
{
Serial.println(“第15行”);
}
其他的
Serial.println(i);//打印行号删除空行的i
}
延迟(5000);
}
我发现ascii12生成了一个表单提要,这是一个新页面
“表单提要是一个分页ASCII控制字符。它强制
打印机弹出当前页面并继续在顶部打印
“另一个”
代码是
Serial.write(12);
Arduino Terminate不支持该字符,但一个轻开源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
}
对罐头的另一脚:
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(){}
void setup(){/*123456789 123456789 123456789 123456789 123456789 123*/
字符串newRow=“\n | |;
字符串scrSiz=“\n | \n | \n | \n | \n | \n | \n | \n | \t”;
序列号开始(115200);
//这个波特率不应该有闪烁,但它会在
//未充分超过视觉阈值的持续性
//115200波特应每0.1毫秒显示约10000 cps或一个字符
//每个“for”循环迭代应在<7毫秒内打印65个字符
//Serial.print()工件效率低下是闪烁的罪魁祸首
//很遗憾,“\r”没有在IDE的串行监视器中呈现
串行打印(scrSiz+“\n|uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
对于(int i=0;i您可以执行以下操作:
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");
}
void clearscreen() {
for(int i=0; i<10; i++) {
Serial.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
}
}
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);