【问题标题】:Clearing the terminal screen?清除终端屏幕?
【发布时间】:2012-04-23 17:48:24
【问题描述】:

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

我在使用 Serial.print 和 lcd.print 时遇到的问题是值在不断变化,而在移动机器人时我无法真正看清它们。

我正在考虑在显示其他任何内容之前调用类似 Serial.clear() 的东西,这只会让事情保持稳定并在一个地方,只改变值。

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

那么……对于那些有更多 Arduino 经验的人……正确的方法是什么?

【问题讨论】:

    标签: terminal arduino refresh erase


    【解决方案1】:

    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/

    【讨论】:

      【解决方案2】:

      没有办法清除屏幕,但是,一个非常简单的伪造它的方法可以打印尽可能多的Serial.println();,因为您需要将所有旧数据保留在屏幕之外。

      【讨论】:

        【解决方案3】:

        我发现 ASCII 12 制作了一个 Form feed,这是一个新页面。这是维基百科的定义

        "换页是一个分页的 ASCII 控制字符。它强制 打印机弹出当前页面并在顶部继续打印 另一个”

        代码是

        Serial.write(12);
        

        Arduino Terminate 不支持字符,但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
            }
        

        【讨论】:

        • 终端不是打印机。它恰好适用于腻子,但请参阅xterm FAQ
        【解决方案4】:

        你可以试试:

        Serial.write(13);
        

        这将提供一个回车,每次迭代都返回到行首 - 这应该做你所追求的? (特别是如果一切都是固定宽度)。

        【讨论】:

          【解决方案5】:

          我能想到的最好方法是使用processing,网上有一些介绍,如displaying serial dataarduino grapharduino radar
          由于 Arduino 是基于处理的,所以学习起来并不难

          【讨论】:

            【解决方案6】:

            ESC 是字符 _2_7,而不是 _1_7。您也可以尝试十进制 12(又名 FF,换页)。

            请注意,所有这些特殊字符都不是由 Arduino 处理,而是由接收方的程序处理。因此,一个标准的 Unix 终端(xterm、gnome-terminal、kterm,...)处理一组不同的控制序列,然后说一个 Windows 终端程序,如 HTerm。

            因此,您应该指定您正在使用什么程序进行显示。之后可以告诉你哪些控制字符和控制序列是可用的。

            【讨论】:

            • 我在 Windows 7 64 位机器上使用最基本的标准 Arduino IDE(甚至还没有 Eclipse C++)及其附带的串行终端:D
            • 尝试发送 Formfeed 0xC 并使用 putty 作为串行终端。
            【解决方案7】:

            无法根据传入的串行数据清除串行监视器窗口。

            我可以想到几个选项,最简单(也是最作弊的)是使用 println() 和您生成的包含传感器数据的固定宽度字符串。

            Arduino IDE 的串行监视器的Autoscroll 复选框意味着如果您持续发送固定宽度的字符串(可能有 500 毫秒的延迟),这将给人的印象是它一旦到达底部并开始滚动就会更新。您还可以缩小窗口的高度,使其看起来只有一行。

            要完成适合串行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#.NETserialport 类,使用起来很愉快。 (大多数时候!)

            Python 有一个名为 pyserial 的模块,它也很简单很好。

            如果您选择以这种方式继续,任何一种语言都可以让您更好地控制控制台输出。

            【讨论】:

            • WWW...哇!没想到清屏意味着这么多工作。非常感谢兄弟,我明天试试,如果遇到任何问题,我会回复你。
            【解决方案8】:

            例如,如果您来回更改波特率,则会清除 Arduino IDE 1.5.3 版中的串行监视器窗口,用于英特尔 Galileo 开发

            【讨论】:

              【解决方案9】:

              又一记重拳:

              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(){}
              

              【讨论】:

                【解决方案10】:

                你可以这样做:

                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");
                }
                

                【讨论】:

                  【解决方案11】:

                  imprime en linea los datos con un espaciado determinado, asítendrás columnas de datos de la misma variable y será más claro

                  打印所有数据行,所以你有你需要的数据行,我只是解决了同样的问题,只是让你有一个恒定的数据大小和间距,我做了这个

                  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);
                  

                  【讨论】:

                  • 感谢您为 Stack Overflow 做出贡献。请避免使用英语以外的其他人难以理解的语言。
                  【解决方案12】:

                  如果你们中的一个人在 proteus 中使用虚拟终端并想清除它,只需添加 Serial.write(0x0C); 它会正常工作

                  【讨论】:

                    【解决方案13】:

                    我做了这个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\n");
                        }
                    }
                    

                    default terminal 对我很有效

                    【讨论】:

                      【解决方案14】:
                      /*
                      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);  
                      
                        }
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2019-10-29
                        • 2011-07-19
                        • 2011-01-29
                        • 2016-01-31
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-10-01
                        相关资源
                        最近更新 更多