c++ - 如何让 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);
}
}
}
}
解决方案
首先,您需要了解 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);
有关更多信息和方法,您可以在此处查看此帖子。但是已经尝试了一切并建议使用腻子。
推荐阅读
- angular - 如何在离子中实现搜索栏
- spring - spring integration:如何从 Spring Controller 调用 Spring Integration?
- javascript - 纯js在多语言的情况下计算字符输入
- jquery - 我们怎样才能让它无限滚动?
- python - 如何使列表中的项目永远运行 - python
- python - print和append方法中链表遍历的区别
- windows - WSL2 环境中的 git push 在写入对象步骤期间挂断
- database-design - 用于通知的 DynamoDB 表设计
- android - 颤动中 SliverAppBar 中资产的背景图像错误
- java - 来自子片段的过去值-> mainactivity 无法将 fragment_fr_event_Birthday 转换为 fragment_fr_event_wedding android studio