Class: Denko::PulseIO::PWMOutput
Constant Summary
Behaviors::Lifecycle::CALLBACK_METHODS
Behaviors::OutputPin::OUTPUT_MODES
Instance Attribute Summary
#interrupts_enabled, #thread
#state
#mode, #pin
#board, #params
Instance Method Summary
collapse
included
#high, #high?, #low, #low?, #pre_callback_filter, #toggle
#enable_interrupts, included, #mruby_thread_check, #stop, #stop_thread, #threaded, #threaded_loop
#add_callback, #callbacks, #pre_callback_filter, #remove_callback, #update
#update_state
#convert_pins, #initialize_pins
#initialize, #micro_delay
Instance Method Details
#_frequency=(value) ⇒ Object
72
73
74
75
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 72
def _frequency=(value)
@frequency = value
@period = nil
end
|
#_resolution=(value) ⇒ Object
77
78
79
80
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 77
def _resolution=(value)
@resolution = value
@pwm_high = nil
end
|
#digital_write(value) ⇒ Object
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 28
def digital_write(value)
unless pwm_enabled?
super(value)
else
if board.platform == :arduino
pwm_disable
super(value)
else
if value == 1
pwm_write(period)
else
pwm_write(0)
end
end
end
end
|
#duty=(percent) ⇒ Object
20
21
22
23
24
25
26
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 20
def duty=(percent)
if board.platform == :arduino
pwm_write((percent / 100.0 * pwm_high).round)
else
pwm_write((percent / 100.0 * period).round)
end
end
|
#frequency ⇒ Object
56
57
58
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 56
def frequency
@frequency ||= params[:frequency] || 1000
end
|
#frequency=(value) ⇒ Object
82
83
84
85
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 82
def frequency=(value)
self._frequency = value
pwm_enable
end
|
#period ⇒ Object
60
61
62
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 60
def period
@period ||= (1_000_000_000.0 / frequency).round
end
|
#pwm_disable ⇒ Object
104
105
106
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 104
def pwm_disable
self.mode = :output if board.platform == :arduino
end
|
#pwm_enable(frequency: nil, resolution: nil) ⇒ Object
96
97
98
99
100
101
102
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 96
def pwm_enable(frequency: nil, resolution: nil)
self._frequency = frequency if frequency
self._resolution = resolution if resolution
board.set_pin_mode(pin, :output_pwm, pwm_settings_hash)
@mode = :output_pwm
end
|
#pwm_enabled? ⇒ Boolean
108
109
110
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 108
def pwm_enabled?
self.mode == :output_pwm
end
|
#pwm_high ⇒ Object
68
69
70
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 68
def pwm_high
@pwm_high ||= (2**resolution-1)
end
|
#pwm_settings_hash ⇒ Object
92
93
94
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 92
def pwm_settings_hash
{ frequency: frequency, period: period, resolution: resolution }
end
|
#pwm_write(value) ⇒ Object
Also known as:
write
Raw write. Takes nanoseconds on Linux, 0..pwm_high on Arduino.
49
50
51
52
53
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 49
def pwm_write(value)
pwm_enable unless pwm_enabled?
board.pwm_write(pin, value)
self.state = value
end
|
#resolution ⇒ Object
64
65
66
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 64
def resolution
@resolution ||= params[:resolution] || board.analog_write_resolution
end
|
#resolution=(value) ⇒ Object
87
88
89
90
|
# File 'lib/denko/pulse_io/pwm_output.rb', line 87
def resolution=(value)
self._resolution = value
pwm_enable
end
|