同じピンに複数のボタン


12

私はいくつかのプロジェクトをやっていて、Arduinoを使ってプロトタイプを作成しています。10個のプッシュボタンを(より多くのものと一緒に)使用しなければならず、ピンが足りません。

私が考えることができる1つの解決策は、アナログピンを使用して、次のような2つのプッシュボタンにそれぞれを使用することです:

回路図

この回路のシミュレーションCircuitLabを使用して作成された回路

そうすれば、電圧が5Vかそれの半分かを調べることで、ピンA0を読み取り、どれがプッシュされているかを知ることができます。

これはいいアイデアですか?異なるプッシュボタンが同時にプッシュされることは決してありません。これは、私が考えることができる唯一の問題です。

もっと良い方法はありますか?


いくつのピンを使用しようとしていますか?
W5VO

W5VO私は10個のボタンで22を必要とする@、ボードのみので、各アナログピンの2つのボタンが、私はわずか5本のアナログピンを必要とボードは持っています... 18有する6
MyUserIsThis

1
参考までに、多くの自動車メーカーは、オーディオシステムのステアリングホイールに取り付けられたコントロールに同じアプローチを使用しています。それらには8個のボタンがあり、それぞれに固有の抵抗があります。これにより、ホイールからオーディオヘッドまで1本のワイヤ(またはきれいな戻りを保証するためのワイヤのペア)を走らせることができます。それは完全に良いアプローチです。
DoxyLover

実際に3つのピンを使用して、いくつかのシフトレジスタを使用して、理論的には無限の数のスイッチを入力できると思います。マルチプレクサを使用して8つのピンを使用して256個のスイッチを入力することもできます。
アルビンウォン

回答:


22

単一のアナログピンで任意の数のボタンを実行できるのに、2つのスイッチごとに複数のアナログピンを無駄にするのはなぜですか?

それを行う2つの方法。1つは直列で、もう1つは並列です。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

これが、一部のカーステアリングホイールのオーディオコントロールです。そして、いくつかの古いipodインラインコントローラーの動作方法。

使用する抵抗器に応じて、同時に複数のボタンを押す必要がある場合、およびアナログ入力の感度に応じて、1つのピンに10個すべてのボタンを配置できます。


ありがとう、私もこれについて考えましたが、電圧測定値は、この方法に依存するために必要なほど正確ではないかもしれないと考えました。これも試してみて、どのように機能するかを確認します。
MyUserIsThis

私の抵抗ネットワーク解析の基礎は完全に安定していないため、CircuitLabを使用して直列回路をシミュレートし、アナログ入力ピンの電圧測定のために真理値表を引き出しました。B2 + B3の組み合わせは2.499Vになり、B1 + B4の組み合わせは2.498Vになります。このように近い数字では、一般的な10ビットADCはマルチ入力の組み合わせを正しく区別できないと思います。あなたは何を言っていますか ?もちろん、一度に1つのキーが完全に機能することは間違いありません。注B1 = Button1。
icarus74

実際、B2 + B4は1.666Vを出力しますが、B2 + B3 + B4も1.666Vを出力します。解決策は、R1、R2、R3、R4に異なる値の抵抗を使用し、それらすべてを1Kに維持しないことです。何を言います ?
icarus74

7
古い2R / RラダーはボタンをD / Aに変え、ボタンを押すすべてのコンボには一意の値があります。私は、NはADCの分解能であるN-3ボタン、と仕事にそれを信頼したい
スコットサイドマン

1
@ icarus74はい、すべて1kの代わりに異なる値を使用すると、一意の組み合わせが得られます。1k、2k、4k、8k、16kなど(またはより広い範囲の場合は1k、4k、16kなど)を試してください
Passerby

10

それは機能しますが、より良い方法はmatrixを使用することです。これは、LEDをマトリックスで多重化するのと同じ概念ですが、スイッチを使用します。

ここに画像の説明を入力してください

これは2x2マトリックスです。このサイズでは、スイッチを個別に接続する際にピンを保存しないため、有用なマトリックスは大きくなります。

3x3マトリックスを使用すると、9つのスイッチを取得できます。10が必要なので、行または列をもう1つ追加して12個のスイッチをサポートするか、10番目のスイッチを独自のピンに配置します。

ここでの利点は、デジタルIOを使用できることです。デジタルIOは、アナログIOよりも安価で通常は豊富です。シフトレジスタは、あなたが不足している場合、複数のデジタルIOを追加するための安価な方法です。

さらに少ないピンが必要な場合は、複雑さをある程度増やすためにcharlieplexingを使用できます。スイッチに加えてダイオードを追加する必要があり、これらのダイオードはおそらくシフトレジスタと同じくらいのコストがかかります。ただし、コストが主な関心事ではない場合、いくつかの利点があります。この方法では、4つのピンですべてのスイッチ(実際には最大12個)を読み取ることができます。


