ユーザー名:

パスワード:


パスワード紛失

新規登録
ビートス オンラインショップへ
アブソリュート株式会社様へ

トグルスイッチをオフにした時にボタン動作する方法

前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2017-12-17 14:20
ziggyziggy  <ROOKIE>   投稿数: 1
レースシミュレータで自作コントローラとハンコンを製作しました。

大変便利で恰好良く気に入ってますが、色々要領が分かったところで、
もう一度改良版を作ってみたいと思います。

そこで質問ですが、トグルスイッチ等を使用する時にONに入れた時にボタンのONを感知しOff時にもう一度感知してボタンを押した判断をさせる事を考えてます。

例で言えば、トグルスイッチをOnにした時に、ゲーム内のヘッドライトが点灯し、スイッチOffで消灯するイメージです。
ゲーム内ではボタンを押すとライトが点灯し、もう一度同じボタンを押すと消灯するか、ボタンを押してホールドすると点灯します。
しかし、ホールド後放しても、もう一度そのボタンを押さない限り消灯しません。

また、エンジンスタートボタンの間にキルスイッチを入れて、キルスイッチがONの間はエンジンボタンが働くようにしてますが、
今の状態ではエンジンを停止した後、ゲーム内でエンジンボタンの作動を停止するには、キルスイッチを一度オフにしてONに入れなおす事でエンジンボタンの作動停止、再びキルスイッチをOff→Onにすると連動開始になります。

ボタンの接点が切れた時に、ボタン動作の検出方法はありますか?
AutoHotKey等の併用でも良いですが、ボタンの接点が切れた時に、ボタンを押されたように動作する方法はなさそうです

何か方法はありますか?

(わかりにくい文章ですみません。よろしくお願いします)
イイね!の数:0
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-12-17 23:08 | 最終変更
disklessfu  <EXPERT>   投稿数: 209
個々の言葉の意味はわかりますが、質問内容は殆どわかりません。

必要のない情報が多すぎるんじゃないでしょうか。そして逆に必要な情報が足りないんじゃないでしょうか
(ゲームの?)コントローラを自作されるくらいなら、もっと明確な質問が可能なような気がするんですが…

よくわかりませんが、
>トグルスイッチ等を使用する時にONに入れた時にボタンのONを感知しOff時にもう一度感知してボタンを押した判断をさせる事を考えてます。
このあたりで質問するなら、
「ONにした瞬間、OFFにした瞬間に、それぞれ別の音を鳴らしたい」なんかがよくある質問じゃないでしょうか
こういう質問に対する回答を書いてみます。

マイコン電子工作で、Hiになったとき、Lowになったとき、の双方に反応させるなら、
外部割込みを2系統使ったりします。
ソースの電位を分岐させて2ポートに接続します。
そして、たとえばポートAは立ち下がり検出、ポートBは立ち上がり検出に設定します。
こうすればHiになったとき、Lowになったとき、の双方で処理をおこなうことができます。
でも、スイッチがソースの場合はチャタリング除去の為にポーリング(タイマー割込み)
で処理するのが普通です。
ディスクリートで組むことも不可能ではないでしょうが、マイコンを使うと圧倒的に回路を簡素化できます。

これで役に立ったでしょうか
イイね!の数:0
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-12-18 12:52
 
disklessfuさん
返信ありがとうございます

表現が悪くてすみません

OnとOffのトグルスイッチをコントロールボタン代わりに使用してゲーム内でヘッドライトを点灯させるようにすると、
最初のスイッチOnで点灯、次のOffではヘッドライトは点灯し続け、
その次のOnで消灯するといった流れになるのをスイッチOn・Offの一回で点灯、消灯したいといった意味でした。

disklessfuさんの方法であっていると思います。
>Hiになったとき、Lowになったとき
が接点が繋がって回路に電気が流れ始めた時、接点が切れて通電が切れた時という意味に思えますが、これなら意図する動作になると思いますので、調べてやってみたと思います。

ありがとうございました
イイね!の数:0
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2017-12-31 15:19 | 最終変更
disklessfu  <EXPERT>   投稿数: 209
なさりたいことの大枠を表現すると、
(改造できない)モメンタリスイッチ用の回路に、オルタナティブスイッチを取り付けたい。
その上で、見かけ上の得られる結果は、モメンタリスイッチを取り付けていた時と同じにしたい。
となりますね。

そして、今回の具体的な内容(仕様)は、
>次のOffではヘッドライトは点灯し続け、
という記述から導きだされるのですが、
トグルスイッチをOnにした直後およびOffにした直後に、デフォルト状態のLoから一定時間(多分数十ms)だけHiになるパルス(矩形波)を一個だけ出力する回路(チャタリング除去処理あり)を作りたい
もしくは、
トグルスイッチをOnにした直後およびOffにした直後に、デフォルト状態のHiから一定時間(多分数十ms)だけLoになるパルス(矩形波)を一個だけ出力する回路(チャタリング除去処理あり)を作りたい
となりますね。

やはり、ほぼマイコンが必須となる要件と言えるでしょう。

ご指摘のとおりmsg# 1.1で書いた内容にほぼ近いですね。
msg# 1.1の「ONにした瞬間、OFFにした瞬間に、それぞれ別の音を鳴らしたい」の、「それぞれ別の音」を「同じ音」に入れ替えた場合とほぼ同じになる筈です。
メインループでは何もせず、タイマ割込みルーチンのみに処理内容を記述するマイコンプログラムになりそうですね。

ところで、ゲーム側が持っているステートと、トグルスイッチのステートとを一致させる必要があると思います。
場合によっては、ステートを一致させる為に、作成する回路側にトグルスイッチとは別に、調整用のパルスを出力するボタンを取り付ける必要があるかもしれません。
まあ、トグルスイッチがどっちの位置でヘッドライトが点灯するか否かの関係が、時によって入れ替わってもいいのなら、そのような配慮は必要ありませんが…
イイね!の数:0
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2018-1-1 14:12 | 最終変更
disklessfu  <EXPERT>   投稿数: 209
プログラミングのお作法に従うと、チャタリング除去処理は必要なんですが、
今回の場合、チャタリング除去は事実上(僅かに弊害が発生する可能性は残るものの)省略可能です。

今回の場合、スイッチの状態変化を検知した際に、多分40ms程の幅のパルスを発生するのだと思いますが、そのパルス送出中、スイッチの状態変化のチェック処理を休止すれば、ほぼチャタリング除去処理は省略できます。

実は、タイマーを使わず、全部メインループで処理すれば、自然にそのようなプログラムになります。
私も過去にそのようなプログラムを作ったことがありました。
そのプログラムです。
https://goo.gl/N1XVe2
>このプログラムでやっていることは、入力ポートがLowからHigh、もしくはHighからLowに変化した際に一定時間(約0.4秒間)リレーを閉状態にすることだけです。
2005年に初めて作ったマイコンプログラムを小改造したものなので、参考にならないところも多々ありますが、全体としては参考にならないこともないと思います。ただし言語はMPASMというアセンブラです。C言語でプログラミングできるArduinoとかの方がいいかもしれません。
イイね!の数:0
返信する

このトピックに投稿する

題名
投稿本文