Android2013. 7. 18. 11:20

사실 안드로이드와 아두이노간의 통신을 구현한거는 좀 오래돼서 기억을 더듬어 포스팅합니다.

 

먼저 시리얼 통신은 진저브레드 이상의 안드로이드 OS버전에서만 작동한다고 하니 참고하시구요~

 

맨 바닥부터 코딩할 순 없으니 시리얼통신 라이브러리를 사용하겠습니다.

 

 

usb-serial-for-android-v010.jar

 

출처는

 

https://code.google.com/p/usb-serial-for-android/

 

입니다. 위의 링크로 가시면 Quick Start 부분에 사용 방법이 다 나와있네요.

 

하지만 링크의 예제 소스만 가지고는 통신을 원활히 할 수가 없더라구요.. 한 바이트 읽고 쓰는거는 아주 쉽지만 패킷을 만들어서 전송하려면

약간의 프로그래밍이 따라야 합니다.

 

먼저, BaudRate부분이 115200으로 되어있는데 이거 안돼요. 저는 Arduino MAGE2560을 사용했는데 9600빼고는 아무것도 안되더라구요..

이거때문에 몇시간을 날려먹은건지 ㅠ

 

그리고 패킷 제작은 사용하시는 분 마음대로 규격을 정하셔도 괜찮을거 같아요. 저는 모든 정보를 문자로 변환한 후 알파벳으로 구분했습니다.

 

"a1.23b2.34c3.45z" 이렇게요. 그러면 전송받은 측에서 a, b사이의 문자("1.23")을 빼 낸 다음에 숫자(1.23)로 변환하는 방법을 사용했습니다.

 

패킷을 송신 했다면, 수신을 해야할텐데 코드 작성 전에 문득 이런 생각이 들더군요

 

'한 패킷 전송 속도와 안드로이드 반복문의 속도가 다르면 패킷이 잘릴까?' '패킷이 잘린다면 다음번에 수신된 나머지 패킷과 연결할 순 없을까?'

 

그래서 고민하다 링 버퍼를 만들었습니다. 패킷보다 긴(2배이상) 충분한 저장공간(배열)을 만들어 놓고 수신한 바이트들을 배열 안에 순서대로

차곡차곡 쌓아 두는거죠. 차례대로 쌓여있다면 그 배열을 검사하면서 내가 정한 패킷에 맞는 데이터가 있다면 빼서 사용하는겁니다.

 

밑에 소스 첨부 하겠습니다~ 어떤 함수를 사용했는지 참고하시고 자신만의 통신을 구현해 보시길~

 

 

 

 

----------------------------------------------- 7월 27일 추가내용 --------------

http://procider.tistory.com/201

저는 Arduino MEGA2560 사용하는데요, 위 블로그에 나와있는 젠더를 사용해서 전력 공급을 해결했습니다~

Arduino MEGA ADK for android 는 젠더가 없어도 될거같습니다~

 

Posted by 너를위한노래