【发布时间】:2015-04-12 19:45:00
【问题描述】:
我正在做一些简单的 arduino 项目,以努力学习一些基础知识。
对于这个项目,我正在尝试打印通过串行监视器发送的一行。当我打印该行时,我的前导文本与用户输入的第一个字符一起打印,然后新行开始,前导文本与其余用户数据一起再次打印。我不确定为什么会这样。
这是我的代码:
char data[30];
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available())
{
//reset the data array
for( int i = 0; i < sizeof(data); ++i )
{
data[i] = (char)0;
}
int count = 0;
//collect the message
while (Serial.available())
{
char character = Serial.read();
data[count] = character;
count++;
}
//Report the received message
Serial.print("Command received: ");
Serial.println(data);
delay(1000);
}
}
当我将代码上传到我的 Arduino Uno 并打开串行监视器时,我可以输入如下字符串:“测试消息”
当我按回车时,我得到以下结果:
收到的命令:T
收到的命令:est 消息
当我期待的是:
收到的命令:测试消息
有人能指出正确的方向吗?
提前感谢您的帮助。
【问题讨论】:
-
看起来它适用于n个字符的消息,这是消息,分两次发送。你知道发件人在做什么吗?是先发送 T,然后再发送消息的其余部分,还是一起发送?
-
似乎问题与在输入到串行监视器的文本完全传输到缓冲区之前执行的 println 有关。我的意图是使用 Serial.Write(); 发送消息所以我假设在串行监视器中输入文本是通过 Serial.Write 进行通信的——这是一个糟糕的假设吗?