スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
【--/--/-- --:--】 | スポンサー広告 | page top↑
RubyでGainerがMODE6にできない問題(解決)
GAINER4 私の環境(MacOS X 10.6.1 Snow Leopard, Ruby 1.8.7)では、GainerをFunnel経由Rubyで動作モードを6にすることができなかった。
Funnel本家のサイト(http://funnel.cc/Software/Ruby)のExampleに
gio = Gainer.new(Gainer::MODE1)
と書いていたので、
gio = Gainer.new(Gainer::MODE6)
としてみると、警告が出た後、エラーになるのだった。
funnel/gainer.rb を読んでみると、:mode と明示する必要があるようなので
gio = Gainer.new(:mode=>Gainer::MODE6)
としてみると、警告がでなくはなったが、実行時に
/funnel/gainer.rb:62:in `initialize': undefined method `each' for nil:NilClass (NoMethodError)
というエラーになる。
 そこで、更に gainer.rb の62行目を確認すると、そこはデジタル入力ピンにフィルターを設定している部分のようだ。MODE6はデジタル入力が存在しない設定(nil)だ。(デジタル入力が設定されるのは、MODE1, MODE3, そして MODE4 の場合だけ)そこで、この部分を case 文で、上記の場合だけ設定するように修正してみたら、見事MODE6で動作した!
ちなみに、:mode=>Gainer::MODE6 は、:mode=>6 と書いても良い。

【funnel/gainer.rbの修正箇所】
62行目の

        config.din_pins.each do |i|
@system.io_module(0).pin(i).filters = [SetPoint.new(0.5, 0)]
end


を、次のように変更

      case mode
when MODE1, MODE3, MODE4 then
config.din_pins.each do |i|
@system.io_module(0).pin(i).filters = [SetPoint.new(0.5, 0)]
end
end


【MODE6での動作を確認したプログラム】
# 0~31 までを順に16進で表示して終了

require 'funnel'
include Funnel
# 0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F
A=[1,0,1,1,0,1,1,1,1,1,1,0,1,0,1,1]
B=[1,1,1,1,1,0,0,1,1,1,1,0,0,1,0,0]
C=[1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,0]
D=[1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0]
E=[1,0,1,0,0,0,1,0,1,0,1,1,1,1,1,1]
F=[1,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1]
G=[0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1]
gio = Gainer.new(:mode=>6) ####### Set MODE to 6
for i in 0..31
if i > 15 then
i = i - 16
gio.dout(15).value = 1
else
gio.dout(15).value = 0
end
gio.dout(8).value = A[i]
gio.dout(9).value = B[i]
gio.dout(10).value = C[i]
gio.dout(11).value = D[i]
gio.dout(12).value = E[i]
gio.dout(13).value = F[i]
gio.dout(14).value = G[i]

sleep(0.5)
end



スポンサーサイト
【2009/10/31 16:08】 | Gainer関係 | トラックバック(0) | コメント(0) | page top↑
3本目のiPhoneアプリをリリース
互換タイヤの画面「漢字拡大鏡」、「パケ代予測」に続いて、3本目のアプリ「互換タイヤ」をリリースしました。(Appleの審査に二週間以上かかってやっと)
 「互換タイヤ」は、車(普通乗用車クラス)のタイヤの互換性を計算するものです。メーカーで指定されているタイヤサイズ/ホイールサイズを元に、扁平タイヤにしたり、逆に厚いタイヤにするときや、タイヤ幅を変えたいときに、タイヤの外形寸法の差が少なくなる最適なサイズを求めるために使うものです。
 詳しくは、サポートサイト
http://ynomura.com/conpatiTire.aspx
をご覧下さい。

 タイヤ電卓ですからあまり一般の方は不要なものでしょう。車マニアやカー用品ショップの店員さん向けかな?
【2009/10/27 20:14】 | Mac好き | トラックバック(0) | コメント(0) | page top↑
FunnelのRuby用ライブラリの問題?
 昨日の日記に、FunnelのRuby用ライブラリーを読んでみていると書きましたが、それはGAINERのモードをディフォルト(MODE1)以外に設定することができないでいたからです。
 エラーの情報とソースから(多分)問題になっている部分を突き止めました。
Funnel/libraries/ruby/funnel/にある、gainer.rb の60行目でデジタル入力ピンにフィルターを設定している部分が以下のようになっています。
config.din_pins.each do |i|
@system.io_module(0).pin(i).filters = [SetPoint.new(0.5, 0)]
end
でも、MODE1、MODE3、MODE5以外のモードでは、din_pinsがnilになっていて、そのことによるエラーが発生しているようでした。
なので、この設定を行う条件を追加して
case mode
when MODE1, MODE3, MODE4 then
config.din_pins.each do |i|
@system.io_module(0).pin(i).filters = [SetPoint.new(0.5, 0)]
end
end
としてみました。これで何とか動作モードを変更できるようです。
【2009/10/26 21:17】 | Gainer関係 | トラックバック(0) | コメント(0) | page top↑
すっきりしたかな
GAINER4 お試しでやってみようとしていたことは、ほぼクリアしたのでブレッドボードへの組み付けをやり直した。(ジャンプワイヤーのセットも届いていたしね)
 7セグLEDをアナログ出力とデジタル出力に、ボリューム、3軸加速度センサーをアナログ入力に接続して、後はプログラムだけ弄れば良いことになる。
 今までのプログラムはサンプルに毛が生えた程度で、実は良く判っていない。
GAINERとの通信をしてくれているFannelのRuby用ライブラリのソースを読んでみているけど、クラスのコンストラクタとか引数の扱いが良く判らない。これを切っ掛けに、Rubyをもう少し詳しく勉強してみることにしよう。
【2009/10/25 20:52】 | Gainer関係 | トラックバック(0) | コメント(0) | page top↑
GAINER 3日目(ちょっと進化)
GAINER3 昨日、秋月電子通商に注文した7セグメントLED(青色)が、もう届いたので、モチベーションアップして、少し高度なものに取り組んでみました。
前のセットに付いてきたボリュームに線を付けて、GAINERのアナログ入力に可変電圧(多分、0~5V)を供給し、その値を0~9の整数に換算して、その値を7セグメントLEDに表示するというもの。
 配線はLEDのデータシートを参考にして、抵抗値も概算で計算したら前のセットに入っていたもの(330Ω)でも良さそうだったので、そのまま。(今回は足を切ってブレッドボードにピッタリ収まるようにした。
 で、何とか動くようになったRubyのプログラムは以下のとおり。
------
require 'funnel'
include Funnel

i = 0
# 0,1,2,3,4,5,6,7,8,9
A=[1,0,1,1,0,1,1,1,1,1]
B=[1,1,1,1,1,0,0,1,1,1]
C=[1,1,0,1,1,1,1,1,1,1]
D=[1,0,1,1,0,1,1,0,1,1]
E=[1,0,1,0,0,0,1,0,1,0]
F=[1,0,0,0,1,1,1,1,1,1]
G=[0,0,1,1,1,1,1,0,1,1]

gio = Gainer.new

100.times do
ain0 = gio.ain(0).value # get analog input value
i = Integer(ain0 * 9)
gio.aout(0).value = A[i]
gio.aout(1).value = B[i]
gio.aout(2).value = C[i]
gio.aout(3).value = D[i]
gio.dout(0).value = E[i]
gio.dout(1).value = F[i]
gio.dout(2).value = G[i]

gio.dout(3).value = 0
sleep(0.5)
gio.dout(3).value = 1
end
--------
A~Gは、7セグメントの素子に対応している。
aout(0) ~ (3)はアナログ出力だが、1でデジタル出力と同じ電圧が出るらしい。GAINERでは幾つか動作モードがあるものの、アナログ入力を生かしてデジタル出力を5ピン以上にするモードが無いので、アナログ出力で試してみたら行けました。
尤も、RubyでGAINERの動作モードを変える方法がまだ解らないのだけどね。(笑)

テーマ:いいもの見つけた! - ジャンル:日記

【2009/10/24 21:53】 | Gainer関係 | トラックバック(0) | コメント(0) | page top↑
GAINER 2日目
GAINER2 昨日に続いて、セットに入っていた発光ダイオード3個を、Gainerのデジタル出力の0~2にセット(写真)して、2進カウンターを作ってみた。
Gainer本体に付いているボタンを押すたびに、1つカウントするという単純なもの。
 配線は簡単だったがプログラミングはRubyでプログラムを書くのが今回が初めてなので、Rubyのオフィシャルサイト(http://www.ruby-lang.org/ja/)のリファレンスを見ながら首っ引き。(笑)
 で、完成したのが次のプログラム。
---
require 'funnel'
include Funnel

i = 0
d0=[0,1,0,1,0,1,0,1]
d1=[0,0,1,1,0,0,1,1]
d2=[0,0,0,0,1,1,1,1]
gio = Gainer.new
gio.button.on RISING_EDGE do
gio.dout(0).value = d0[i]
gio.dout(1).value = d1[i]
gio.dout(2).value = d2[i]
i = i+1
if i > 7
i = 0
end
end
-----
もっとスマートな方法が有ったらご教授のほど、宜しくです。

 色々と応用してみたくなったので、7セグメントLED、ジャンパーワイヤー、ソリッドステートリレー、等々追加しようっと。調べると各種センサーも百円程度で買えるのですね。凄い時代だなぁ。
【2009/10/23 21:41】 | Gainer関係 | トラックバック(0) | コメント(0) | page top↑
初めてのGAINER
GAINER mini 遅まきながらGAINERというものに出会ってしまった。(http://gainer.cc/
いろいろ調べて、
本体はGainer-mini (http://www.gainer-mini.jp/)を送料無料に引かれてSWITCH SCIENCE (http://www.switch-science.com/)から、ブレッドボードはトリガーデバイスからお得そうなセット(http://triggerdevice.ocnk.net/product/81)をそれぞれ調達した。
 これで入門程度に遊ぶのに必要なものは揃った。(mini-USBケーブル別)

 で、今日自宅に届いたので、早速入門してみた。(笑)
写真の下の矢印の先が3軸加速度センサーモジュール(小さい!)で、上の矢印は発光ダイオード。それぞれセットのもので回路を組んでみた。
 そうして、GAINERを使うのに便利なライブラリである Funelを(http://funnel.cc/Main/HomePage?userlang=ja)から入手し、Ruby で遊んでみた。(GAINERをUSBで使うためのドライバーはMacOS X Snow Leopard標準のものでOKだった)
 GAINERをUSBケーブルで MacBookに接続してFunnel server を起動すると、あっけなく動作した。
 で、Rubyのサンプルを動かしてみると、完璧に動く。
 今回の目標は、加速度センサーで傾きを調べ、ある程度傾いたらLEDを発光させ、反対に傾いたら消灯するというもの。試行錯誤の結果、こんなコードでそれなりに動きました。
#-----------------------
gio.ain(0).on CHANGE do |event|
ain0 = event.target.value
if ain0 > 0.7
gio.dout(0).value = 1
end
if ain0 < 0.3
gio.dout(0).value = 0
end
end
#-----------------------
う~~ん、何か楽しいぞ!

まだまだ入門レベルなので、
アイデアやアドバイスを宜しくお願いいたします。

テーマ:いいもの見つけた! - ジャンル:日記

【2009/10/22 21:50】 | Gainer関係 | トラックバック(0) | コメント(0) | page top↑
1,000万パケットって210万円!
パケット定額料計算ウイジェット ソフトバンクではiPhoneなどでのパケット通信の通信品質確保対策として、12月から大量にパケットを使った人に対して通信速度制限をすると発表していますよね。(ソフトバンクの通信インフラが弱いだけじゃないの?)
http://mb.softbank.jp/mb/information/details/090929.html
 ということで、制限を掛けるとする月1,000万パケットってどれくらいか?計算してみた。その月の使用状況は mySoftbank にログインして、確定前料金照会にある、パケット通信料を見ると解る。ここで表示される金額は割引適用前なので、0.21で割り算すると、パケット数になる。
そこで、逆にパケット数から割引前の金額を求めるには、1,000万パケット×0.21で計算すればよい。 で、計算したら何と 210万円!
 今までの私の使い方では、10万円にも満たないので、安心だ。

 安心ついでに、以前公開してほったらかしにしていた、「パケット定額料計算.wdgt」を更新した。(上限4,410円に対応)
http://www.imfj.net/people/nomura/soft/Teigaku_Full/

 ところで、上記の発表を見て、パケット数を気にする人が増えたのか、iPhone用のアプリ「パケ代予測」
http://ynomura.com/packetTeigaku.aspx
が、最近少し売れている。
【2009/10/08 20:45】 | Mac好き | トラックバック(1) | コメント(0) | page top↑
| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。