littlewire 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/littlewire.rb +15 -16
  3. data/lib/ws2811.rb +72 -5
  4. metadata +11 -17
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b02ec3c25311d8cf29a0e34fbf14a9e12f7c1d7a
4
+ data.tar.gz: 139849c4608ae5ddc03e79c01b830ff9e0ec720d
5
+ SHA512:
6
+ metadata.gz: 843864b20dc637f517247ba49982a8c5fafd28c019cd8e4c63c0eb411c145f611b4a00bac21b890cfffa247d6fdeb207ad510173fc369b66531f78250ff372e6
7
+ data.tar.gz: 72a4af2222770d54a155caf7a07ac27fbb64b48c7d84534f2e34105f6c238ed87f54b446bf0a925e1afeb44506f794c6d2559297f8adeed862cd828785bde1f9
data/lib/littlewire.rb CHANGED
@@ -204,7 +204,21 @@ class LittleWire
204
204
  self.send "#{pin[0]}_write", pin[1], value
205
205
  end
206
206
 
207
- protected
207
+
208
+ # lookup a pin name in a map and return it's raw identifier
209
+ def get_pin map, value #:nodoc:
210
+ value = value.to_sym if value.is_a? String
211
+ value = map[value] if map.has_key? value
212
+ value
213
+ end
214
+
215
+ # translate possible literal values in to a boolean true or false (meaning high or low)
216
+ def get_boolean value #:nodoc:
217
+ # some exceptions
218
+ value = false if value == :low or value == 0 or value == nil or value == :off or value == :ground or value == :gnd
219
+ !! value # double invert value in to boolean form
220
+ end
221
+
208
222
  # raw opened device
209
223
  def io #:nodoc:
210
224
  unless @io
@@ -297,19 +311,4 @@ class LittleWire
297
311
  value |= LIBUSB::ENDPOINT_IN if opts.has_key? :dataIn
298
312
  return value
299
313
  end
300
-
301
-
302
- # lookup a pin name in a map and return it's raw identifier
303
- def get_pin map, value #:nodoc:
304
- value = value.to_sym if value.is_a? String
305
- value = map[value] if map.has_key? value
306
- value
307
- end
308
-
309
- # translate possible literal values in to a boolean true or false (meaning high or low)
310
- def get_boolean value #:nodoc:
311
- # some exceptions
312
- value = false if value == :low or value == 0 or value == nil or value == :off or value == :ground or value == :gnd
313
- !! value # double invert value in to boolean form
314
- end
315
314
  end
data/lib/ws2811.rb CHANGED
@@ -12,18 +12,81 @@ require 'colorist'
12
12
  class LittleWire::WS2811
13
13
  attr_accessor :colors
14
14
  attr_accessor :pin
15
-
15
+ attr_reader :wiring
16
+ ColorTransformer = {
17
+ rgb: ->(input) {
18
+ input # passthrough
19
+ },
20
+ grb: ->(input) {
21
+ Colorist::Color.from_rgb(input.g, input.r, input.b)
22
+ },
23
+ bgr: ->(input) {
24
+ Colorist::Color.from_rgb(input.b, input.r, input.g)
25
+ },
26
+ gbr: ->(input) {
27
+ Colorist::Color.from_rgb(input.g, input.b, input.r)
28
+ },
29
+ rbg: ->(input) {
30
+ Colorist::Color.from_rgb(input.r, input.b, input.g)
31
+ },
32
+ greyscale: ->(input) {
33
+ grey = (input.r + input.g + input.b) / 3 # average the colours
34
+ Colorist::Color.from_rgb(grey, grey, grey)
35
+ },
36
+ # lookup chart
37
+ florapixel_v1: :rbg,
38
+ florapixels_v1: :florapixel_v1,
39
+ ws2812: :rgb,
40
+ florapixel_v2: :ws2812,
41
+ florapixels_v2: :florapixel_v2,
42
+ grayscale: :greyscale, # Woo English!
43
+ white: :greyscale,
44
+ }
45
+ ChannelSize = 64 # LittleWire can store 64 values
16
46
 
17
47
  def initialize wire, default_pin = false # :nodoc:
18
48
  @wire = wire
19
49
  @pin = default_pin
20
50
  @colors = []
