10-12-2023 04:07 AM
v1.1.0に移行し、新たにプログラムを組みなおしました。
以前回答していただいたプログラムで、プロパティノードのVal(Sgnl)がクリックのと同じイベントを発生させるということで、それを用いてケースストラクチャの方向キーを呼び出すようにしました。
左側のストラクチャでジョイスティックの方向を場合分けし、ジョイスティックが中央にある場合は右側のストラクチャを空にしています。
右に倒れた時は右側で"3"のストラクチャを実行し、Val(Sgnl)で"➡"ボタンのクリックイベントを発生させます。
しかし、このVIをもとに色々試しましたがボタンを反応させることはできても実際にRightやLeftを実行してくれなく動きません。
Val(Sgnl)は繰り返し送信しないで倒れているのを確認したら一度だけ送信するということでしょうか? (ストップ命令は必要ないということですか?)
10-12-2023 10:50 AM
すみません。CU Controlの解読を間違えていました。
Val(Sgnl)プロパティはボタンの値が変えられた(値変更)イベントを模擬しますが、CU Controlは値変更ではなくマウスボタンを押した(マウスダウン)イベントを使っていました。またJogの場合はボタン上でマウスを放した(マウスアップ)イベントでStop Jogを実行しています。たぶんJogとStepを同じボタンで使い分けたかったのだと思います。
制御器のマウスイベントをプログラム的に生成することはできないかもしれません。
sh_hrさんが前回やられたように、キューで必要なステートを送ってやればできるのはわかっていますが、CU Controlのマウスイベントの処理でいろいろ条件判定しているのと同じことをしなくてはならないので手間はかかります。
10-14-2023 01:44 AM
エラそうに書いておいて間違いでしたでは申し訳ないので、とりあえず最初の方針(ダイナミックイベント)で、追加の操作デバイスに対応できそうなところまで組んでみました。
なるべく既存のコードを生かして手抜き(そのための時間は惜しまないのがエンジニアという生き物(^^;)?)しました。ダイアグラムのコメントを参考にしてください。
CU Controlの使用条件が見当たらなかったのですが、ソースを公開していてハードウェアがないと動かないことから、問題はなさそうだと判断しました。必要なファイルだけ抜き出してパックしてあります。
10-14-2023 09:20 AM
こちらこそなかなか理解できなくて申し訳ございません。
後日また試してみてみます。
ありがとうございます。
11-29-2023 05:19 AM
J.H.Watson様
ジョイスティックの状態が変化したときに信号を送るというプログラムの作成ができず画像のような範囲を設定して現在動作させています.
ジョイスティックを戻すとKeyUpのコマンドが実行されはするのですが, やはり完璧なプログラムではなく, 素早くジョイスティックを起こすと反応しません.
状態が変化した瞬間に移動命令を変えることはできるのでしょうか?
ジョイスティックの状態が変化してもすぐにKeyUpの命令がすぐに実行されないことが問題です.
また, この問題解決のため現在, ジョイスティックを倒した時の値の絶対値が小さくなったらKeyUpのコマンドを実行するようなプログラムの作成をしていますが解決には至っておりません.
何か良い解決策はありますでしょうか?
Right KeyDown
Right KeyUp
前回の動作との絶対値の比較後, Key状態決定
11-29-2023 06:48 AM
素早く戻したときに反応しないのは100msのポーリング間隔中にマップの赤い部分を通過してしまうからだと思います。100msを小さくすれば反応する確率は上がりますが100%にはなりません。またX,Y値の変化方向を判定するのもあまりうまくない気がします。
このマップからは、
1) スティックを倒したらその方向にモータが動き続ける
2) スティックを戻したらモータが止まる
という動きを、各方向に対してさせたいように読み取れますが、合っていますか?
そうであれば、「モータ動作状況」をシフトレジスタの要素に追加(初期値は【動作なし】)したうえで、以下(1)~(3)を繰り返すのはいかがでしょうか?(方向は一例です)
1) スティックがLeft Key Down範囲内で【動作なし】ならLeft Key Down命令発行し【Left動作中】にする
2) スティックがLeft Key Down範囲内で【Left動作中】なら命令発行しない
3) スティックがLeft Key Down範囲外で【Left動作中】ならLeft Key Up命令発行し【動作なし】にする
(3)から(1)に戻ったときスティック位置はLeft Key Down範囲外であり、たとえばRight Key Up範囲内で【動作なし】ならRight Key Down命令発行し【Right動作中】にする・・・と続きます。
机上の空論かもしれませんが、何かの参考になれば・・・