Class: Denko::DigitalIO::RotaryEncoder

Inherits:
Object
  • Object
show all
Includes:
Behaviors::Callbacks, Behaviors::MultiPin
Defined in:
lib/denko/digital_io/rotary_encoder.rb

Instance Attribute Summary collapse

Attributes included from Behaviors::Callbacks

#callback_mutex

Attributes included from Behaviors::MultiPin

#pin, #pins, #proxies

Attributes included from Behaviors::Component

#board

Instance Method Summary collapse

Methods included from Behaviors::Callbacks

#add_callback, #callbacks, #initialize, #remove_callback, #update

Methods included from Behaviors::State

#initialize, #state

Methods included from Behaviors::MultiPin

#before_initialize, #convert_pins, #proxy_pin, #proxy_states, #require_pin, #require_pins

Methods included from Behaviors::Component

#initialize, #micro_delay

Instance Attribute Details

#reversedObject (readonly)

Returns the value of attribute reversed.



30
31
32
# File 'lib/denko/digital_io/rotary_encoder.rb', line 30

def reversed
  @reversed
end

Instance Method Details

#after_initialize(options = {}) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/denko/digital_io/rotary_encoder.rb', line 12

def after_initialize(options={})
  super(options)
  self.steps_per_revolution = options[:steps_per_revolution] || 30
  @reverse = false

  # Avoid repeated memory allocation.
  self.state = { steps: 0, angle: 0 }
  @reading   = { steps: 0, angle: 0, change: 0}
  
  # DigitalInputs listen with default divider automatically. Override here.
  @divider = options[:divider] || 1
  clock.listen(@divider)
  data.listen(@divider)
  
  observe_pins
  reset
end

#angleObject



44
45
46
# File 'lib/denko/digital_io/rotary_encoder.rb', line 44

def angle
  state[:angle]
end

#initialize_pins(options = {}) ⇒ Object



7
8
9
10
# File 'lib/denko/digital_io/rotary_encoder.rb', line 7

def initialize_pins(options={})
  proxy_pin :clock, DigitalIO::Input
  proxy_pin :data,  DigitalIO::Input
end

#resetObject



52
53
54
# File 'lib/denko/digital_io/rotary_encoder.rb', line 52

def reset
  self.state = {steps: 0, angle: 0}
end

#reverseObject



32
33
34
# File 'lib/denko/digital_io/rotary_encoder.rb', line 32

def reverse
  @reversed = !@reversed
end

#stepsObject



48
49
50
# File 'lib/denko/digital_io/rotary_encoder.rb', line 48

def steps
  state[:steps]
end

#steps_per_revolutionObject



36
37
38
# File 'lib/denko/digital_io/rotary_encoder.rb', line 36

def steps_per_revolution
  (360 / @degrees_per_step).to_i
end

#steps_per_revolution=(step_count) ⇒ Object



40
41
42
# File 'lib/denko/digital_io/rotary_encoder.rb', line 40

def steps_per_revolution=(step_count)
  @degrees_per_step = 360.to_f / step_count
end