🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

2307閲覧

serialport.openが動かない

akito0705

総合スコア23

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2019/10/09 09:18

編集2019/10/09 11:37

Unity,Arduino,oculus questを用いてシリアル通信をしたいと考えています。
現状シリアル通信のopen関数が起動せずに困っています。

こちらのサイトを参考にしています。
https://usupra.wordpress.com/2018/07/02/unity%E3%81%A8arduino%E3%81%A7%E7%9B%B8%E4%BA%92%E9%80%9A%E4%BF%A1%E3%82%92%E3%81%99%E3%82%8B%E3%80%82/

試したこと
新規プロジェクトを作成しファイルをコピペして実行(成功)
新規シーンを作成しファイルをコピペして実行(oculusでデバックしたところ同じくopenで動かなくなってしまいました。)
デバック用にtextを表示して実行したところ、
Col.linejudge = "serialport = " + serialPort_.PortName;
までは表示されたがopen関数が動かずその先が表示されなかった。

よろしくおねがいします。

追記

いじっていたらエラーが変わりました。
今まで入っていたOpen()のtryに入らなくなり、linejudgeにtryに捕まったと表示されるようになりました。
e.messageの内容を表示したところno such file or directryと表示されました。
特にファイルを弄ったりした記憶はなく何のことなのかわかりません。

よろしくおねがいします。

SerialHandler

