마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

블루투스를 이용한 통신 질문이요...

0 추천

아두이노에 연결한 블루투스 모듈과 안드로이드 폰하고 연결해서 문자열을 주고 받고 있는데요..

아두이노에서 분명 여러 바이트를 전송했는데.. 안드로이드 에서는 일부만 보이는 현상이 있네요..

1 233333 이렇게 아두이노에서 보냈는데.. 안드로이드에서는 1만 먼저 받고 화면에 출력했는데 나중에 233333을 추가로 또 받기 때문에  화면에 출력되는게 뒤죽박죽이 되버립니다..

아두이노에서 13바이트를 보냈으면.. 안드로이드에서도 13바이트를 받아야 되는거 아닌가요? 이상하네요

안드로이드에서 데이터를 받는 관련 코드는  아래처럼 했습니다.

try {

    btOut.write(params[0].getBytes());
    btOut.flush();

    byte[] buff = new byte[512];
    int len = btIn.read(buff);

    Log.e( TAG, "recv? "+ len );

    return new String(buff, 0, len);
} catch (Throwable t) {
    doClose();
    return t;
}

 

이정주 (780 포인트) 님이 2015년 12월 6일 질문

1개의 답변

0 추천

원리:

read 함수는 block 방식으로 동작합니다.

자료가 버퍼에 있다면 즉시, 없다면 기다리다가 자료가 오면 즉시 반환합니다.

따라서 아두이노에서 응답할때까지 read() 는 기다리다가, 자료가 1byte 오면 즉시 반환합니다.

 

해결:

간단한 해결책은 read() 전에 Thread.sleep(1000) 정도를 주면 됩니다.

1000ms(1초) 기다리는 동안 13byte 가 버퍼에 들어 있을거고, read() 하면 즉시 모든 자료를 읽습니다.

그런데 이렇게 하면.. 안되겠죠?

쉽지는 않습니다만,

Read 전용 Thread 를 만들어서 읽어야 합니다.

 

 

 

JINASYS (5,630 포인트) 님이 2015년 12월 7일 답변
...