- ベストアンサー
入力から同時に信号が入った場合の処理
現在、マイコンを使用してロボットを製作しています。 そこで質問ですが、入力スイッチが2つある場合に同時に入力スイッチを入れた場合に、片方を優先させるプログラムはどのように作れば良いでしょうか?言語はBASICです。宜しくお願い致します。 ※部品ではなくプログラムで作る方法をお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
PICマイコンは未経験ですが、BASIC・制御系プログラミング の知識はあり、PIC-BASICのリファレンス・他のサンプルを 元に作ってみましたが、いかがでしょうか? Input rb.Bit0 'SW1 Input rc.Bit0 'SW2 While 1 If rb.Bit0 = 1 then Gosub proc_SW1 Endif If rc.Bit0 = 1 then sleep 50 If rb.Bit0 = 1 then Gosub proc_SW1 Endif Gosub proc_SW2 Endif Wend proc_SW1: 'SW1の処理 Return proc_SW2: 'SW2の処理 Return
その他の回答 (4)
- kokorone
- ベストアンサー率38% (417/1093)
If rc.Bit0 = 1 then 以降のifは、2重になっております。 2重にした場合でも、If と Endif は1対1で記述することになっていますので、 先のサンプルで間違いないと思います。
お礼
今まで本当にありがとうございました。また何かありましたら宜しくお願いいたします。
- a-saitoh
- ベストアンサー率30% (524/1722)
「同時に入力スイッチを入れた場合」というのはもしかして「操作する人間が同時に入力スイッチを入れたつもりの場合」だったりしませんか? だとしたら,非優先スイッチがONになってから100分の5秒程度待って,優先スイッチが押されなかったらはじめて,非優先スイッチが押されたときの処理をする,というコーディングが必要になります.
補足
はい、操作する人間が同時に入力スイッチを入れた場合いの優先についての質問です。その場合、どのようなプログラミングをしたらよいでしょうか?参考例を教えていただけたらうれしいです。
- kokorone
- ベストアンサー率38% (417/1093)
>HかLで処理します。 ということは、あるアドレスデータを読み取って、HighかLowで チェックするということでしょうか? 信号が1つの場合は、コーディングできますか? そこまで分かるのでしたら、先ほどのパターン1)で2つのスイッチ の処理が可能です。 データの読み取り部(読み取った変数名と、その内部構造)がわからな いので、実際のコーディングとは異なっていると思いますが。
補足
何度も回答いただき感謝しております。NO3の方が書かれている通り、操作する人間が同時に入力スイッチを入れた場合のプログラムを考えております。その場合い、理想としては、SW1の信号を優先した後にSW2を処理したいと考えています。それが無理でしたら(複雑になる)同時に押された場合はSW2を無効にしてもかまわないです。宜しくお願い致します。
- kokorone
- ベストアンサー率38% (417/1093)
これだけの情報では、詳細なコーディングはできません。 ※入力信号の検出方法など。 あと、「片方を優先させる」とは、 1)スイッチAの処理をしたあと、スイッチBの処理をする 2)スイッチAの処理をしたあと、スイッチBを無視する のどちらでしょうか? 1)ならば、 If(sw_a = TRUE) Then [スイッチAの処理] EndIf If(sw_b = TRUE) Then [スイッチBの処理] EndIf 2)ならば、 If(sw_a = TRUE) Then [スイッチAの処理] Else If(sw_b = TRUE) Then [スイッチBの処理] EndIf はずしていたら、ごめんなさいです。
補足
回答ありがとうございます。マイコンはPICを使用しま す。入力信号の検出方法は、HかLで処理します。 処理の方法は、スイッチAの処理をしたあと、スイッチBの処理をします。宜しくお願い致します。
補足
何度も親切に回答していただきありがとうございます。プログラムの確認ですが、If rb.Bit0 = 1 then Gosub proc_SW1 Endifの後にGosub proc_SW2 Endifが書いてありますが、これってOKなんでしょうか?