Arduino序列有时会给出随机值

时间:2013-11-19 18:50:12

标签: random arduino return-value accelerometer sensor

我正在使用一个连接到我的arduino uno的sparkfun的MMA7361加速度计,它又连接到我的电脑。

我只是从每个轴(x,y,z)读取值,然后使用一系列Serial.print和Serial.write将它们直接通过串口发送到我的电脑。从那里我设置了一个程序来读取和显示myPort.readString();

的信息

现在它可以在80%的时间内正常工作并且它可以提供正确的结果和所有,但有时我会通过串口发送一些随机值,这会使接收程序混乱,使我无法正确使用信号。 / p>

我很确定传感器本身不会发出令人不安的信号,因为我试图保存10个不同的读数,然后发送平均值以最小化效果而没有运气。接收电脑仍然有0到200左右的奇怪值(从我看到的输出)。

我尝试拔出从传感器连接到模拟输入端口的电缆,奇怪的是它给出了一些随机值,而不是预期的0,我不确定但是对我来说似乎有事情要做关于我的问题。

我已经阅读了某种类型的下拉电阻,但这只适用于按钮,对吧?

我刚刚拿到了我的arduino,我正在努力学习如何使用传感器以及你可以用它们做什么以及可能出现什么问题所以如果有人可以帮助我,我会很感激:)

下面是随机值搞乱输出的一个例子:

252:236:218

251:202:215
2                        <-- this is where it begins
59:231:245
28
4:144:142                <-- messing up the order of the values
251:19
2:187
246:235
:244
240:190:
238
250:202:2
32
248:243:224

245:227:240

251:228:244

253:223:241

如果你想要我收到发送和接收的代码:

Serial.print(analogRead(xpin));
Serial.write(":");
Serial.print(analogRead(ypin));
Serial.write(":");
Serial.println(analogRead(zpin));

我真的希望发送只是一行代码,但我无法将所有数字和字符串连接到arduino上的一行字符串。 Recieving:

if ( myPort.available() > 0) {
  result = myPort.readString();
  println(result);
}

2 个答案:

答案 0 :(得分:0)

我似乎通过使用readChar并检查输入的当前字符是否是分隔符来解决此问题。它有点慢但是有效。

答案 1 :(得分:0)

查看输出,似乎所有值都已收到,但不知何故CR和/或LF字符被添加到输出中。这来自println声明:

if ( myPort.available() > 0) {
  result = myPort.readString();
println(result);
}

接收端会获得一些字符(不一定全部),然后打印它们,添加换行符然后退出函数。

然后再次进入if语句并在缓冲区中输出可用字符。它就这样了。

如果您希望确保输出的一致性,您必须要么 1.构建数据包或 2.对收到的字节进行计数,并在收到所有字节后打印出来。

至于1.这将是我的首选方法,为数据添加一个开始和结束字符。接收端将知道开始和结束字符之间的所有数据都是要打印的数据。