卓上工作室 A-003 解説
目次
- 今回制作した回路
- Arduino側プログラム
- Unity側プログラム
Arduino側プログラム
int v0 = 0; int v1 = 0; void setup() { pinMode(A0, INPUT); pinMode(A1, INPUT); Serial.begin(9600); } void loop() { v0 = analogRead(A0); v1 = analogRead(A1); Serial.print(v0); Serial.print(","); Serial.println(v1); }
アナログピンA0、A1で読み取ったポテンショメーターからの信号をそれぞれカンマで区切ってシリアル通信でPCに送信するプログラムです。
実際に通信している様子は動画本編をご覧ください。
Unity側プログラム
動画内でも紹介していますが以下のページの内容を参考にさせていただきました。ありがとうございました。
nn-hokuson.hatenablog.com
大部分は引用ですので詳細はリンク先ページをご覧ください。
ここでは動画内でも示した改変部分のみのスクリプトを示します。
string vol = this.serial.ReadLine(); //シリアル受け取り string[] volArray = vol.Split(','); // カンマ( , )で文字列を分解 vol1 = int.Parse(volArray[0]); //stringからintに変換 vol2 = int.Parse(volArray[1]); Debug.Log(vol1); Debug.Log(vol2);
ここでは、まず変数 vol にシリアル通信で送信されてくる先ほどの文字列を受け取ります。
続いて、 Split を用いてカンマ位置で文字列を分解、配列 volArray にそれぞれ取り出します。
その下2行で文字列( string )から整数( int )データに変換しています。
次に、実際にunity内のデータを操作するスクリプトです。
sing System.Collections; using System.Collections.Generic; using UnityEngine; public class cubetest1 : MonoBehaviour { public tester tester; //可変抵抗ごとの個体差や、実際に体に装着した際の調整をインスペクタからできるようにしておく。 public float minvol = 0; public float Maxvol = 0; private void Start() { Maxvol = Maxvol - minvol; } void Update () { float vol = tester.vol1; //※1 vol = vol - minvol ; this.transform.localScale = new Vector3(vol / Maxvol+1, vol / Maxvol+1, vol / Maxvol+1); } }
先ほど読み取って分割した数値を参照してCubeのスケールを変化させるスクリプトです。
実際の動作は動画をご覧ください。
※1 vol1 部分が参照する変数名なのですが、ここをpublic string 等でインスペクタから変更できるようにしたいのですがどうにもうまくいきません(unity上で動作させようとするとエラーを吐く)。その結果直接変数名を記述し、ポテンショメータごとにスクリプトを分ける不格好な実装になっています。どなたかの意見をお待ちするとともに、解決法が分かれば追記したいと思います。
以上、補足解説でした。
このような解説を書くのが初めてなため不出来であることをお許しください。
ご意見、ご指摘等ご遠慮なくコメントいただければ今後の参考となります。何卒よろしくお願いいたします。