首页 > 解决方案 > 如何让 Arduino 的串行监视器显示一个字符串值,但只有值在变化?

问题描述

我已经有我的代码可以工作了,我只是想让它现在看起来更好。简单总结一下我的设备的功能:智能停车系统,可检测进出停车场的汽车,并显示入口处有多少空位可用或没有。现在输出如下所示:

Vacant Spots: 1
Vacant Spots: 1
Vacant Spots: 1
Vacant Spots: 1
Vacant Spots: 0
.
.
.
.
.

这是在汽车进入时的情况,因此它减 1,当汽车离开时,它会增加,因为有一个额外的空位可用。我想要做的是让输出看起来像这样:

" 空位:1

"

我唯一要更改的是数值。我不希望在 LCD 显示屏上显示连续的“Vacant Spots: 1”流,供停车用户查看。有没有办法在循环结束后清除串行监视器而不让它连续输出低于它的新值?我已经提供了该程序的代码。我有 3 个 xbees(1 个协调器和 2 个路由器)。两个路由器上没有代码,只是向协调器发送数据。协调器是它接收数据的地方。这是协调器的代码:

int readValue = 0;
void setup()
{
  Serial.begin(9600);
}
int vslots = 1;

void loop()
{

  if(Serial.available()>21)
  {
        if(Serial.read() == 0x7E)
        {
          for(int i=0;i<19;i++)
          {
          byte discard = Serial.read(); //Next 18 bytes, it's discarded
          }
          readValue = Serial.read();

            bool flagTrue = false;
            bool flagFalse = false;

         
            if((readValue == 0) && flagTrue == false ) //EXIT
              {    
                flagTrue = true;
                flagFalse = false;
                Serial.print("Vacant Spots: ");
                Serial.println(vslots);    
              }
              else if((readValue == 16 && flagFalse == false) && vslots >= 1)
//DECREMENT (CAR ENTERING)    
              {
                flagTrue = false;
                flagFalse = true;
                vslots -= 1;
                Serial.print("Vacant Spots: ");
                Serial.println(vslots);
              }

     
             if((readValue == 18) && flagTrue == false )
              {    
                flagTrue = true;
                flagFalse = false;
                Serial.print("Vacant Spots: ");
                Serial.println(vslots);    
              }
               else if((readValue == 19 && flagFalse == false) && vslots <= 10)
//INCREMENT (CAR EXITING)    
              {
                flagTrue = false;
                flagFalse = true;
                vslots += 1;
                Serial.print("Vacant Spots: ");
                Serial.println(vslots);
               }
           


         }  
   }
}

标签: c++arduino

解决方案


首先,您需要了解 Arduino 串口终端不像真正的终端软件,它不支持在 UART 上发送的命令。所以要实现你想要的,你需要真正的终端软件,比如putty。它允许您通过使用 UART 通信发送字符字节来进行更改。

//ADD these lines before printing on a serial terminal
  Serial.write(27);       // 27 is an ESC command for terminal
  Serial.print("[2J");    // this will clear screen
  Serial.write(27);       // 27 is an ESC command for terminal
  Serial.print("[H");     // move cursor to home 
//now print what you want...
  Serial.print("Vacant Spots: ");
  Serial.println(vslots);

有关更多信息和方法,您可以在此处查看此帖子。但是已经尝试了一切并建议使用腻子。


推荐阅读