1using UnityEngine; 2using System.Collections; 3using System.IO.Ports; 4using System.Threading; 5 6public class SerialHandler : MonoBehaviour 7{ 8 public delegate void SerialDataReceivedEventHandler(string message); 9 public event SerialDataReceivedEventHandler OnDataReceived; 10 11 public string portName = "COM8"; //変更する必要あり 12 public int baudRate = 38400; // ボーレート(Arduinoに記述したものに合わせる) 13 14 private SerialPort serialPort_; 15 private Thread thread_; 16 private bool isRunning_ = false; 17 18 private string message_; 19 private bool isNewMessageReceived_ = false; 20 21 void Awake() 22 { 23 Open(); 24 } 25 26 void Update() 27 { 28 if (isNewMessageReceived_) 29 { 30 OnDataReceived(message_); 31 } 32 isNewMessageReceived_ = false; 33 } 34 35 void OnDestroy() 36 { 37 Close(); 38 } 39 40 private void Open() 41 { 42 Col.linejudge = "open入った"; 43 try 44 { 45 serialPort_ = new SerialPort(portName, baudRate); 46 Col.linejudge = "serialport = " + serialPort_.PortName; 47 serialPort_.Open(); 48 Col.linejudge = serialPort_.IsOpen.ToString(); 49 } 50 catch(System.Exception e) 51 { 52 Col.linejudge = "tryに捕まった"; 53 } 54 55 isRunning_ = true; 56 57 thread_ = new Thread(Read); 58 thread_.Start(); 59 } 60 61 private void Close() 62 { 63 isNewMessageReceived_ = false; 64 isRunning_ = false; 65 66 if (thread_ != null && thread_.IsAlive) 67 { 68 thread_.Join(); 69 } 70 71 if (serialPort_ != null && serialPort_.IsOpen) 72 { 73 serialPort_.Close(); 74 serialPort_.Dispose(); 75 } 76 } 77 78 private void Read() 79 { 80 while (isRunning_ && serialPort_ != null && serialPort_.IsOpen) 81 { 82 try 83 { 84 message_ = serialPort_.ReadLine(); 85 isNewMessageReceived_ = true; 86 } 87 catch (System.Exception e) 88 { 89 Debug.LogWarning(e.Message); 90 } 91 } 92 } 93 94 public void Write(string message) 95 { 96 try 97 { 98 serialPort_.Write(message); 99 } 100 catch (System.Exception e) 101 { 102 Debug.LogWarning(e.Message); 103 } 104 } 105}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おそらくそのポート名が間違ってます
Teratermなどのターミナルソフトで、そのポートを開いてみて確認してみてはどうでしょうか

投稿2019/10/09 09:38

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akito0705

2019/10/09 09:41

回答ありがとうございます。 ポート番号、ボーレートに関しては自分で設定しており、この設定で別プロジェクトで起動してもしっかり動きました。 ポート名とはそれ以外のことでしょうか?
y_waiwai

2019/10/09 09:44

それで動いてるならそれでいいですが。 繰り返しますが、Teratermでそのポート名で開いてみては?
akito0705

2019/10/09 10:00 編集

teratarmというものを使ったことがなく、今入れてみたのですが、これはどうすればokなのでしょうか? 設定でボーレート、ポート番号を設定したところ接続はできたようですが何も表示されず、キーボードも反応しません(追記:すみません、文字は打てました)
y_waiwai

2019/10/09 10:02

それで実際にシリアルポートからデータは出てるでしょうか。 また、ポートから受信した文字列もそれで表示できます。 それでシリアルポートが、そのポート番号で、そのボーレートで実際に動くのが確認できます
akito0705

2019/10/09 10:12

使い方がわからず再起動してみたら文字が一切打てなくなってしまいました。。。 お手数ですがよければ使い方や参考サイトを教えていただきたいです。
y_waiwai

2019/10/09 10:16

そのポートがなにかおかしいってことでしょうか。 使い方と言っても、ポート名とボーレートを指定するだけですが。 ArduinoIDEでシリアルポートモニタ起動するのと一緒ですよ
akito0705

2019/10/09 10:19

失礼しました。使い方がわかっていませんでした。 arduinoの方にserial.printを書き込んだところteratermの方にしっかり表示されました
y_waiwai

2019/10/09 10:22

それで確認取れたら、わるいのはSerialport周りではないって話になりますね
akito0705

2019/10/09 10:25

serialport周りで悪くない、新規プロジェクトでも起動するとなると、悪いのはoculusを用いたシリアル通信ということでしょうか?いくつか記事を拝見しましたが特に特別なにかしていることはなかったと思うのですが、何かしらの設定が必要なのでしょうか
y_waiwai

2019/10/09 10:27

本当にそのOpen関数で止まってるのか確認してみては。 そこでブレークポイント設定して実行を止めて、その関数で止まるのかを見てみたらどうでしょう
akito0705

2019/10/09 10:34

oculusだとデバックが使えないという話を聞いていましたので、その代わりとしてtextを表示させていました。open関数の1つ上の代入は成功しているのに1つ下の代入は失敗しています。
y_waiwai

2019/10/09 10:43 編集

話じゃなく実際にやってみては。VisualStudioを使ってるなら、その行の左側でクリックしたらマークが出てそこで実行を止めれます serialPort_.Open(); の行で実行を止め、そこで止まってしまうのかどうかを見ましょう
akito0705

2019/10/09 10:58

デバックのやり方を教えていただきたいです。 VSを使っているのですが、特に何も設定せずデバッグの開始を押しても何も表示されずに終わってしまいます。 変数など何も表示されないのですが使い方が違うのでしょうか?
akito0705

2019/10/09 11:06

自分も先程そのサイトは拝見しましたが、変数を新しく設定してもローカルのところに何も表示されずに終わってしまいます・・・
y_waiwai

2019/10/09 11:08

ブレークポイントを設定してそこで止めればでてきますよ
akito0705

2019/10/09 11:16

普通にデバッグ開始ボタンを押すだけですよね? 変数を設定、breakpointを設定してもローカル画面、自動画面に何も表示されませんでした。 出力のところに Loaded: モジュール: C:\Program Files\Unity\Hub\Editor\2020.1.0a5\Editor\Data\Managed\Unity.CecilTools.dll のようなコードが大量に出てきて止まってしまいます。
akito0705

2019/10/09 11:48

unity側で再生ボタンを押すとやはり固まって動かなくなってしまいます。 なぜかtry_catch部分でエラーがあり、e.messageにno such file or directionと表示されるようになったのですが、これがどのfileを探しているのかわかりません。 検討が付けば教えていただきたいです。
y_waiwai

2019/10/09 12:05

うーん、も一度落ち着いて最初からやってみたらどうでしょう。。
akito0705

2019/10/09 12:19

そうですね。 今日は1度諦めてまた最初からやってみたいと思います。 お付き合い頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問