2013-10-01 2 views
4

115kbaud에서 통신하는 Arduino가/dev/ttyUSB1에 있습니다. 아래 문장은 Pharo가 멈추는 '다음번'메소드 호출까지 제대로 작동합니다. Arduino는 한 문자 $ 1을 컴퓨터로 다시 보냄으로써 '99'명령에 응답합니다. 케이블을 꺼내면 프로그램이 계속 진행되고 케이블에 $ 1 문자가 포함되어 있지만 케이블을 꺼낼 때까지는 포함되지 않습니다. 그래서 그것은 다음 바이트가 단지 하나의 바이트를 읽은 후에 리턴하지 않는다는 느낌입니다. (물론, 싱글 바이트를 읽은 후에 리턴해야한다는 것은 아무것도 없습니다.) Pharo의 스트림에서 단일 바이트를 읽으려면 어떻게해야합니까? 또는 읽기/쓰기 바이트 스트림을 어떻게 열 수 있습니까? 나는 이것을하는 것처럼 보이는 소스 클래스에서 아무 것도 발견하지 못했다. 스트림을 아스키, 바이너리, 텍스트로 설정하려고 시도했지만 동작을 변경하지 않습니다.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 또는 버퍼가있을 수 있습니다. open : MultiByteStream의 forWrite :가 호출되어 super를 호출합니다. StandardFileStream> open : forwrite : enableReadBuffering을 호출합니다.

스트림에서 disableReadBuffering을 호출하고 싶을 것입니다.

+0

가! 한 문장의 disableReadBuffering을 추가하면 작업이 시작됩니다. 감사! – Jeff

1

이 REPO에서 살펴보고 해결이 모든 문제가있는 아두 이노 패키지가있다 : 그것을했다

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

+0

어떻게 작동하는지 정확히 모르겠습니다. 작업 공간에서 Monticello 등록을 시도했지만 아무 일도 일어나지 않았습니다. Gofer 옵션을 시도했지만 오류가 발생했습니다 (ByferString은 Gofer >> executeDo에서 #cacheAllFileNamesDuring을 인식하지 못합니다). 설치 프로그램 옵션이 전혀 작동하지 않았습니다. Pharo 2.0을 사용하고 있습니다. – Jeff

+0

Pharo 3.0을 시도했지만 비슷한 오류가 발생했습니다. ByteString은 #goferReferences를 이해하지 못합니다. – Jeff

+0

몬티 첼로 브라우저/로더를 알아 냈고 일부 Arduino 클래스를로드 할 수 있지만 PEWireMorph, Player, CppKit, CppTranslatedProgra, CppProgramTranslator, CProgram 등 해결 방법을 모르는 종속성이 많이 있습니다. – Jeff