search
LoginSignup
12
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

2015-09-22 unity 5 > RS-232C受信成功 > ReadByte()を使えばいい

動作確認
Unity 5.1.3-f1 on MacOS X 10.8.5

Unity5でRS-232C受信がうまくいってなかったが、成功する方法が見つかった。

参考になったのは以下のQA
answers.unity3d

要点は以下。
- ReadLine()はフリーズする
- ReadTimeout=1とした時、ReadByte()はフリーズしない

こちらで動作確認したコードは以下。

rcvCS.cs
using System.Collections;
using System.IO.Ports;
using UnityEngine.UI;

public class rcvCS : MonoBehaviour {
    SerialPort sp = new SerialPort("COM3", 9600);

    public Text T_rcv;

    private string lastrcvd = "";

    void Start () {
        sp.Open ();
        sp.ReadTimeout = 1;
    }

    // Update is called once per frame
    void Update () {
        byte rcv;
        char tmp;
        try {
            rcv = (byte)sp.ReadByte();
            if (rcv != 255) {
                tmp = (char)rcv;
                lastrcvd = lastrcvd + tmp.ToString();
                T_rcv.text = lastrcvd;
            }
        }
        catch(System.Exception) {
        }
    }
}

COM4でhelloと入力した文字がCOM3で受信できた。

Win8x64pro.jpg



以下は、Unity 5でのRS-232C受信について得た事項 (Unity 5.1.3f1で確認)
  • ReadLine()はフリーズする
  • Read()も複数文字受信ではフリーズする
  • ReadTimeout=1とした時、ReadByte()はフリーズしない
  • Coroutine, ThreadでやってもReadLine()を使う限り受信できない
  • ByteToRead()はNullReference()が発生する
  • 上記は(おそらく)Unity4では問題なかった (Unity4で成功例がいくつかある)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
12
Help us understand the problem. What are the problem?