Sha256: 736bb48bc5cab9d7dec5e96ba5e2870c77b1a8cca131ba587dfd41c66dbf7bdf

Contents?: true

Size: 1.37 KB

Versions: 7

Compression:

Stored size: 1.37 KB

Contents

#
# Example using a rotary encoder to control audio output volume on a Mac.
#
require 'bundler/setup'
require 'denko'

board = Denko::Board.new(Denko::Connection::Serial.new)
encoder = Denko::DigitalIO::RotaryEncoder.new  board: board,
                                              pins:{ clock: 4, data: 5 },
                                              divider: 1,                # (default) read approx every divider ms
                                              steps_per_revolution: 30   # (default)

# Set up a pseudo terminal with osascript (AppleScript) in interactive mode.
# Calling a separate script each update is too slow.
class AppleVolumeWrapper
  require 'pty'
  require 'expect'

  def initialize
    @in, @out, pid = PTY.spawn('osascript -i')
    @in.expect(/>> /) # Terminal ready.
  end

  def get
    @out.write("output volume of (get volume settings)\r\n")
    @in.expect(/=> (\d+)\r\n/)[1].to_i
  end

  def set(value)
    @out.write("set volume output volume #{value}\r\n")
    @in.expect(/>> /)
  end
end

volume = AppleVolumeWrapper.new
puts "Current volume: #{volume.get}%"

encoder.add_callback do |update|
  # Increase by 2% for every step so it responds faster.
  value = (volume.get + (update[:change] * 2))
  value = 0 if value < 0
  value = 100 if value > 100
  volume.set(value)
  current_volume = volume.get
  puts "Current volume: #{current_volume}%"
end

sleep

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
denko-0.13.6 examples/advanced/rotary_encoder_mac_volume.rb
denko-0.13.5 examples/advanced/rotary_encoder_mac_volume.rb
denko-0.13.4 examples/advanced/rotary_encoder_mac_volume.rb
denko-0.13.3 examples/advanced/rotary_encoder_mac_volume.rb
denko-0.13.2 examples/advanced/rotary_encoder_mac_volume.rb
denko-0.13.1 examples/advanced/rotary_encoder_mac_volume.rb
denko-0.13.0 examples/advanced/rotary_encoder_mac_volume.rb