QA@IT

C#における文字列の分割,配列化について

10299 PV

Unity-Arduino間でシリアル通信を行おうとしています.

Arduino側プログラム
...
Serial.println(sensorValue0);
Serial.print("\t");
Serial.println(sensorValue1);
Serial.print("\t");
Serial.println(sensorValue2);
Serial.print("\t");
Serial.println(sensorValue3);
Serial.print("\t");
Serial.println(sensorValue4);
Serial.print("\n");
...

これらを分割、配列化したいと考えています.
あるサイトを参考に実際にやってみたところ,
配列に入らず困っています.
どのようにすれば,うまく分割できるのでしょうか?

Unity側プログラム
**...

void Update()
{
if (isNewMessageReceived_)
{
OnDataReceived(message_);
var data = message_.Split(
new string[] { "\t" }, System.StringSplitOptions.None);
if (data.Length < 5) return;

        try
        {
            dataText1.text = data[0];
            dataText2.text = data[1];
            dataText3.text = data[2];
            dataText4.text = data[3];
            dataText5.text = data[4];
        }
        catch (System.Exception e)
        {
            Debug.LogWarning(e.Message);
        }
    }
    isNewMessageReceived_ = false;
}

**
private void Read()
{
while (isRunning_ && serialPort_ != null && serialPort_.IsOpen)
{
try
{
message_ = serialPort_.ReadLine();
isNewMessageReceived_ = true;
}
catch (System.Exception e)
{
Debug.LogWarning(e.Message);
}
}
}
...**

  • message にはどのような文字列が入るのですか? それを書いていただくと「Unity-Arduino間でシリアル通信」とかは全く知らない(C# しか知らない)自分のような者でも答えが出せそうですので、回答が得やすいかもしれません。 -
  • Shu様が回答されているような文字列だと考えております. -
  • であれば Shu さんの回答の通り対処すれば解決するはずです。何か疑問があるのでしょうか? 疑問があれば Shu さんの回答のコメント欄に書いてはいかがですか? -

回答

http://www.musashinodenpa.com/arduino/ref/index.php?f=0&pos=3319

によると提示のArduino側プログラムの処理は

[sensorValue0]<cr><lf><tab>[sensorValue1]<cr><lf><tab>・・・<cr><lf><tab>[sensorValue4]<cr><lf><lf>

といった内容が送られると思われます。

なのでmessageへどのように読み込むかによると思いますが、ReadLine的な読込をしているとすると最初の[sensorValue0]だけが読まれると思います。

[sensorValue0]<tab>[sensorValue1]<tab>・・・<tab>[sensorValue4]<lf>

として送信したいのであればprintlnではなくprintを使われた方がよいかと思います。
そちらを修正できないのであれば読む側で工夫する必要があります。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。