메인 화면

검색 화면

 조종 화면

세팅 화면

 

이전 버전 테스트 영상(ATmega2560)


이 영상은 내 폰으로 테스트한 것. UI를 바꾸기 전임



최근(130822) 버전 테스트 영상(ATmega2560)


다른 분 휴대폰으로 테스트하는걸 찍음. 가로에서 조종화면이 뜨도록 변경함

영상이 쓸데없이 고화질 ^^;;;



발표용 PPT(내용은 이하에 쓰여진 것과 거의 같음)

드라군 통신 파트.ppsx


제작 소요 기간 : 2013 7월 22일 월요일 ~ 쉬는시간 틈마다 제작(약 일주일+알파)

제작 인원 : 나

개발 환경 : Android(2.3.4 진저브레드 / 4.0.4 아이스크림 샌드위치), Windows XP/7 + ADT Bundle

소스 목록(src 9개, layout 6개)


개요

1. FB155BC 모듈이 HID프로파일을 지원하는 버전이 아니었으므로 SPP(Serial Port Profile)통신을 이용하였음

-> HID프로파일이 없다고 휴대폰 블루투스와 통신이 안되는건 아님

- HID : Human Interface Device의 줄임말이며, 키보드나 마우스 등의 주변장치를 의미함, 즉 블루투스 무선 키보드 등을 만들 때 활용되는 것

2. 블루투스를 처음 다루어 보았으므로 헤맨 점이 많았음(UUID라던지 UUID 등)

3. (미완)전송하는 값은 유동적으로 변경될 수 있으므로 Setting에서 전송 값을 바꿀 수 있도록 하는 것이 목표

4, (추가)센서 값을 ADC로 읽어온 후, 모듈을 이용해 기기로 값을 전송한 후 어플에서 확인할 수 있도록 함


앱 흐름

1. 장치가 블루투스를 지원하는가?

-> O : 다음으로 진행

-> X : Toast를 띄우며 프로그램을 종료

2. 장치의 블루투스가 Disable상태인가?

-> O : Enable해준다

-> X : 바로 진행

3. 기기를 검색하여 거리 안에 있는 모든 BluetoothDevice들을 ListView로 띄워준다.

4. 아이템 클릭시 AlertDialog로 접속할지 물어본다.

-> O : BluetoothDevice를 갖는 ArrayList에서 클릭한 값(OnItemClickListener의 인자 postion이용)을 가져온 후,

SPP UUID({00001101-0000-1000-8000-00805F9B34FB})를 이용해 BluetoothSocket을 만들고 접속을 시도(connect())

-> 접속 시도시 오류가 발생할 수 있는데, 주로 검색은 하였으나 통신하기에 거리상 제약이 있을 경우, UUID가 잘못된 경우의 두가지일 확률이 높다!

-> X : 아무 일도 일어나지 않고 창을 없앤다

5. OutputStream을 만들어 블루투스 메시지를 보낼 수 있게 설정한다.

6. 사용자가 편하게 조종할 수 있도록 UI를 화면상에 보여준다.(Portrait)

7. (추가)블루투스 수신 스레드를 생성하고, 값이 들어오는지 InputStreamread()를 통해 읽어오고, Handler를 생성해 TextView의 값을 변경할 수 있도록 한다.

- InputStream의 read()함수는 블로킹 함수이므로 값이 들어오지 않으면 무한히 기다릴 것이다. 이는 작동을 방해할 수 있으므로 Thread로 빼두어 서브스레드에서 작동하게 한다.

- 스레드 내부에서 TextView등 UI의 값을 변경하는 것은 불가능하다. 그러므로 Handler를 만들어 Handler가 값을 바꿀 수 있도록 한다.

-> UI자체도 스레드에 관해 관리되며, 외부 스레드에서 접근이 불가능 하다는 모양이다

8. 버튼이 클릭되었거나(기능버튼) 터치되어있는가?(방향버튼)

-> O : OutputStreamwrite()함수를 이용하여 해당 버튼에 대응되는 값을 전송한다. 전송은 문자열도 가능하나, 기본적으로 unsigned char에 대응되게 하였음.

-> X : 입력을 기다림

- 굳이 방향버튼을 터치로 받게 한 이유 : 계속 앞으로 가고싶을 때, 연타해야하므로 불편할 수 있어 누르고 있으면 값이 계속 전송되도록 하였음.....

-> 단, 드라군 모드에서는 연속 입력이 되면 곤란하여 모드를 구분해놓고 터치리스너/클릭리스너를 번갈아 사용하도록 바꾸었음

- 일정 시간 이상 대기시 새로운 값을 전송


AVR ATmega2560 프로그램 흐름

1. USART1을 사용할 수 있게 설정

-> 분주비 9600, 데이터비트 8비트, 정지비트 1, 패리티 없음

-> 수신 인터럽트를 받게 설정

2. 블루투스 모듈(FB155BC)에 AT명령어 중 하나인 "AT+BTSCAN\r\n"을 입력해 스캔 가능하게 설정한다.

-> 이게 되지 않으면 휴대폰에서 검색 자체가 불가능하다.

3. 수신시 vector36함수(USART1용)에서 미리 정해놓은 버튼 값에 따라 switch문으로 처리하도록 설정한다.

4. 송신을 원하는 값을 SendString등의 함수로 제작해 전송한다. 수신과 거의 원리가 비슷하므로 생략

'완성 프로젝트' 카테고리의 다른 글

[TCP/IP] 다대다 채팅  (8) 2013.10.01
[Win32 API] 세븐 세그먼트 타이머  (3) 2013.08.28
[Python] 인터넷 검색 프로그램  (3) 2013.06.15
[Processing] 똥피하기  (4) 2013.02.25
HTML5+자바스크립트 습작  (0) 2013.02.25

+ Recent posts