51
+ @wiring = :rgb
52
+ @wiring_map = ColorTransformer[:rgb]
53
+ end
54
+
55
+ # Set the pixel wiring style. The default :rgb is great for the little ws2812 LEDs
56
+ # which have the chips built in as a little black cube inside the LED. This setting is for
57
+ # other LEDs where the controller chip is outside the LED. In some of these LEDs the red,
58
+ # green, and blue outputs of the controller chip connect to different colours of LEDs!
59
+ #
60
+ # Of particular note, the original Adafruit Florapixels (now called version 1) can be modified
61
+ # to run at the 800khz speed instead of 400khz by breaking off this leg on the chip on the back:
62
+ #
63
+ # ______
64
+ # -|o |-
65
+ # -| |- <--- this one!
66
+ # -| |-
67
+ # -|______|-
68
+ #
69
+ # This makes them compatible with LittleWire and cheap LED strips, but these florapixels are
70
+ # wired bizarrely in RBG order. I rebuke thee, adafruit industries!! Also supposedly some
71
+ # other version of the v1 florapixels used another different wiring and I don't think they're
72
+ # labeled differently, so try it and see what works for you, or just give up and buy some
73
+ # ws2812 strip from aliexpress - it's only like 30¢ per LED including shipping anyway!
74
+ def wiring=(style)
75
+ @wiring_map = style.to_sym
76
+ # loop till we resolve symbol chain in to a real proc we can map colours through
77
+ @wiring_map = ColorTransformer[@wiring_map] while @wiring_map.is_a? Symbol
78
+ # if never exhausted lookup, you all get errors!!! ERRORS FOR EVERYONE!!!
79
+ raise "Unknown Wiring Style #{style.inspect}! Must be one of " +
80
+ "#{ColorTransformer.keys.map { |x| x.inspect }.join(', ')}" +
81
+ " or a Proc which transforms a Colorist::Color" if @wiring_map == nil
82
+ @wiring = style
21
83
  end
22
84
 
23
85
  # send colours to strip, optionally specifying a pin if not specified via
24
- # littlewire.ws2811(pin).output
86
+ #
87
+ # littlewire.ws2811(pin).output
25
88
  def output pin = nil
26
- colors_buffer = @colors.map { |i| i.is_a?(Colorist::Color) ? i : i.to_color }
89
+ colors_buffer = @colors.map { |i| @wiring_map[i.is_a?(Colorist::Color) ? i : i.to_color] }
27
90
  output_pin = @wire.get_pin(LittleWire::DigitalPinMap, pin || @pin)
28
91
  raise "Must specify output pin for ws2811 strip" unless output_pin.is_a? Integer
29
92
 
@@ -39,15 +102,19 @@ class LittleWire::WS2811
39
102
  end
40
103
  end
41
104
 
105
+ # Set strip to an array of colours, automatically outputting them to the strip immediately
42
106
  def send *colors
43
107
  @colors = colors.flatten
44
108
  output
45
109
  end
46
110
  alias_method :set, :send
47
111
 
112
+ # Set the whole strip to be black! This can be nice at the start of your program, because
113
+ # the strip starts out being whatever colours it was when it was powered up, which can be
114
+ # random - this makes sure everything is black, at least up to the max 64 LEDs littlewire
115
+ # supports per channel
48
116
  def black!
49
- @colors = ['black'] * 64
50
- output
117
+ send(['black'] * ChannelSize)
51
118
  end
52
119
 
53
120
  private
metadata CHANGED
@@ -1,46 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: littlewire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
5
- prerelease:
4
+ version: 0.9.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Bluebie
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-29 00:00:00.000000000 Z
11
+ date: 2013-06-05 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: libusb
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 0.2.0
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: 0.2.0
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: colorist
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: 0.0.2
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: 0.0.2
46
41
  description: A little library for a little wire. Providing a pure ruby interface (via
@@ -70,6 +65,7 @@ files:
70
65
  - examples/led pixel.rb
71
66
  homepage: http://creativepony.com/littlewire/
72
67
  licenses: []
68
+ metadata: {}
73
69
  post_install_message:
74
70
  rdoc_options:
75
71
  - --main
@@ -77,21 +73,19 @@ rdoc_options:
77
73
  require_paths:
78
74
  - lib
79
75
  required_ruby_version: !ruby/object:Gem::Requirement
80
- none: false
81
76
  requirements:
82
- - - ! '>='
77
+ - - '>='
83
78
  - !ruby/object:Gem::Version
84
79
  version: '0'
85
80
  required_rubygems_version: !ruby/object:Gem::Requirement
86
- none: false
87
81
  requirements:
88
- - - ! '>='
82
+ - - '>='
89
83
  - !ruby/object:Gem::Version
90
84
  version: '0'
91
85
  requirements: []
92
86
  rubyforge_project:
93
- rubygems_version: 1.8.23
87
+ rubygems_version: 2.0.0
94
88
  signing_key:
95
- specification_version: 3
89
+ specification_version: 4
96
90
  summary: A tiny library for littlewire.cc usb devices
97
91
  test_files: []