読者です 読者をやめる 読者になる 読者になる

The jonki

呼ばれて飛び出てじょじょじょじょーんき

[Unity][Arduino] UnityからArduinoに繋がったサーボをシリアル通信で制御する

Unityからシリアル通信でArduino側に繋がったサーボを制御(角度送るだけだけど)してみました。とりあえず動作確認レベルなのでひどいコードです。
デフォルトだとSystem.IO.Portで怒られるので下記を参考に.Net 2.0にビルド設定を変えておいてください。
error CS0234: The type or namespace name `Ports' does not exist in the namespace `System.IO'

Unity
using UnityEngine;
using System.Collections;
using System.IO.Ports;

public class SerialReceiver : MonoBehaviour {
	private static SerialPort sp = new SerialPort("COM3", 9600);
	
	// Use this for initialization
	void Start () {
		OpenConnection();
	}
	
	// Update is called once per frame
	void Update () {
		if(Input.GetKeyDown(KeyCode.A)) {
			Debug.Log("Send message " + Input.mousePosition.x);
			sp.Write(Input.mousePosition.x.ToString() + "\0");
		}
	}
	 
	void OnApplicationQuit() 
	{
		sp.Close();
	}
	
	void OpenConnection() {
		if(sp != null) {
			if(sp.IsOpen) {
				sp.Close();
				Debug.LogError("Failed to open Serial Port, already open!");
			} else {
				sp.Open();
				sp.ReadTimeout = 50;
				Debug.Log("Open Serial port");
			}
		}
	}
}
Arduino
#include <Servo.h>

Servo servo;
char buffer[5];
void setup(){
    Serial.begin(9600);
    servo.attach(3);
}

void loop(){
    int i = 0;
    while(1) {
        if(Serial.available()) {
            buffer[i] = Serial.read();
            if(buffer[i] == '\0') {
                servo.write(atoi(buffer));
                break;
            }
            i++;
        }
    }
}