【问题标题】:Pharo: read byte from Arduino serial portPharo:从 Arduino 串口读取字节
【发布时间】:2013-10-08 06:17:11
【问题描述】:

我有一个挂在 /dev/ttyUSB1 上的 Arduino,以 115kbaud 通信。下面的语句在 Pharo 挂起的“下一个”方法调用之前都可以正常工作。 Arduino 通过将单个字符 $1 发送回计算机来响应“99”命令。如果我拔出电缆,程序将继续,并且 s 包含字符 $1 就像它应该的那样,但直到我拔出电缆。所以我的印象是'next'在读取一个字节后不会返回(好吧,当然,没有什么说它应该在读取一个字节后返回)。如何从 Pharo 中的流中读取单个字节?或者我如何打开读/写字节流?我在源类中没有发现任何似乎这样做的东西。我尝试将流设置为 ascii、二进制、文本,但它不会改变行为。

s := FileStream oldFileNamed: '/dev/ttyUSB1'.
s readWrite.
s nextPutAll: '99'. "'99' is successfully received by Arduino"
s next.             "hangs here"
s close.

感谢您的帮助。

【问题讨论】:

    标签: serial-port arduino smalltalk pharo


    【解决方案1】:

    看看 FileStream 的类方面。在那里,您会注意到,当向 Filestream 询问 oldFileNamed: 时,您会得到一个 MultiByteStream(concreteStream)。 可能涉及 TextConverter 或缓冲区。调用 MultiByteStream 的 open:forWrite:,并且调用 super。 StandardFileStream>open:forWrite: 调用 enableReadBuffering。

    您可能想在您的流上调用 disableReadBuffering。

    【讨论】:

    • 做到了!添加一个语句'disableReadBuffering'导致它开始工作。谢谢!
    【解决方案2】:

    有一个 Arduino 包解决了所有这些问题,看看这个 repo:

    http://ss3.gemstone.com/ss/Arduino.html

    【讨论】:

    • 我不确定这应该如何工作。我在工作区尝试了蒙蒂塞洛注册,但没有真正发生。我尝试了 Gofer 选项,但这给了我一个错误(ByteString 不理解 #cacheAllFileNamesDuring,来自 Gofer>>executeDo),并且 Installer 选项根本不起作用。我正在使用 Pharo 2.0。
    • 我尝试了 Pharo 3.0,我得到了类似的错误,ByteString 不理解 #goferReferences。
    • 我找到了蒙蒂塞洛浏览器/加载器的东西,我可以加载一些 Arduino 类,但是有一堆我不知道如何解决的依赖项:PEWireMorph、Player、CppKit、 CppTranslatedProgra、CppProgramTranslator、CProgram。
    • 我只是看了一下提交 cmets。看起来它可能需要 EToys/Squeak 图像?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多