前提・実現したいこと
Unityから座標のデータをarduino側へ送り、Unity側のキューブが特定の範囲内に入ったらLEDを光らせることをしたい。
発生している問題・エラーメッセージ
Unity側もarduino側にもエラーが出ていないのにも関わらず、シリアル通信ができていない。
エラーメッセージ なし。 ### 該当のソースコード Unity側1つ目 オブジェクトの座標を表示 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class NewBehaviourScript : MonoBehaviour { // Start is called before the first frame update public Text positiontext; void Start() { } void OnMouseDrag() { Vector3 objectPointInScreen = Camera.main.WorldToScreenPoint(this.transform.position); Vector3 mousePointInScreen = new Vector3(Input.mousePosition.x, Input.mousePosition.y, objectPointInScreen.z); Vector3 mousePointInWorld = Camera.main.ScreenToWorldPoint(mousePointInScreen); mousePointInWorld.z = this.transform.position.z; this.transform.position = mousePointInWorld; positiontext.text = "x:" + this.transform.position.x.ToString() + "y:" + this.transform.position.y.ToString() ; } } Unity側 2つ目 Unity側からarduino側にデータを送るプログラム using System.IO.Ports; using UnityEngine; using System.Collections; using System.Collections.Generic; public class Serialconnect : MonoBehaviour { private SerialPort serial; private void Awake() { serial = new SerialPort("COM1", 9600); serial.Open(); } private void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//光線をマウスで提示 RaycastHit hit = new RaycastHit();// if (Physics.Raycast(ray, out hit))//オブジェクトの接触判定 { Vector2 pos = this.transform.position; float x = pos.x; float y = pos.y; string str; string str1; string str2; str1 = x.ToString(); //float型から文字列の変換 str2 = y.ToString();//float型から文字列の変換 str = str1 + ',' + str2 + ';'; serial.Write(str); Debug.Log(str); Debug.Log(str1); Debug.Log(str2); } } } Arduino側 String cmds[2];// 分割された文字列を格納する配列 float X = 0.0; //受信したデータはここに格納される。 float Y = 0.0; float Z = 0.0; void setup(){ Serial.begin(9600); pinMode(12,OUTPUT); pinMode(13,OUTPUT); } int split(String data, char delimiter, String*dst){ int index = 0; int arraySize = (sizeof(data)/sizeof((data)[0])); int datalength = data.length(); for (int i = 0; i < datalength; i++) { char tmp = data.charAt(i); if ( tmp == delimiter ) { index++; if ( index > (arraySize - 1)) return -1; } else dst[index] += float(tmp); } return (index + 1); } void loop(){ //データを1つ受信する関数(割り込み処理)です。 String myString = Serial.readStringUntil(';'); int index = split(myString,',',cmds); if(Serial.available() >= 2){ String str1=cmds[0]; String str2=cmds[1]; X=str1.toFloat(); Y=str2.toFloat(); if(X<0.0 && Y<0.0){ digitalWrite(12,LOW); } else if(X>0.0 && Y<0.0){ digitalWrite(13,LOW); } } delay(50); } ### 試したこと 別件だがUnity側で特定のキーを押したらLEDが光るプログラムを使いシリアル通信自体は成功させています。 だれかわかる方いらっしゃいましたら是非おしえていただきたいです。 追記 arduino側についてるLEDがずっと光ったままなのでarduino側が原因かもしれないです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/11 04:31
2021/06/11 05:32
2021/06/11 05:38
2021/06/11 06:48 編集