• ベストアンサー

入力から同時に信号が入った場合の処理

現在、マイコンを使用してロボットを製作しています。 そこで質問ですが、入力スイッチが2つある場合に同時に入力スイッチを入れた場合に、片方を優先させるプログラムはどのように作れば良いでしょうか?言語はBASICです。宜しくお願い致します。 ※部品ではなくプログラムで作る方法をお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.4

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

gootpye
質問者

補足

何度も親切に回答していただきありがとうございます。プログラムの確認ですが、If rb.Bit0 = 1 then Gosub proc_SW1 Endifの後にGosub proc_SW2 Endifが書いてありますが、これってOKなんでしょうか?

その他の回答 (4)

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.5

If rc.Bit0 = 1 then 以降のifは、2重になっております。 2重にした場合でも、If と Endif は1対1で記述することになっていますので、 先のサンプルで間違いないと思います。

gootpye
質問者

お礼

今まで本当にありがとうございました。また何かありましたら宜しくお願いいたします。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.3

「同時に入力スイッチを入れた場合」というのはもしかして「操作する人間が同時に入力スイッチを入れたつもりの場合」だったりしませんか? だとしたら,非優先スイッチがONになってから100分の5秒程度待って,優先スイッチが押されなかったらはじめて,非優先スイッチが押されたときの処理をする,というコーディングが必要になります.

gootpye
質問者

補足

はい、操作する人間が同時に入力スイッチを入れた場合いの優先についての質問です。その場合、どのようなプログラミングをしたらよいでしょうか?参考例を教えていただけたらうれしいです。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

>HかLで処理します。 ということは、あるアドレスデータを読み取って、HighかLowで チェックするということでしょうか? 信号が1つの場合は、コーディングできますか? そこまで分かるのでしたら、先ほどのパターン1)で2つのスイッチ の処理が可能です。 データの読み取り部(読み取った変数名と、その内部構造)がわからな いので、実際のコーディングとは異なっていると思いますが。

gootpye
質問者

補足

何度も回答いただき感謝しております。NO3の方が書かれている通り、操作する人間が同時に入力スイッチを入れた場合のプログラムを考えております。その場合い、理想としては、SW1の信号を優先した後にSW2を処理したいと考えています。それが無理でしたら(複雑になる)同時に押された場合はSW2を無効にしてもかまわないです。宜しくお願い致します。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

これだけの情報では、詳細なコーディングはできません。 ※入力信号の検出方法など。 あと、「片方を優先させる」とは、 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 はずしていたら、ごめんなさいです。

gootpye
質問者

補足

回答ありがとうございます。マイコンはPICを使用しま す。入力信号の検出方法は、HかLで処理します。 処理の方法は、スイッチAの処理をしたあと、スイッチBの処理をします。宜しくお願い致します。

