class Domotics::Core::Dimmer
Constants
- DEFAULT_LEVEL
- MAX_LEVEL
- MAX_STEPS
- MIN_LEVEL
- STEP_DELAY
- STEP_SIZE
Public Class Methods
new(args = {})
click to toggle source
Calls superclass method
Domotics::Core::Element::new
# File lib/domotics/core/element/dimmer.rb, line 11 def initialize(args = {}) @type = args[:type] || :dimmer @fade_lock = Mutex.new @fade_thread = nil args[:driver] = "PWMPin" load_driver args super end
Public Instance Methods
bright(value = nil)
click to toggle source
Increase brightness level (value 0-100%)
# File lib/domotics/core/element/dimmer.rb, line 45 def bright(value = nil) if value set_state value * MAX_LEVEL / 100 else set_state state + STEP_SIZE end end
dim(value = nil)
click to toggle source
Decrease brightness level (value 0-100%)
# File lib/domotics/core/element/dimmer.rb, line 37 def dim(value = nil) if value set_state value * MAX_LEVEL / 100 else set_state state - STEP_SIZE end end
fade_to(value = DEFAULT_LEVEL, speed_divisor = 1)
click to toggle source
# File lib/domotics/core/element/dimmer.rb, line 57 def fade_to(value = DEFAULT_LEVEL, speed_divisor = 1) @fade_lock.synchronize do @fade_thread.kill if @fade_thread and @fade_thread.alive? @fade_thread = Thread.new do op = (value - state) >= 0 ? :+ : :- steps = ((value - state).abs / STEP_SIZE.to_f).round steps.times do set_state(state.public_send(op, STEP_SIZE), kill_fader: :no) sleep speed_divisor * STEP_DELAY end @fade_lock.synchronize { @fade_thread = nil } end end @fade_thread end
off()
click to toggle source
# File lib/domotics/core/element/dimmer.rb, line 53 def off set_state MIN_LEVEL unless state == MIN_LEVEL end
set_state(value = DEFAULT_LEVEL, opt = {})
click to toggle source
Calls superclass method
Domotics::Core::Element#set_state
# File lib/domotics/core/element/dimmer.rb, line 24 def set_state(value = DEFAULT_LEVEL, opt = {}) unless opt[:kill_fader] == :no @fade_lock.synchronize do @fade_thread.kill if @fade_thread and @fade_thread.alive? end end if value.is_a? Integer value = MIN_LEVEL if value < MIN_LEVEL value = MAX_LEVEL if value > MAX_LEVEL end super value end
state()
click to toggle source
Calls superclass method
Domotics::Core::Element#state
# File lib/domotics/core/element/dimmer.rb, line 20 def state st = super st.is_a?(Integer) ? st : 0 end