2013-10-01 107 views
4

我有一個Arduino掛在/ dev/ttyUSB1上,以115kbaud進行通信。下面的表述正好適用於Pharo掛起的'下一個'方法調用。 Arduino通過向計算機發送單個字符$ 1來響應'99'命令。如果我拉出電纜,程序會繼續,並且應該包含字符$ 1,但是直到拔出電纜。所以我的印象是,'next'在它讀取一個字節後沒有返回(確定,沒有什麼說它應該在讀取一個字節後返回)。如何從Pharo的流中讀取單個字節?或者我如何打開讀/寫字節流?我似乎沒有在源代碼類中找到任何可以做到這一點的東西。我試着將流設置爲ascii,二進制,文本,並且不會改變行爲。Pharo:從Arduino串行端口讀取字節

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

感謝您的幫助。

回答

1

看看FileStream的類的一面。在那裏你會注意到當你向FileStream提供一個oldFileNamed時你正在獲得一個MultiByteStream(concreteStream)。 可能有一個TextConverter或緩衝區涉及。打開:forWrite:MultiByteStream被調用,並且調用超級。 StandardFileStream> open:forWrite:調用enableReadBuffering。

您可能想要在您的流上調用disableReadBuffering。

+0

也做到了!添加一條語句的disableReadBuffering'使它開始工作。謝謝! – Jeff

1

有具有所有這些問題解決了,看看這個回購一個Arduino包:

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

+0

我不完全確定這應該如何工作。我在工作區嘗試了Monticello註冊,但沒有發生任何事情。我嘗試了Gofer選項,但是這給了我一個錯誤(ByteString不明白#cacheAllFileNamesDuring,在Gofer >> executeDo中),安裝程序選項根本不起作用。我正在使用Pharo 2.0。 – Jeff

+0

我嘗試過Pharo 3.0,並且我收到類似的錯誤,ByteString不理解#goferReferences。 – Jeff

+0

我想出了蒙蒂塞洛瀏覽器/加載器的東西,我可以加載一些Arduino類,但有一堆我不知道如何解決的依賴關係:PEWireMorph,Player,CppKit,CppTranslatedProgra,CppProgramTranslator,CProgram。 – Jeff