関連するQ&A

  • 複数の回路の信号を同時にオンにする

    電子工作初心者です。 図のように複数のマイコンボードの特定の入力端子に対して、 プッシュスイッチを押すと、各ボードのスイッチが同時にオンになり、 ボードにオン信号を同時に送りたいのですが、 やり方が分からず質問させていただきました。 リレースイッチを各ボードにつけて、スイッチを別電源で駆動することを 考えましたが、リレーは遅延が発生する、最終的にはボードは20台ほど 同時実行させたいため、トランジスタを使ってできないかと 考えましたが、どうすればいいか分かりませんでした。 (リレーのようにスイッチ用の電源を別に駆動させる方法がわかりませんでした) 根本的に考え方が間違っているかもしれませんが、 教えていただければ幸いです。よろしくお願いいたします。

  • オーディオセレクター同時入力

    4入力2出力のステレオミニのオーディオセレクターがあるのですが、 セレクター入力スイッチを同時にオンにする事が出来るのですが、そうすると セレクターでスイッチの選択せずに同時に音を出す事ができます。 こうする事でセレクタースイッチをいちいち切り替える必要がなくなります。 使うときはスイッチを同時に押していますが、 実際に使うのは1箇所ずつの音声信号入力にしています。 こうして使用する事で入出力機器に影響は無いのでしょうか? 詳しい方 助言の方をよろしくお願いします。

  • H8マイコンでの割り込み(シリアルポート入力で)

    マイコン:AKI H8/3048F 開発環境:GCC Developer Lite マイコンとパソコンをRS-232Cケーブルでつないでいます。 ハイパーターミナルを使用して、マイコンを制御したいと考えております。 それで、パソコンのキーボードから入力があった時だけ、割り込みを実行したいです。 割り込みが無い場合は、パソコンでマイコンを制御することができたのですが、割り込みを追加したら、うまくいかなくなりました。 アセンブラを使用せずに、C言語だけでプログラムを完成させたいと思っています。 SCI1からの割り込み処理をするには、どの様にしたらよいのでしょうか? どうか、お願いいたします。

  • 複数のプログラムの同時実行ができないように制御したいのですが…

    このたびゲームを製作しているのですが、ゲーム本体と設定プログラムを同時に起動できなくしたいのですが、やり方がわからず困っています。 はじめはファイルのアクセス権を利用してやろうとしたのですが、うまくいきませんでした。(片方のプログラムであるファイルを開いておき、もう片方のプログラムでファイルを開こうとするとエラーが発生するという感じです) 何かいい方法は無いでしょうか?教えていただけると助かります。 よろしくお願いいたいますm(_ _)m

  • Processingでのキーの同時入力

    Processingでゲームを作ろうとしているのですがキーボードの同時入力がうまくいきません。 例えば下記のようなキー入力に応じて黒い四角が動くプログラムを実行しました。方向キーを一つだけ押したときはサクサク動いてくれるのですが、→と↓を同時に押しても斜めに進んでくれません。また、→と←を押した場合もどちらか片方の方に動いてしまいます。 このような問題を解決したいので、Processingでキーボードの同時入力を判定するにはどのようにすればいいのか教えてください。 float x, y; void setup(){ size(400, 400); noStroke(); smooth(); } void draw() { background(255,255,255); fill(0,0,0); rect(x,y,20, 20); if (keyPressed && key == CODED){ if (keyCode == LEFT){ x -= 2; } if (keyCode == RIGHT){ x += 2; } if (keyCode == UP){ y -= 2; } if (keyCode == DOWN){ y += 2; } } }

  • 2つのプログラムを同時に学ぶのは??

    プログラムを始めたばかりの初心者です。今学校でC言語をやっています。 現在HTMLを勉強したいと思っているのですが同時に学ぶのはやめといたほう がいいでしょうか??正直なところ学校のC言語でも時々わからず困ることがあります。皆さんはどう思いますか??アドバイスください。

  • H8/3052マイコンについて

    H8/3052マイコンを使って時間差を読み取ることはできないでしょうか? たとえば、どこかのポートに時間t=0secのとき外部から入力をして、t=1msecでまた外部から入力をしΔt=1msecを使用してマイコンに掛け算なり割り算なり計算をさせるようなことは可能でしょうか? マイコンにはC言語を使用しています。サンプルプログラムなども載せてもらうとありがたいです! よろしくお願いします!

  • アトメル社製ATtiny2313マイコンのINT0端子、INT1端子の割り込みに優先順位は設定できる?

    ATtiny2313で割り込み端子入力2つを使用してINT0が入力されたら赤LEDを点灯させて、INT1端子が入力されたら黄LEDを点灯させて、どちらの入力もなかったらパワーダウンモードでマイコンの消費電流を最小限まで落とすというプログラムを作って動作させています。 だいたい割り込みのプログラムはできたのですが、INT0とINT1端子がどちらとも入力されていた場合INT0を優先して、割り込み1ベクタルーチンに飛ぶようにしたいのですが、今のプログラムは先に入った方の入力が優先されるようで、後から入ってきた割り込み端子入力は全く無視するようなプログラムになっているようです。 ATtiny2313のデータシートでINT0端子に優先的な割り込み許可を与えるレジスタ設定などがあるのかなと探しているのですが、よくわからない状態です。 現在のプログラムの動きを試験しているテスト基板の画像をyoutubeで動画にして投稿しました。 どなたかご存知のかたいらっしゃいましたらご教授よろしくお願い致します。

  • 両方式同時接続の場合、インターネットはどちら使いますか

    私は有線(光ファイバー)と無線接続両方使用しています。同時利用なので、速度はあわせたものだと信じていましたが、間違いと最近いわれて、いったいどうなるのでしょうか。結局両方同時接続しても、片方しか使用できませんか?また、この場合どちら使われますか?

  • ATTINY13のリセット端子は無効にできるか?

    ATTINY13マイコンをAtmel Studio6.2でプログラミングしています。8ピンのマイコンなので、リセット端子でもある1番ピンを入力ピンとして使用したいと思っています。DDRレジスタでPB0端子を入力端子に設定して、この端子にスイッチをつけたのですが、スイッチONでLOWレベルにすると、マイコンの動作が止まってしまいます。 現在リアルタイムデバッガ機能は使用していないのですが、RESETが有効で動作しているのではないかと思われるのですが、RESET機能を無効にすることは可能でしょうか? どうぞ、ご教示頂きますよう、よろしくお願い致します。