スキー滑走測定もあと1-2回できるかというときですが、今シーズンやり残した、スマホモニターの実現のために、最小限への手間で、何とか左右のモニターコントロールできるようにしました。
●工夫した点
C#のシリアル受信プログラムは動作したのですが、システムへの操作信号送信がうまく動作しない課題があって、この4か月頓挫していたのですが、妥協案を実施して何とかモニター動作させました。
妥協案1:受信データの処理を配列操作を含ませると送信時にこけるので、受信データは、TextBoxに記入するだけで、データの手放れをよくしました。そうすることで、操作信号の送信がうまくいくようになりました。
妥協案2:BlueTooth SPPの2Chを受信するプログラムが、同期がうまくとれなくて、片方だけになったりしたので、逆転の発想で、1CHのアプリをWIN10上で、2個立ち上げて、BlueToothSPPの2ポートをそれぞれ1ポートずつ受信することにしました。
=>これが、上手くて、データ落ちなどトラブルが全然なくモニターできました。
プログラムでマルチスレッドで苦労するよりシングルのアプリを複数個立ち上げればそれで
マルチスレッドとみなせるので、これからも、単純なプログラムを複数個立ち上げて多CH対応という方法を取り入れていきます。
●操作
立ち上げたら、BlueToothSPPのCOM番号を選択して、接続ボタン押し
[a]ボタンでモニター開始、[p]ボタンで、位置精度キャリブレーション(基線長測定)
[s]ボタンでSDログ開始、[d]プログラムリセットでSDファイルの表示確認
[s]マークで+印がでている間は、SDログが確実に行われていることが見えます。
●プログラム
今までのマルチスレッドの見本プログラムで、いずれも、受信は安定してますが、送信が入るとコケル確率が非常に高くなることが分りました。原因究明できるほど、マルチスレッドを学習してないので、しょうがありません。
GISTにアップしてあります。
https://gist.github.com/dj1711572002/10fee174c76cfaaa784932b430d3980e
Delegateの参考資料は、こちらに感謝 でも未だ理解できない
【初心者向け】delegate を理解しようとしても1ミリも理解できない人のためのdelegate入門
Invokeも入ってくるともっとわからない
C# の Invoke, delegate の話の抽象化
見よう見まねで、3行作ってみたら適当に動いてます。
// ——————-Serial受信部————————————————– private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { string str = serialPort1.ReadLine(); DataDelegate a = new DataDelegate(printdata); BeginInvoke(a, str); } //———————————————————————————– |
処理は、printdataで行いますが、青字の複雑な変数処理は受信だけなら使えますが、
送信時には、配列エラーが発生してNGでしたので、TextBoxに記入するだけの処理にしました。
private void printdata(string text) { textBox1.AppendText(text); richTextBox1.AppendText(text); richTextBox1.ScrollToCaret(); /* r.lines = text.Split(‘[‘); r.sline = r.lines[1].Split(‘,’); for(i=0;i<r.sline.Length-1;i++) { Debug.Print(“sline[” + i.ToString() + “]=” + r.sline[i].ToString()); } */ } |
●スマホで操作
C#は、スマホ化もできるはずですが。覚えるのに1年くらいかかりそうですので、やめて
リモートデスクトップアプリのSplashTop Personal無料を使って
Win10 ノートとかタブレットのデスクトップを
iPhoneで操作することで、スマホ操作を実現しました。