Unity에서 Arduino에 직렬 통신 보내기
할 일
Unity에서 Arduino에 직렬 통신을 보내는 테스트를 수행합니다.
마지막 기사 Unity에서 Arduino로부터 직렬 통신 수신 반대입니다.
주요 참조 URL
환경
사전 준비
Unity에서 Arduino로부터 직렬 통신 수신
↑에 쓰여진 내용을 실시하여 움직이는 상태로 둡니다.
이 기사에서는 위와의 차이만 설명합니다.
Arduino 준비
Arduino 측의 스크립트는 간단하게 아래와 같이 합니다.
문자 "1"을 받으면 LED가 켜집니다.
Arduino#define LED_PIN 13 //LEDのピン番号。13は内蔵LED。
char data;
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
if ( Serial.available() > 0 ) { // 受信データがあるか?
data = Serial.read(); // 1文字だけ読み込む
if (data == 0x31) { //文字コード0x31、つまり"1"を受信したらLEDを光らせる。
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
}
}
}
Arduino에 쓰면 준비가 끝납니다.
Unity 설정 변경
Unity로부터 일정 간격으로 "1"이라는 문자를 시리얼로 보내고 싶습니다.
FixedUpdate 메소드를 사용하면 Unity의 프레임 업데이트마다의 명령과는 별도로 코드를 일정 간격으로 실행하는 설정을 할 수 있습니다. 먼저 그 "일정 간격"을 설정해 둡니다.
「Edit」→「Project Setting」→「Time」에서,
Fixed Timestep을 0.001(1/1000)로 설정합니다. (환경에 따라서는 0.01등이라도 괜찮습니다. 디폴트는 0.02와 같습니다.)
Unity 스크립팅
Unity에서 Arduino로 시리얼을 보내는 스크립트를 만듭니다.
SerialSend.cs를 만듭니다.
C# 의 스크립트를 작성해, 파일명을 「SerialReceive」로 합니다.
스크립트는 다음과 같이 합니다.
SerialReceive.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SerialSend : MonoBehaviour
{
//SerialHandler.cのクラス
public SerialHandler serialHandler;
int i = 0;
void FixedUpdate() //ここは0.001秒ごとに実行される
{
i = i + 1; //iを加算していって1秒ごとに"1"のシリアル送信を実行
if (i > 999) //
{
serialHandler.Write("1");
i = 0;
}
}
}
끝나면 저장합니다.
스크립트 연결
작성한 스크립트를 실행할 수 있습니다.
Assets 에 있는 스크립트 SerialSend 를 드래그 앤 드롭으로 히에랄 키 창의 객체 Serial_Test 에 연결합니다.
히에랄 키 창에서 Serial_Test를 클릭하여 오른쪽 검사기 창을 확인합니다.
Inspector의 SerialSend(Script)의 SerialHandler 상자에 히에랄 키 창의 Serial_Test를 드래그 앤 드롭하여 할당합니다.
또한 Inspector의 "SerialRead"를 선택 해제하여 비활성화합니다.
이것으로 준비가 완료됩니다.
실행
Unity 재생 버튼을 눌러 실행합니다.
잘하면 Arduino LED가 1초 간격으로 깜박입니다.
종료 방법
Unity의 재생 정지 버튼을 누른 후 Arduino 측의 리셋 버튼을 누릅니다. (슈퍼 중요)
Arduino 측의 리셋 버튼을 누르지 않으면 Unity가 시리얼 송수신 프로세스를 종료할 수 없으며 커서가 계속 돌릴 수 없습니다.
이번은 테스트이므로 그대로도 괜찮습니다만, 막상 실용이 되었을 때에는 코드에 타임 아웃 처리나 클로우즈 처리를 넣는 등, 한 번 더 필요할 것입니다.
결론
이제 최소한의 Unity→Arduino 간의 시리얼 통신도 가능하게 되었습니다.
양방향 통신이나 스피드 조정, 긴 데이터의 교환 등에 세세한 Tips가 필요와 같은 것 때문에, 그 근처를 조사해 갑니다.
Arduino 측의 스크립트는 간단하게 아래와 같이 합니다.
문자 "1"을 받으면 LED가 켜집니다.
Arduino
#define LED_PIN 13 //LEDのピン番号。13は内蔵LED。
char data;
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
if ( Serial.available() > 0 ) { // 受信データがあるか?
data = Serial.read(); // 1文字だけ読み込む
if (data == 0x31) { //文字コード0x31、つまり"1"を受信したらLEDを光らせる。
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
}
}
}
Arduino에 쓰면 준비가 끝납니다.
Unity 설정 변경
Unity로부터 일정 간격으로 "1"이라는 문자를 시리얼로 보내고 싶습니다.
FixedUpdate 메소드를 사용하면 Unity의 프레임 업데이트마다의 명령과는 별도로 코드를 일정 간격으로 실행하는 설정을 할 수 있습니다. 먼저 그 "일정 간격"을 설정해 둡니다.
「Edit」→「Project Setting」→「Time」에서,
Fixed Timestep을 0.001(1/1000)로 설정합니다. (환경에 따라서는 0.01등이라도 괜찮습니다. 디폴트는 0.02와 같습니다.)
Unity 스크립팅
Unity에서 Arduino로 시리얼을 보내는 스크립트를 만듭니다.
SerialSend.cs를 만듭니다.
C# 의 스크립트를 작성해, 파일명을 「SerialReceive」로 합니다.
스크립트는 다음과 같이 합니다.
SerialReceive.csusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SerialSend : MonoBehaviour
{
//SerialHandler.cのクラス
public SerialHandler serialHandler;
int i = 0;
void FixedUpdate() //ここは0.001秒ごとに実行される
{
i = i + 1; //iを加算していって1秒ごとに"1"のシリアル送信を実行
if (i > 999) //
{
serialHandler.Write("1");
i = 0;
}
}
}
끝나면 저장합니다.
스크립트 연결
작성한 스크립트를 실행할 수 있습니다.
Assets 에 있는 스크립트 SerialSend 를 드래그 앤 드롭으로 히에랄 키 창의 객체 Serial_Test 에 연결합니다.
히에랄 키 창에서 Serial_Test를 클릭하여 오른쪽 검사기 창을 확인합니다.
Inspector의 SerialSend(Script)의 SerialHandler 상자에 히에랄 키 창의 Serial_Test를 드래그 앤 드롭하여 할당합니다.
또한 Inspector의 "SerialRead"를 선택 해제하여 비활성화합니다.
이것으로 준비가 완료됩니다.
실행
Unity 재생 버튼을 눌러 실행합니다.
잘하면 Arduino LED가 1초 간격으로 깜박입니다.
종료 방법
Unity의 재생 정지 버튼을 누른 후 Arduino 측의 리셋 버튼을 누릅니다. (슈퍼 중요)
Arduino 측의 리셋 버튼을 누르지 않으면 Unity가 시리얼 송수신 프로세스를 종료할 수 없으며 커서가 계속 돌릴 수 없습니다.
이번은 테스트이므로 그대로도 괜찮습니다만, 막상 실용이 되었을 때에는 코드에 타임 아웃 처리나 클로우즈 처리를 넣는 등, 한 번 더 필요할 것입니다.
결론
이제 최소한의 Unity→Arduino 간의 시리얼 통신도 가능하게 되었습니다.
양방향 통신이나 스피드 조정, 긴 데이터의 교환 등에 세세한 Tips가 필요와 같은 것 때문에, 그 근처를 조사해 갑니다.
Unity에서 Arduino로 시리얼을 보내는 스크립트를 만듭니다.
SerialSend.cs를 만듭니다.
C# 의 스크립트를 작성해, 파일명을 「SerialReceive」로 합니다.
스크립트는 다음과 같이 합니다.
SerialReceive.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SerialSend : MonoBehaviour
{
//SerialHandler.cのクラス
public SerialHandler serialHandler;
int i = 0;
void FixedUpdate() //ここは0.001秒ごとに実行される
{
i = i + 1; //iを加算していって1秒ごとに"1"のシリアル送信を実行
if (i > 999) //
{
serialHandler.Write("1");
i = 0;
}
}
}
끝나면 저장합니다.
스크립트 연결
작성한 스크립트를 실행할 수 있습니다.
Assets 에 있는 스크립트 SerialSend 를 드래그 앤 드롭으로 히에랄 키 창의 객체 Serial_Test 에 연결합니다.
히에랄 키 창에서 Serial_Test를 클릭하여 오른쪽 검사기 창을 확인합니다.
Inspector의 SerialSend(Script)의 SerialHandler 상자에 히에랄 키 창의 Serial_Test를 드래그 앤 드롭하여 할당합니다.
또한 Inspector의 "SerialRead"를 선택 해제하여 비활성화합니다.
이것으로 준비가 완료됩니다.
실행
Unity 재생 버튼을 눌러 실행합니다.
잘하면 Arduino LED가 1초 간격으로 깜박입니다.
종료 방법
Unity의 재생 정지 버튼을 누른 후 Arduino 측의 리셋 버튼을 누릅니다. (슈퍼 중요)
Arduino 측의 리셋 버튼을 누르지 않으면 Unity가 시리얼 송수신 프로세스를 종료할 수 없으며 커서가 계속 돌릴 수 없습니다.
이번은 테스트이므로 그대로도 괜찮습니다만, 막상 실용이 되었을 때에는 코드에 타임 아웃 처리나 클로우즈 처리를 넣는 등, 한 번 더 필요할 것입니다.
결론
이제 최소한의 Unity→Arduino 간의 시리얼 통신도 가능하게 되었습니다.
양방향 통신이나 스피드 조정, 긴 데이터의 교환 등에 세세한 Tips가 필요와 같은 것 때문에, 그 근처를 조사해 갑니다.
Unity 재생 버튼을 눌러 실행합니다.
잘하면 Arduino LED가 1초 간격으로 깜박입니다.
종료 방법
Unity의 재생 정지 버튼을 누른 후 Arduino 측의 리셋 버튼을 누릅니다. (슈퍼 중요)
Arduino 측의 리셋 버튼을 누르지 않으면 Unity가 시리얼 송수신 프로세스를 종료할 수 없으며 커서가 계속 돌릴 수 없습니다.
이번은 테스트이므로 그대로도 괜찮습니다만, 막상 실용이 되었을 때에는 코드에 타임 아웃 처리나 클로우즈 처리를 넣는 등, 한 번 더 필요할 것입니다.
결론
이제 최소한의 Unity→Arduino 간의 시리얼 통신도 가능하게 되었습니다.
양방향 통신이나 스피드 조정, 긴 데이터의 교환 등에 세세한 Tips가 필요와 같은 것 때문에, 그 근처를 조사해 갑니다.
이제 최소한의 Unity→Arduino 간의 시리얼 통신도 가능하게 되었습니다.
양방향 통신이나 스피드 조정, 긴 데이터의 교환 등에 세세한 Tips가 필요와 같은 것 때문에, 그 근처를 조사해 갑니다.
참고
아래의 사이트를 참고로 했습니다. 고마워요.
Reference
이 문제에 관하여(Unity에서 Arduino에 직렬 통신 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ninagawa_Izumi/items/ff8ae0dbb1bf8a120866텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)