---
# System prepended metadata

title: シリアル通信のデータを解読する（パースする）

---

シリアル通信のデータを解読する（パースする）
===


# 実際のソースコード

```csharp=
            //data:シリアルポート全て
            string data = serialPort.ReadLine();
            string pitch = data.Substring(1, data.IndexOf("y") - 1); //文字列の1文字目から"y"の1つ前まで読み取る(pitch)
            string roll = data.Substring(data.IndexOf("y") + 1); //"y"~
            roll = roll.Substring(0, roll.IndexOf("z") - 1); //"z"までの文字をaccYに代入(roll)
            string yaw = data.Substring(data.IndexOf("z") + 1); //"z"~
            yaw = yaw.Substring(0, yaw.IndexOf("l") - 1); //"a"までの文字をaccZに代入(yaw)
            string light = data.Substring(data.IndexOf("l") + 1); //センサーが反応しているか(ON:0, OFF:1)
            Debug.Log("Light:" + light); //logでlightの0/1を確認

            float x = float.Parse(roll) + 360; //分解した文字たちは文字列もままなのでParse(String)で数字に直す
            float y = float.Parse(pitch) + 360;
            float z = float.Parse(yaw) + 360;

            //x = roll+360, y = pitch+360, z = yaw+360

            gameObject.transform.rotation = Quaternion.Euler(-90 + x, -90 - z, y); //ローカル座標で角度を変更
            //初期値が立っている状態にするためにxに-90を足しています。
            //横の向きはそのままだと反転しているのでzはマイナスで入力するようにしています。
```

# データの状態

## 最初の送られてくるデータ
x1.000y2.000z3.000l1

1. data  = x1.000y2.000z3.000l1
3. pitch = 0.000
4. roll  = 2.000z3.000l1
5. roll  = 2.000
6. yaw   = 3.000