Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terminal 清除终端屏幕?_Terminal_Arduino_Refresh_Erase - Fatal编程技术网

Terminal 清除终端屏幕?

Terminal 清除终端屏幕?,terminal,arduino,refresh,erase,Terminal,Arduino,Refresh,Erase,我正在为我的机器人读取9个不同传感器的数据,我需要在同一个窗口中稳定地显示它们,这样我可以比较这些值,看看是否有任何读数关闭 我在Serial.print和lcd.print中遇到的问题是,这些值在不断移动,在移动机器人时,我无法很好地查看它们 我想在显示任何其他内容之前调用Serial.clear()之类的函数,这样可以使内容保持稳定,只在一个地方更改值 从我目前发现的情况来看,例如Serial.print(17字节)不再受支持(调用ESC键) 那么…对于那些有更多Arduino经验的人来说…

我正在为我的机器人读取9个不同传感器的数据,我需要在同一个窗口中稳定地显示它们,这样我可以比较这些值,看看是否有任何读数关闭

我在Serial.print和lcd.print中遇到的问题是,这些值在不断移动,在移动机器人时,我无法很好地查看它们

我想在显示任何其他内容之前调用Serial.clear()之类的函数,这样可以使内容保持稳定,只在一个地方更改值

从我目前发现的情况来看,例如Serial.print(17字节)不再受支持(调用ESC键)


那么…对于那些有更多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);