我的Arduino正在记录温度数据(数据类型浮点数),我正在尝试登录我的Linux机器。最大的问题是这种日志记录的速度。 Arduino使用DS1822读取温度,之后我使用
Serial.print(temp);
命令,其中temp是保存温度数据的float。在Linux机器上,我使用以下shell脚本来收集数据:
#!/bin/sh
while [ 1 ]; do
val=$(cat /dev/ttyUSB0);
echo "$val,$(date "+%Y-%m-%d %H:%M:%S")" >> ~test.txt;
sleep 10;
done
这个问题的主要问题是睡眠(延迟)必须非常大;如果我使用sleep 1;
,则计算机无法接收任何数据。
当我使用screen /dev/ttyUSB0
时,我可以看到数据收到的速度非常快。
使用我当前的脚本,似乎Arduino在发送数据时会以某种方式冻结。我还试图用一个电阻测量来构建一个更简单的脚本(因为DS1822数据转换也需要一些时间),但是当我使用上面描述的shell脚本时,这也花费了很多时间。
因此我的问题是:如何优化我的Arduino / shell脚本以便像Arduino一样快地记录数据?
答案 0 :(得分:1)
也许tail -f
可行:
tail -f /dev/ttyUSB0 | bash -c 'cat; date "+%Y-%m-%d %H:%M:%S"'
答案 1 :(得分:0)
我通过在建立新的串行连接时禁用Arduino正在执行的自动复位来找到解决方案。为此,我在RST和GND之间放置了一个10 uF电容。请注意,在将代码上传到Arduino之前必须先移除此电容!
进行此修改后,我能够从Arduino读取10 Hz的电阻数据。为此,我修改的唯一内容是bash脚本上的sleep命令,现在是
sleep 0.1;