【发布时间】:2016-04-26 13:07:58
【问题描述】:
我是 Processing 的新手,我正在尝试绘制从串行端口接收到的一些数据。 我有很多加速度计(约 10 个),我验证草图是否以 100Hz 接收所有数据。 我想一次只绘制一个加速度计的数据。 如果我只从一个加速度计流式传输数据,则绘图工作完美无缺,但如果我尝试流式传输其中三个(仅绘制第一个),则绘图工作生涩。 当我尝试流式传输 4 个或更多时会发生奇怪的事情,因为意外地,当我增加流式加速度计的数量时,情节开始变得越来越好。
我注意到 serialEvent() 和 draw() 在两个独立线程上正常工作,但是当我添加更多加速度计时,它们的交替发生了奇怪的变化。
在最坏的情况下,如果我为 draw() ["#" symbol] 和 "add-value-of-the-first-accelerometer-to-the-array() 打印 System.currentTimeMillis() " 在 serialEvent() ["_" 符号] 我有类似的东西:
#1453211104631
#1453211104648
#1453211104664
#1453211104681
#1453211104698
#1453211104714
#1453211104730
#1453211104747
#1453211104765
#1453211104782
#1453211104797
#1453211104813
#1453211104832
#1453211104847
#1453211104864
#1453211104882
#1453211104897
#1453211104914
#1453211104931
#1453211104948
#1453211104964
#1453211104982
#1453211104998
_1453211105000
_1453211105000
_1453211105000
_1453211105000
_1453211105001
_1453211105001
_1453211105001
_1453211105001
_1453211105002
_1453211105002
_1453211105002
_1453211105002
_1453211105002
_1453211105003
_1453211105003
_1453211105003
_1453211105003
_1453211105003
_1453211105004
_1453211105004
_1453211105004
_1453211105004
_1453211105005
_1453211105005
_1453211105005
_1453211105005
_1453211105005
_1453211105006
_1453211105006
_1453211105006
_1453211105006
_1453211105006
_1453211105007
_1453211105008
_1453211105008
_1453211105008
_1453211105008
_1453211105008
_1453211105009
#1453211105014
#1453211105032
#1453211105049
#1453211105064
#1453211105082
#1453211105097
#1453211105114
#1453211105130
#1453211105148
#1453211105165
#1453211105181
#1453211105198
#1453211105214
所以在#1453211105014 draw() 一次绘制前 39 个点(~390 毫秒),然后在 200 毫秒内什么都没有,然后是另一个点,依此类推。 最终效果是数据的不规则绘图。
当草图接收到少量数据(一个加速度计)或大量数据(超过 6 个加速度计)时,不会发生这种情况。
我哪里错了?
非常感谢您的帮助!
【问题讨论】:
-
你能发一个MCVE吗?对于串行事件,这可能会很困难,但您可以尝试创建一个添加到一系列
ArrayLists的线程。我们至少需要看一些代码。但我不确定我是否理解您的问题:您所说的 200 毫秒在哪里?另请注意,println()函数非常慢,因此每秒打印出很多东西会打乱代码的时间。 -
对不起,也许我的解释不清楚。我的意思是,对于 200 毫秒(从 #1453211105014 到 #1453211105214),绘图绘制了 39 个点的 13 倍(没有到达新数据,实际上没有来自序列的事件)。然后其他约 40 个点在约 10 毫秒内到达(来自串行的 40 个事件)并且平局将绘制约 15 倍相同的约 79 个点。等等……
-
您有多确定
draw()函数和serialEvent()函数发生在两个不同的线程上?你怎么知道他们在两个不同的线程上? -
Processing 这么说,但我也使用 java.lang.Thread.currentThread() 并打印线程的名称。它们的结果不同......
-
嗯,那我还真不知道。如果没有MCVE,调试起来会非常困难。
标签: java plot serial-port processing real-time