가상현실프로그래밍 9주차

2021. 11. 12. 01:27학교수업

아두이노 IDE

- 작고 간단한 통합개발환경

- 초보자를 위해 꼭 필요한 기능들만으로 구성

- 한 번의 클릭으로 컴파일에서 업로드까지 진행

- JAVA로 구현하여 OS 간 이식성이 뛰어남

- 디버깅 기능이 존재하지 않음

 

pinMode : 지정한 핀(pin)의 모드(mode) 설정

- void pinMode(uint8_t pin, uint8_t mode);

digitalWrite : 지정한 핀(pin)으로 값(value) 출력

- void digitalWrite(uint8_t pin, uint8_t value);

digitalRead : 지정한 핀(pin)의 상태를 반환

- int digitalRead(uint8_t pin);

 

Unity & Arduino 연결

- PC는 외부 장비와 통신하기 위해 시리얼 통신(키보드, 마우스)과 병렬 통신(프린터)을 제공

- 시리얼 통신은 병렬 통신에 비해 더 멀리 보낼 수 있다.

- Baud Rate(통신속도)

1) 1초당 전송되는 bit수(bit per second)

2) 통신 속도에 영향을 받지 않으면 통상9600

3) 아두이노는 최대 115200 bps까지 지원

 

시리얼 통신 함수

- Serial.begin(통신속도) : 시리얼 통신의 소도를 설정

- Serial.print(출력값) : 데이터를 문자열 단위로 출력

- Serial.write() : 데이터를 byte 단위로 출력

- Serial.available() : 수신되어 저장되어 이는 byte수 리턴(최대 64)

- Serial.read() : 버퍼에서 1 바이트 read, 버퍼가 비어 있으면 -1 리턴

- Serial.end() : 통신 종료

- Serial.flush() : 현재 전송하고 있는 시리얼 데이터가 전송완료가 될 때까지 대기

 

아두이노 IDE 혹은 시리얼 monitor 와 unity를 동시에 사용할 수 없음.

-> 동일한 포트를 2개 application에서 사용 불가

Upload 할 때도 unity가 실행되어 있으면 안된다.(확인 중요)

 

Unity에서 시리얼 데이터 읽기

- 시리얼 통신 함수 사용을 위해 Api Compatibility Level 을 .NET 2.0 -> .NET 4.0으로 변경

-> start에서 arduino = new SerialPort("COM3", 9600); arduino.Open();으로 연결

-> update에서 int k = arduino.ReadByte(); print(k);

 

ReadByte함수는 읽을 데이터가 있을 때 까지 무한 대기 

-> Update에서 ReadByte 호출 시 Update가 제대로 실행이 안됨

-> 이를 해결하기 위해 start에 arduino.ReadTimeout = 10;을 이용해 읽는 것을 최대 10ms만 대기하고 데이터가 없으면 에러 발생을 시킴(try~catch를 이용하여 update함수를 구현)

 

ReadByte함수 대신 ReadLine함수를 호출해 line단위로도 데이터를 읽을 수 있다.

 

VSPE(Virtual Serial Port Emulator)로 가상 포트 만들기 가능

'학교수업' 카테고리의 다른 글

임베디드기초 10주차  (0) 2021.11.15
웹개발기초 11주차  (0) 2021.11.14
정보보호개론 9주차  (0) 2021.11.09
임베디드 기초 9주차  (0) 2021.11.08
사물인터넷의 이해 9주차  (0) 2021.11.07