行いたい事
温度センサーを用いて温度を測定しており、Arduinoとunityをシリアル通信させています。そこで、Arduinoで処理したデータを閾値とする時どのようにすればいいか分からないです。
現在行えている事
unity側にて閾値の値を事前に決めておき閾値超えた時と超えてない時の処理についてはできています。Arduino側にて温度センサーで取得したデータの平滑化も行っています。
お聞きしたい事
unity側にてArduinoから得たデータを閾値として用いる方法を教えて頂きたいです。
コードの説明
閾値を0としておきstartを通過したときのArduinoからの出力を閾値としたいです。startのすぐ後にもう1つstartを用意して(ユーザの視点からはみえないようにする)startを通った時の値を閾値としたいです。実際に実行してみたところ、start1とstart2を入力の値が400ぐらいで通り抜けたので値を470ぐらいまであげたのにも関わらず閾値を超えた時の処理が行われなかったので悩んでおります。
###unity側でのコード
コード public class SerialCube : MonoBehaviour { public SerialHandler serialHandler; public float threshold = 0f; //閾値 public Vector3 velocity = new Vector3(0f, 0f, 1.0f); public Text sensorText; public Text startText; private bool levelDown = false; private int start; public static float starT { get; internal set; } void Start() { serialHandler.OnDataReceived += OnDataReceived; start = 0; setcountText(); } void OnDataReceived(string message) { var data = message.Split( new string[] { "\t" }, System.StringSplitOptions.None); if (data.Length < 2) return; sensorText.text = "ondo:" + message; try { var temperature = float.Parse(data[0]); if(start == 1) //入力した値を閾値としたい { temperature = threshold; peak += 20; } if ((temperature > threshold)&&(start == 2)) //閾値を超えた時の処理 { transform.localPosition += (levelDown) ? new Vector3(0.0f, 10.0f, 0.0f) * Time.deltaTime : velocity * Time.deltaTime; levelDown = false; } else { transform.localPosition += velocity * Time.deltaTime; levelDown = true; } } catch (System.Exception e) { Debug.LogWarning(e.Message); } } private void OnTriggerEnter(Collider other) { if (other.gameObject.CompareTag("start")) { start += 1; setcountText(); } } void setcountText() { startText.text = "start : " + start.ToString(); } }
回答1件
あなたの回答
tips
プレビュー