gainer.rbのデジタル・アナログ入力処理を読んでみた
公開日:
:
最終更新日:2014/01/29
Gainer
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
以下、該当部分。
@analog_input = []
@digital_input = []
attr_reader :led, :analog_input, :digital_input, :analog_output, :digital_output
def peek_digital_input
command('R')
end
def peek_analog_input
command('I')
end
def process_next_event(wait = nil)
reply = next_event
sleep(wait) if wait
process_event(reply)
end
private
def command(cmd, args = {})
command_send(cmd + '*')
process_next_event(args[:wait])
end
def process_event(event)
case event
when '!*'
raise
when 'h*'
@led = true
when 'l*'
@led = false
when 'N*'
@on_pressed.call
when 'F*'
@on_released.call
when /^I([0-9A-F]+)\*$/
s = $1
s.scan(/../).each_with_index do |s, i|
@analog_input[i] = s.to_i(16)
end
when /^R([0-9A-F]+)\*$/
s = $1
s.reverse.scan(/./).each_with_index do |s, i|
@digital_input[i] = s.to_i(16)
end
end
end
思ったよりもかなり簡単。
関連記事
- PREV
- gainer.rb を読む
- NEXT
- Rubyを使ってPaSoRi経由でSuicaの乗車履歴を取得