class Apa102Rbpi::Strip
Attributes
base[R]
brightness[RW]
head[R]
led_frame_rgb_offsets[RW]
mirrors[R]
num_leds[R]
tail[R]
Public Class Methods
new(len = Apa102Rbpi.base.num_leds, opts = {})
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 8 def initialize(len = Apa102Rbpi.base.num_leds, opts = {}) @base = Apa102Rbpi.base if len.is_a?(Array) @head = len[0] @tail = len[1] if @head > @tail raise "Beginning of strip can't be a higher index than end" end @num_leds = (@tail - @head) + 1 else @num_leds = len @head = 0 @tail = @num_leds - 1 end @reverse = false @led_frame_rgb_offsets = opts[:led_frame_rgb_offsets] || @base.led_frame_rgb_offsets @brightness = opts[:brightness] || @base.brightness @mirrors = Set.new end
Public Instance Methods
clear()
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 111 def clear @num_leds.times do |led_idx| set_pixel(led_idx, 0) end end
clear!()
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 117 def clear! clear show! end
clear_mirrors()
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 45 def clear_mirrors @mirrors.each do |m| m.mirrors -= [self] end @mirrors.clear end
mirror(other_strip)
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 38 def mirror(other_strip) new_mirrors = @mirrors + other_strip.mirrors + Set.new([self, other_strip]) new_mirrors.each do |m| m.mirrors += (new_mirrors - [m]) end end
reverse()
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 30 def reverse @reverse = !@reverse end
reversed?()
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 34 def reversed? @reverse end
set_all_pixels(color, brightness = @brightness)
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 100 def set_all_pixels(color, brightness = @brightness) @num_leds.times do |led_idx| set_pixel(led_idx, color, brightness) end end
set_all_pixels!(color, brightness = @brightness)
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 106 def set_all_pixels!(color, brightness = @brightness) set_all_pixels(color, brightness) show! end
set_pixel(pos, color, brightness = nil)
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 57 def set_pixel(pos, color, brightness = nil) is_hex = if color.is_a?(Integer) true elsif color.is_a?(Array) false else raise 'Invalid color' end set_pixel_helper(pos, color, is_hex, brightness || @brightness) unless @mirrors.empty? @mirrors.each do |strip| strip.set_pixel_helper(pos, color, is_hex, brightness || strip.brightness) end end end
set_pixel!(pos, color, brightness = @brightness)
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 95 def set_pixel!(pos, color, brightness = @brightness) set_pixel(pos, color, brightness) show! end
set_pixel_helper(pos, color, is_hex, brightness)
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 74 def set_pixel_helper(pos, color, is_hex, brightness) led_frame_hdr = (brightness & 0b00011111) | 0b11100000 idx = if @reverse 4 * ((@tail - pos) % @base.num_leds) else 4 * ((pos + @head) % @base.num_leds) end if is_hex @base.led_frames[idx] = led_frame_hdr @base.led_frames[idx + @led_frame_rgb_offsets[:red]] = (color & 0xFF0000) >> 16 @base.led_frames[idx + @led_frame_rgb_offsets[:green]] = (color & 0x00FF00) >> 8 @base.led_frames[idx + @led_frame_rgb_offsets[:blue]] = (color & 0x0000FF) else @base.led_frames[idx] = led_frame_hdr @base.led_frames[idx + @led_frame_rgb_offsets[:red]] = color[0] @base.led_frames[idx + @led_frame_rgb_offsets[:green]] = color[1] @base.led_frames[idx + @led_frame_rgb_offsets[:blue]] = color[2] end end
show!()
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 53 def show! @base.show! end
Protected Instance Methods
mirrors=(m)
click to toggle source
# File lib/apa102_rbpi/strip.rb, line 124 def mirrors=(m) @mirrors = m end