実現したいこと
Unityでシリアル通信を受信する
前提
・Unity2022
・対象プラットフォームは"Windows, Mac, Linux"に設定
・Api Compatibility Levelは,.NET Standard 2.0から.NET FrameWorksに変更済
発生している問題・エラーメッセージ
主に以下二つのサイトを参考に,System.IO.Portsのみを使う方法とUniRXも使う方法それぞれ試し,細かい修正もいろいろ試したが駄目でした.シリアル通信の受信自体は他のソフトでできているので,完全にUnityの問題と思われます.ボーレートやCOMは確認済み.
https://qiita.com/Ninagawa123/items/f6595dcf788dd316be8a
https://makaroni3018.hatenablog.com/entry/2022/07/27/171524
シリアル通信はArduinoから受信していて,1秒ごとにメッセージが来るようにしました.
基本はエラーメッセージも受信データも共に表示されず,またシリアル通信のタイムアウトを設定(50ms)すると永遠にタイムアウトが起きた旨のエラーが繰り返し表示されます.
なにか原因に心当たりのあるかたがいたらご教授頂けると助かります.
【追記】
コードを追記するようご指摘を頂きました.基本的に試したことは上記サイトと全く同じなので記載しなかったのですが,直近で試したコードを追記させていただきます.
SerialPort.IsOpenなどをLogに出したところ,一応COM3を認識はしているようでした.
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.IO.Ports; 5 6public class SerialComm : MonoBehaviour 7{ 8 private SerialPort serialPort; 9 [SerializeField] 10 private string portName; 11 [SerializeField] 12 private int baudrate; 13 14 // Start is called before the first frame update 15 void Start() 16 { 17 foreach(var port in SerialPort.GetPortNames()) 18 { 19 Debug.Log(port); 20 } 21 22 serialPort = new() 23 { 24 WriteTimeout = 50, 25 ReadTimeout = 50, 26 PortName = portName, 27 BaudRate = baudrate 28 }; 29 serialPort.Open(); 30 } 31 32 // Update is called once per frame 33 void FixedUpdate() 34 { 35 Debug.Log(serialPort.IsOpen); 36 if (serialPort.IsOpen) 37 { 38 string data = serialPort.ReadLine(); 39 Debug.Log(data); 40 } 41 } 42}

回答2件
あなたの回答
tips
プレビュー