所以,我有点过头了,我觉得我非常接近解决方案,但它还没有完成 . 这是我的情况:
我试图编写两个Bash脚本(现在在Mac OS X 10.6中运行),它将(a)将来自Arduino单元的所有串行数据打印到标准输出,并且(b)允许我发送串行数据到Arduino单位 . 然后将使用Adobe AIR的NativeProcess API调用这些脚本,以允许Arduino单元和Flex Adobe AIR应用程序之间的紧密集成 .
我的两个脚本非常简单 -
这是我的WriteToSerial.sh脚本:
echo $1 > $2
($ 1显然是我的字符串,$ 2是串口的位置 - 目前是/dev/tty.usbserial-A800eIUj)
这是我的ReadSerialOutput.sh脚本:
tail -f $1
(1美元是我的串口的位置,目前是/dev/tty.usbserial-A800eIUj)
当我调用这些脚本中的任何一个(或者即使我只是直接在Bash控制台中输入命令)时,我的计算机就会挂起 - 我可以输入字符,但是直到我将Ctrl C移出进程才会发生任何事情 .
但是,如果我打开Arduino IDE并打开串口监视器,然后关闭串口监视器,然后回显"test">串口,一切正常 .
这告诉我,在Arduino IDE中打开串行监视器是以某种方式初始化串口,这反过来允许我拖延它没有问题 . 这反过来告诉我,我只是没有输入某种初始化命令 . 但是,我一直在高低搜索,似乎无法找到解决这个问题的任何东西 .
解决办法是什么?
10 回答
检查是否使用其他应用程序(例如Cornflake(Mac OS X的串行终端))向Arduino设备发送数据/从Arduino设备接收数据 - 而不是使用Arduino IDE和串行监视器 .
另外,你可能想看看你是否可以从切换到Xcode(在调试功能等方面)中受益 .
见:Setting up Xcode to Compile & Upload to an Arduino ATMega328 (Duemilanove)
尝试使用工具stty:
与往常一样,在应用上述内容之前阅读联机帮助页 .
cread
允许您接收数据 . 如果使用流量控制,则可能需要省略clocal
. 如果您不确定上述设置是什么,请询问,我可以写出更完整的答案 .我也遇到了同样的问题 . 我使用Arduino Uno和Ubuntu 12.04 . 经过几个小时的搜索和尝试,我发现当串行设备打开 for the first time 时,Arduino将 reset ,但是当再次打开串行设备时不会重置 .
因此,在bash中运行命令 - echo "input string"> / dev / ttyXXX将重置Arduino并立即发送"input string" . Arduino需要一些时间来初始化,并且不够快,无法接收此字符串 . cat / dev / ttyXXX也将重置Arduino .
首先在某处打开/ dev / ttyXXX时,这些命令将起作用 .
这是我的解决方案:
1)通过将/ dev / ttyXXX重定向到文件描述3来打开/ dev / ttyXXX
2)等待Arduino的初始化
3)与Arduino沟通
4)关闭/ dev / ttyXXX
我也在努力解决这个问题,尝试将stty设置和技巧结束,并将我的文件放在/dev/tty.usbserial-FTF7YNJ5(在我的情况下),同时站在一个脚趾上等等 .
然后我做了一个ls / dev并注意到/dev/cu.usbserial-FTF7YNJ5 - 哦,这是什么?显然,设备的“调用单元”版本不期望或提供任何流量控制 . 将字节转储到端口 . 正是我需要的 .
所以这样做:cat super_file.bin> /dev/cu.usbserial-XXXXX
希望这可以帮助 . 直到现在我才知道答案,我发现了这个:http://stuffthingsandjunk.blogspot.com/2009/03/devcu-vs-devtty-osx-serial-ports.html
在Linux上,您需要调用setserial来配置串行端口选项(波特率,奇偶校验,流量控制等),然后才能正确读取/写入端口 .
您需要找到一种方法来使用Mac OS X Bash系统执行此操作 .
或者你可以write a Python script这样做 .
也许尝试一些类似于serial-1.0的串行命令行工具 .
见:Serial port loopback/duplex test, in Bash or C? (process substitution)
尝试在命令末尾添加&符号(&)以将进程置于后台 . 如果控制台挂起,那么这意味着脚本或进程仍在当前终端上运行,在完成进程或脚本之前,您将无法输入或单击任何内容 .
您也可以尝试在1终端窗口中运行该命令,然后打开一个新的终端窗口/选项卡,并尝试从那里进行拖尾 .
尝试/修改ttyecho:
http://www.humbug.in/2010/utility-to-send-commands-or-data-to-other-terminals-ttypts/
还有Apple的SerialPortSample命令行工具,允许您设置任意波特率:
有关更多信息,请参阅:http://www.arduino.cc/playground/Interfacing/Cocoa
另一段Cocoa示例代码向您展示如何通过串行连接与Arduino微控制器通信是objective-candarduino(托管在Google代码上) .
一个单行的东西,用于数据记录,并对数据采取行动:
摘要
monitoring: arduino输出可以触发计算机上的操作
data-logging: 它同时将流数据保存到文件中
未选中? sending-messages: 我还没有尝试将数据发送到arduino,但是看到第二个例子,可能能够通过一些cmdline util向串口发送消息 .
the following timestamps and sends to stdout
样本输出:
This method can even be adapted to monitor and act upon the data in real time:
更多例子:https://github.com/gskielian/Arduino-DataLogging/tree/master/Bash-One-Liner