フォト
2017年5月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ

« IchigoJamとArduinoでI2Cバス通信を試してみる (2) | トップページ | IchigoJamでDVR8830を使ったロボットカー制御(1) »

2015年5月 4日 (月)

IchigoJamでアナログ入力を使った6ボタン入力

IchigoJamのアナログ入力(IN2ピン)を使った6ボタン ON/OFF判定を試してみました。
IchigoJamとの接続は3線のみのです。外観は次のような感じです。

ボタン名称は左から、A、B、C、D、E、Fボタンとします。

Dscn3789

プログラムは、次のような感じです。
アナログ値を読み取り、値によってどのボタンが押されたか判定します。

10 CLS
20 LET[0],100,200,400,500,700,800
30 A=ANA():B=-1:I=0
40 IF A<[I] THEN B=I:GOTO 60
50 I=I+1:IF I<6 GOTO 40
60 LC 0,0
70 IF B<0 ? "---";" ";A:GOTO 30
80 ? "[";CHR$(65+I);"]";" ";A;"    "
90 GOTO 30


実行して、動作確認をします。押したボタンとアナログ値(0~1023)を表示します。

ボタンを押していない場合
10

Aボタンを押した場合
04

Bボタンを押した場合
05

Cボタンを押した場合
06

Dボタンを押した場合
07

Eボタンを押した場合
08

Fボタンを押した場合
09

ちゃんと判定出来ました。

結線は次の通りとなります。ブレットボード上にタクトスイッチと抵抗を結線し、
配線をIchigoJamのVCC(3.3V)、ANA(IN2ピン)、GNDに接続します。

02_2

ボタンを押した場合は、GND-ANA間の電圧は図の右表のようになり、
IchigoJamのANA(IN2)から読み取った値はほぼ、表の数値となります。
この値と比較してどのボタンが押されたかを判定します。

             
計算式は下記の通りです。
Bボタン: 330/(330+2200)*1024-1 = 132
Cボタン: (330+680)/(330+680+2200)*1024-1 = 321
Dボタン: (330+680+1000)/(330+680+1000+2200)*1024-1 = 487
Eボタン: (330+680+1000+1800)/(330+680+1000+1800+2200)*1024-1 = 648
Fボタン: (330+680+1000+1800+3300)/(330+680+1000+1800+2200+3300)*1024-1 = 781

押していないとVCC-ANA間はVCC(3.3V)なので、1023となります。
Aボタンを押すと、ANAがGNDにつながるのでANAの電圧は0Vで値は0となります。
B~Fのボタンを押すと、抵抗による分圧で上記の式の計算値となります。

判定処理が必要なので、シューティングゲームなどのリアルタイム操作を
行う場合は遅くなりそうですが、3線でボタンが増やせるのは便利です。

この回路では、ボタンの同時押しには対応していません。
同時に押した場合、図では上部のボタンが押されたと判定します。
(例:Bボタン、Eボタンを同時に押すとBボタンと判定します)

今回の実験では、6ボタンでしたが頑張れば12ボタンくらいは実装出来そうです。

11

もっと頑張れ15ボタンくらいいけるかもしれません。

最新ファームウェア 1.0.0b6ではアナログ入力が2ポートに増えたので、
4線の接続で30ボタンいけるかもしれませんね。

2015/05/05 追記

12ボタンバージョンを基板実装しました。
以前購入した、「秋月電子 お楽しみ袋」にタクトスイッチがいっぱい入っていたので
有効活用しました。

Dscn3791

この基板では12個が限界です。基板が大きければ頑張れば15個はいけますね。

Dscn3792

裏はいつもの、段ボールです。

Dscn3793

ねじを外せばいつでも配線にアクセス可能です。
動作確認のIcigoJamソース

10 CLS
20 LET[0],80,150,250,400,500,600,650,720,780,840,880,950
30 B=-1:I=0
40 A=ANA()
50 IF A<[I] THEN B=I:GOTO 70
60 I=I+1:IF I<12 GOTO 40
70 LC 0,0
80 IF B<0 ? "---";" ";A;"    ":GOTO 30
90 ? "[";CHR$(65+I);"]";" ";A;"    "
100 GOTO 30

問題なく動作しました。

20150505161110

3線で12個のボタンが使えます。
基板のレイアウトはこんな感じです。

13

2015/05/06 追記
このスイッチの他に、色々とデバイスを接続すると電源の電圧変動やノイズがのり
アナログ値が揺らぐようです。ですのでボタン間の数値の幅が狭いとご判定するようで
12個当たりが限界のようです。


« IchigoJamとArduinoでI2Cバス通信を試してみる (2) | トップページ | IchigoJamでDVR8830を使ったロボットカー制御(1) »

IchigoJam」カテゴリの記事

コメント

初心者です。
Ichigojamで、可変抵抗でアナログ入力する方法がわからず難儀していました。
こちらのサイトの回路図通り、VCCとIN2を2.2kで繋ぐとようやくアナログ入力できました。
他のサイトにはどこにも載っていなかったので助かりました。
ありがとうございました。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/61538545

この記事へのトラックバック一覧です: IchigoJamでアナログ入力を使った6ボタン入力:

« IchigoJamとArduinoでI2Cバス通信を試してみる (2) | トップページ | IchigoJamでDVR8830を使ったロボットカー制御(1) »