質問です。より多くのピンが必要な場合、なぜこれが良いのですか?この方法では、9x9マトリックス用に6個のピンに加えて、10番目にもう1個のピンが必要になりますが、作成したものでは5個のピンしか必要ありません。
MyUserIsThis

@MyUserIsThisこれは、スイッチの総数が増えるにつれて、より適切にスケーリングされます。ex 5x5マトリックスでは、25個のスイッチを10個のピンに接続できます。より一般的なコメントとして、従来の方法で物事を行うと、他の誰かがあなたがしたことを理解しやすくなります。そして、あなたが他の人の回路が何をするかを認識するために(あなたは標準的な実装であなた自身を訓練したので)
ダンはファイヤーライトによっていじくります

@MyUserIsThis編集を参照してください。通行人にも良い答えがあります。
フィルフロスト

2

アナログ入力は有効なアプローチであり、複数のボタンを使用できる必要があります。また、MCP23017のようなIO Expanderチップを使用することをお勧めします。入力と出力が可能な16のピンがあり、2つのピンを使用してI2Cで制御されます。AdafruitにはArduinoライブラリがあります。


2

はい、それは良いアイデアのように思えますが、とにかく私はちょうど思いついた代替案を提案するつもりです。

論理ゲートにアクセスできる場合は、ブール論理を介して多くのnボタンをceil(log2(n + 1))ピンにマップできます。例として、4つのボタンがあり、ピンが2つしかない場合、次のような構成を作成できます。

Buttons | Pins
----    | --
0123    | 01
----    | --
0001    | 00
0010    | 01
0100    | 10
1000    | 11

つまり、button0pressedはlowでなければpin0なりませんpin1button1pin0低およびpin1高; button2pin0高いpin1低いです。そしてbutton3pin0そしてpin1高い。

これから、次のブール式が発生します

pin0 = button2 OR button3
pin1 = button1 OR button3

したがって、2つのORゲートで4つのボタンを2つのピンにマッピングできます。ただし、ボタンがまったく押されていないかどうかを示すために、追加のピンといくつかの追加のロジックが必要になります。

もちろん、複数のボタンを同時に押すと、まだ問題が発生します。

また、抵抗器アプローチを引き続き使用する場合は、100Ω程度の抵抗を介した5 Vにより、数十mAの電流が生成されるため、100Ω以外の抵抗器でより大きな値を使用することを検討してください不必要に高い。もっと妥当な値は10kオームまたは47kオームだと思います。


あなたのアプローチをありがとう。私もそのようなことを考えましたが、論理ゲートがなく、抵抗がたくさんあります。そして、はい、私は通常これに10k抵抗を使用します、100オームは回路エディタのデフォルト値でした。ご協力ありがとうございます。
MyUserIsThis

論理ゲートを購入する必要がないので、最終的に抵抗方式を使用すると思います。さらに、論理方式では1ピンしか節約できず、必要ありません。大規模なプロジェクトの場合でも、これを念頭に置いています。どうもありがとうございました。
MyUserIsThis

はい!あなたのプロジェクトで頑張ってください!
nijoakim

0

次のページが役立つ場合があります。

http://txapuzas.blogspot.co.uk/2010/07/papertecladoanalogico-varios-pulsadores.html

スペイン語で書かれていますが、本質は図式化されています。あなたにとって非常に良いアイデアだと思います。

このビデオでは、最終結果を見ることができます。スケッチもページにあり、プロジェクトへの実装を容易にするカプセル化された関数です。

Youtubeビデオ:単一ピンの10キーキーボード

上記のサイトの概略図は次のとおりです。

ここに画像の説明を入力してください

ここに画像の説明を入力してください


2
特にスペイン語で、これが英語のサイトである場合、リンクが死んだ場合に備えて、リンクに含まれる内容の要約を追加してください。
PeterJ 14年

申し訳ありませんが、スペインでは通常英語の出版物を参照するのが普通の状況かもしれません...しかし、リンクは非常に興味深いです。ボードとボタンのカバーを作成するための画像を作成します。キーボードを管理するためのコードも、簡単に理解できます。ニースが発達したと思う。
ジョニードービル14年

物事のスペイン側だけではありません。図が明確で、見栄えがよく、それに基づいてそれが何であるかを理解できます。しかし、Stack Exchangeは、リンクが死んだ場合は役に立たないので、リンクのみの回答はお勧めしません。明日ブログが閉じられたり削除されたりすると、回答がどれほど役に立つか想像してみてください。たぶん、回路図とそれに関する1つか2つの文を含めて、詳細情報への参照としてリンクを残すことができます。
PeterJ 14年

私はこのフォーラムの新人です。どうやってあなたに教えてもらうことができますか?特別なセクション...?お時間をいただきありがとうございます
ジョニードービル14年

回路図とその参照元を含めましたが、ページのもう少し翻訳して、それがどのように機能し、ADCの読み取り値がどうなるかを説明する価値があるかもしれません。
PeterJ 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.