Skip to content

Commit

Permalink
PWM: No implicit #digital_write in #write. Always #pwm_write
Browse files Browse the repository at this point in the history
  • Loading branch information
vickash committed Sep 21, 2024
1 parent 8d43a90 commit df18270
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 39 deletions.
2 changes: 1 addition & 1 deletion lib/denko/led/seven_segment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def write(char)
bits = CHARACTERS[char] || ALL_OFF
bits.each_with_index do |bit, index|
bit = 1^bit if anode
segments[index].write(bit) unless (segments[index].state == bit)
segments[index].digital_write(bit) unless (segments[index].state == bit)
end
end

Expand Down
37 changes: 20 additions & 17 deletions lib/denko/pulse_io/pwm_output.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,36 @@ module Denko
module PulseIO
class PWMOutput < DigitalIO::Output
interrupt_with :write


attr_reader :pwm_enabled

def initialize_pins(options={})
super(options)
@pwm_enabled = false
end

def write(value)
if value == board.low
digital_write(board.low)
elsif value == board.pwm_high
digital_write(board.high)
else
pwm_write(value)
end
def pwm_enable
self.mode = :output_pwm
@pwm_enabled = true
end

def pwm_write(value)
pwm_enable
board.pwm_write(pin, @state = value)
def pwm_disable
self.mode = :output
@pwm_enable = false
end

def pwm_enable
self.mode = :output_pwm unless mode == :output_pwm
def digital_write(value)
pwm_disable if pwm_enabled
super(value)
end

def pwm_disable
self.mode = :output

def pwm_write(value)
pwm_enable unless pwm_enabled
board.pwm_write(pin, value)
self.state = value
end

alias :write :pwm_write
end
end
end
14 changes: 7 additions & 7 deletions test/led/seven_segment_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,13 @@ def test_write_clears_if_unknown_char
part.segments.each do
mocks << Minitest::Mock.new.expect(:call, nil, [1])
end
part.segments[0].stub(:write, mocks[0]) do
part.segments[1].stub(:write, mocks[1]) do
part.segments[2].stub(:write, mocks[2]) do
part.segments[3].stub(:write, mocks[3]) do
part.segments[4].stub(:write, mocks[4]) do
part.segments[5].stub(:write, mocks[5]) do
part.segments[6].stub(:write, mocks[6]) do
part.segments[0].stub(:digital_write, mocks[0]) do
part.segments[1].stub(:digital_write, mocks[1]) do
part.segments[2].stub(:digital_write, mocks[2]) do
part.segments[3].stub(:digital_write, mocks[3]) do
part.segments[4].stub(:digital_write, mocks[4]) do
part.segments[5].stub(:digital_write, mocks[5]) do
part.segments[6].stub(:digital_write, mocks[6]) do
part.display('+')
end
end
Expand Down
17 changes: 3 additions & 14 deletions test/pulse_io/pwm_output_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,9 @@ def test_pwm_write
enable_mock.verify
end

def test_write_uses_digital_write_at_limits
mock = Minitest::Mock.new
mock.expect :call, nil, [board.high]
mock.expect :call, nil, [board.low]
part.stub(:digital_write, mock) do
part.write(board.pwm_high)
part.write(board.low)
end
mock.verify
end

def test_write_uses_analog_write_between_limits
mock = Minitest::Mock.new.expect :call, nil, [128]
part.stub(:pwm_write, mock) do
def test_write_uses_board_pwm_write_always
mock = Minitest::Mock.new.expect :call, nil, [14, 128]
board.stub(:pwm_write, mock) do
part.write(128)
end
mock.verify
Expand Down

0 comments on commit df18270

Please sign in to comment.