Пример #1
0
    void analisysGetData(string data)
    {
        if (data == null)
        {
            return;
        }
        if (data.Length <= 0)
        {
            return;
        }


        //カンマ区切りでデータを分ける。
        //3バイトでない場合は何もしない。
        string[] Onebyte = data.Split(splitPoint);

        if (Onebyte.Length != 3)
        {
            return;
        }

        //Debug.LogWarning("[Onebyte]" + Onebyte[0] + " : " + Onebyte[1] + " : " + Onebyte[2]);

        //---1バイト目---
        //0~7ビットを見て1バイト目のデータだと判断する
        //全てTrue

        //---2バイト目---
        //ステータス

        //---3バイト目---
        //目標スピード(絶対値)


        try
        {
            //ヘッダーの判定
            if (int.Parse(Onebyte[0]) != 0xFF)
            {
                return;
            }

            //ステータスの取得
            ReceiveCmd cmd = (ReceiveCmd)(int.Parse(Onebyte[1]));

            //必要な情報を取得する
            _arData.isPulseOn         = ReceiveCmd.flg_PulseOn == (cmd & ReceiveCmd.flg_PulseOn);
            _arData.isNormalRotation  = ReceiveCmd.flg_NormalRotation == (cmd & ReceiveCmd.flg_NormalRotation);
            _arData.isReverseRotation = ReceiveCmd.flg_ReverseRotation == (cmd & ReceiveCmd.flg_ReverseRotation);

            //目標スピードの取得
            _arData.targetSpeed = int.Parse(Onebyte[2]);
        }
        catch (Exception)
        {
            return;
        }
    }
    bool chkHeader(ReceiveCmd cmd)
    {
        bool sw     = false;
        bool isflg0 = ReceiveCmd.flg_0 == (cmd & ReceiveCmd.flg_0);
        bool isflg1 = ReceiveCmd.flg_1 == (cmd & ReceiveCmd.flg_1);
        bool isflg2 = ReceiveCmd.flg_2 == (cmd & ReceiveCmd.flg_2);
        bool isflg3 = ReceiveCmd.flg_3 == (cmd & ReceiveCmd.flg_3);
        bool isflg4 = ReceiveCmd.flg_4 == (cmd & ReceiveCmd.flg_4);
        bool isflg7 = ReceiveCmd.flg_7 == (cmd & ReceiveCmd.flg_7);

        //Debug.LogWarning("[chkHeader]" + cmd);

        if (isflg0 && isflg1 && isflg2 && isflg3 && isflg4 && isflg7)
        {
            sw = true;
        }

        return(sw);
    }
    void analisysGetData(string data)
    {
        GetDataSize = 0;
        if (data == null)
        {
            return;
        }
        if (data.Length <= 0)
        {
            return;
        }

        //カンマ区切りでデータを分ける。
        //1バイト目:ヘッダー、2バイト目:モーター1,2のステータス
        //2バイトでない場合は何もしない。
        string[] Onebyte = data.Split(splitPoint);

        if (Onebyte.Length != 2)
        {
            return;
        }

        try
        {
            //ヘッダーの判定
            if (int.Parse(Onebyte[0]) != 129)
            {
                return;                                 //129 -> 0b10000001
            }
            UnipolarStatus = (ReceiveCmd)(int.Parse(Onebyte[1]));
            GetDataSize++;
            //Debug.LogWarning("cmd : " + int.Parse(data) + "  ->  " + UnipolarStatus);
        }
        catch (Exception)
        {
            return;
        }
    }
    void analisysGetData(string data)
    {
        if (data == null)
        {
            return;
        }
        if (data.Length <= 0)
        {
            return;
        }


        //カンマ区切りでデータを分ける。
        string[] Onebyte     = data.Split(splitPoint);
        int      GetDataSize = Onebyte.Length;

        if (GetDataSize < 2)
        {
            return;
        }

        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        sb.Append("[GetData]");
        for (int i = 0; i < GetDataSize; i++)
        {
            sb.Append(Onebyte[i]);
            sb.Append(" : ");
        }
        //Debug.LogWarning(sb.ToString());


        //1バイト目のヘッダーを見て処理を切り替える
        //0xFF:ステータス(2バイト)
        //0xFE:オフセット(5バイト)
        //0xFD:Quaternion(5バイト)
        //0xFC:WorldAccel(4バイト)
        try
        {
            switch (int.Parse(Onebyte[0]))
            {
            //ステータスの取得
            case 0xFF:
                if (GetDataSize != 2)
                {
                    break;
                }
                ReceiveCmd cmd = (ReceiveCmd)(int.Parse(Onebyte[1]));
                _arData.isFinishInitialize = ReceiveCmd.flg_7 == (cmd & ReceiveCmd.flg_7);
                break;

            //オフセットの取得
            case 0xFE:
                if (GetDataSize != 5)
                {
                    break;
                }
                _arData.CalOfs[0] = int.Parse(Onebyte[1]);
                _arData.CalOfs[1] = int.Parse(Onebyte[2]);
                _arData.CalOfs[2] = int.Parse(Onebyte[3]);
                _arData.CalOfs[3] = int.Parse(Onebyte[4]);
                break;

            //Quaternionの取得
            case 0xFD:
                if (GetDataSize != 5)
                {
                    break;
                }
                //[w,x,y,z]
                _arData._q[0] = float.Parse(Onebyte[1]);
                _arData._q[1] = float.Parse(Onebyte[2]);
                _arData._q[2] = float.Parse(Onebyte[3]);
                _arData._q[3] = float.Parse(Onebyte[4]);

                //変換
                GetQuaternion = new Quaternion(-1.0f * _arData._q[1], -1.0f * _arData._q[3], -1.0f * _arData._q[2], _arData._q[0]);
                break;

            //WorldAccelの取得
            case 0xFC:
                if (GetDataSize != 4)
                {
                    break;
                }
                //[x,y,z]
                _arData._worldAccel = new Vector3(int.Parse(Onebyte[1]), int.Parse(Onebyte[2]), int.Parse(Onebyte[3]));
                break;


            default:
                break;
            }
        }
        catch (System.Exception)
        {
        }
    }
    void analisysGetData(string data)
    {
        if (data == null)
        {
            return;
        }
        if (data.Length <= 0)
        {
            return;
        }


        //カンマ区切りでデータを分ける。
        //3バイトでない場合は何もしない。
        string[] Onebyte = data.Split(splitPoint);

        if (Onebyte.Length != 3)
        {
            return;
        }

        //Debug.LogWarning("[Onebyte]" + Onebyte[0] + " : " + Onebyte[1] + " : " + Onebyte[2]);

        //---1バイト目---
        //0~4,7ビットを見て1バイト目のデータだと判断する
        //flg_7 : true
        //flg_6 : P1(false) or P2(true)
        //flg_5 : プラス(false) or マイナス(true)
        //flg_4~_0 : true

        //---2バイト目---
        //flg_7 : false
        //flg_6~_0 : 整数(0~99)

        //---3バイト目---
        //flg_7 : false
        //flg_6~_0 : 小数(0~99)


        //ヘッダーの判定
        try
        {
            ReceiveCmd cmd = (ReceiveCmd)(int.Parse(Onebyte[0]));
            //Debug.LogWarning("cmd : " + int.Parse(Onebyte[0]) + "  ->  " + cmd);


            if (!chkHeader(cmd))
            {
                return;
            }

            //ヘッダーから必要な情報を取得する
            bool isflg5 = ReceiveCmd.flg_5 == (cmd & ReceiveCmd.flg_5);
            bool isflg6 = ReceiveCmd.flg_6 == (cmd & ReceiveCmd.flg_6);

            int _no = 0;    //上下or左右
            if (isflg6)
            {
                _no = 1;
            }
            int isMinus = 1;
            if (isflg5)
            {
                isMinus = -1;
            }

            //整数部分の取得
            float _v = int.Parse(Onebyte[1]);
            if (_v > MAX_VALUE)
            {
                return;                    //最大値を超えている場合は抜ける
            }
            //小数部分の取得
            float _v2 = int.Parse(Onebyte[2]);

            _v2 /= 100.0f;
            _v  += _v2;

            //最大値を超えないようにする
            if (_v > MAX_VALUE)
            {
                _v = MAX_VALUE;
            }

            //最小値を丸める
            if (_v < MIN_VALUE)
            {
                _v = 0.0f;
            }

            _v *= isMinus;

            Pos[_no] = _v;
            //if(_no == 0) Debug.LogWarning(EventTrigger.Instance.Pos[_no]);
        }
        catch (Exception)
        {
            return;
        }
    }
