2013-03-29 3 views
2

나는 시리얼 포트에서 읽을 루아의 코드를 쓰고 있어요,하지만 난 읽을 때 나는 코드로 다시 에코가 나타날 나는 그에게 데이터를 전송하는 전무를 열 때직렬 포트에서 읽을 때 Lua - io.read에서 에코 백을 보냅니다 - 이유는 무엇입니까?

print("Dragino Uart Test started\n") 
while 1 do 
    serialin=io.open("/dev/ttyS0","r") 
    print(serialin:read()) --print the data 
    serialin:close() 
end 

, 나는 가능 지역 에코 나는 "텍스트"를 입력하고 내가 볼보다 :

tteexxtt

는 그럼 난 내 루아 스크립트에서 내 메시지를 볼 수 Enter 키를 누릅니다해야합니다.

Dragino에서 OpenWRT를 사용하고 있습니다.

프롬프트 명령과 같아서 보이는 모든 것을 입력하고 명령을 보내려면 Enter 키를 눌러야합니다.

직렬 포트에서 읽고 쓰는 다른 방법이 있습니까?

누군가 나에게 제발 도와 드릴까요? 정말 고맙습니다!

답변

1

인수가없는 read 메서드는 전체 행을 읽습니다. 그래서 텍스트 끝에 Enter 키를 눌러야합니다. 한 번에 한 바이트 씩 :read(1)으로 읽거나 모두를 :read("*a")으로 읽으십시오.

+0

안녕하세요, 도움을 주셔서 감사합니다. read (1) 새 행을 기다리고 나에게 첫 번째 문자를 보내면 아직 읽지 않으려 고 노력했다. ("* a"), 나는 시도 할 것이고 나는 내가 얻은 것을 말할 것이다. –

0

나는 아직도이 문제가 누군가에게 있지만 어쩌면 이것이 몇 사람에게 도움이되는지 알 수 없습니다. lhf가 말한 것처럼 : read (1)은 이것을하기위한 끔찍한 방법이다. 나는 몇 가지 문제가 있었다 : read ("* a"). 제 의견으로는 가장 쉬운 방법은 다음과 같은 조각으로 답변을 추가하는 것입니다.

rserial=io.open("/dev/ttyS0",'r') 
lines = "" 
repeat 
    local line=rserial:read(1) 
    if string.sub(line, 0, 3) == "OED" then --OED is here the stream ending. This can vary 
      EOD = true 
      rserial:close() 
    elseif line then 
      lines = lines .. line 
    end 
until EOD == true 
print (lines)