Пример #6
0
    void analysisGetData(string data)
    {
        if (data == null)
        {
            return;
        }
        if (data.Length <= 0)
        {
            return;
        }

        //カンマ区切りでデータを分ける。
        string[] Onebyte = data.Split(splitPoint);

        if (Onebyte.Length != 5)
        {
            return;
        }
        //Debug.LogWarning("[Onebyte]" + Onebyte[0] + " : " + Onebyte[1] + " : " + Onebyte[2] + " : " + Onebyte[3] + " : " + Onebyte[4]);

        //---1バイト目---
        //0~7ビットを見て1バイト目のデータだと判断する
        //全てTrue

        //---2バイト目---
        //ステータス

        //---3バイト目---
        //1サイクルの時間(us)

        //---4バイト目---
        //1サイクルのOn時間(us)

        //---5バイト目---
        //実行回数

        try
        {
            //ヘッダーの判定
            if (int.Parse(Onebyte[0]) != 0xFF)
            {
                return;
            }

            //ステータスの取得
            ReceiveCmd cmd = (ReceiveCmd)(int.Parse(Onebyte[1]));

            //必要な情報を取得する
            _arData.isPhotoSensorMode      = ReceiveCmd.flg_6 == (cmd & ReceiveCmd.flg_6);
            _arData.isValveOneLoopEnd      = ReceiveCmd.flg_5 == (cmd & ReceiveCmd.flg_5);
            _arData.isValveOn              = ReceiveCmd.flg_4 == (cmd & ReceiveCmd.flg_4);
            _arData.isPumpPlay             = ReceiveCmd.flg_3 == (cmd & ReceiveCmd.flg_3);
            _arData.isValvePlay            = ReceiveCmd.flg_2 == (cmd & ReceiveCmd.flg_2);
            _arData.isPhotoSensorTriggerOn = ReceiveCmd.flg_1 == (cmd & ReceiveCmd.flg_1);

            //1サイクルの時間(us) ※ms変換
            _arData._OneTime = float.Parse(Onebyte[2]) / 1000;
            //1サイクルのOn時間(us) ※ms変換
            _arData._OneTime_On = float.Parse(Onebyte[3]) / 1000;
            //1サイクルを実行する回数
            _arData._CycleCnt = int.Parse(Onebyte[4]);
        }
        catch (Exception)
        {
            return;
        }
    }