ws2801 0.1.2 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/ws2801.rb +65 -56
- metadata +6 -5
data/lib/ws2801.rb
CHANGED
@@ -5,9 +5,12 @@
|
|
5
5
|
|
6
6
|
# WS2801 driver
|
7
7
|
module WS2801
|
8
|
-
@@
|
9
|
-
|
10
|
-
|
8
|
+
@@options = {
|
9
|
+
:len => 25,
|
10
|
+
:strip => [],
|
11
|
+
:device => "/dev/spidev0.0",
|
12
|
+
:autowrite => true
|
13
|
+
}
|
11
14
|
|
12
15
|
# Set/read length of strip
|
13
16
|
#
|
@@ -19,8 +22,8 @@ module WS2801
|
|
19
22
|
# Arguments (or nil):
|
20
23
|
# count: (Integer)
|
21
24
|
def self.length len = nil
|
22
|
-
return @@len if len.nil?
|
23
|
-
@@len = len
|
25
|
+
return @@options[:len] if len.nil?
|
26
|
+
@@options[:len] = len
|
24
27
|
end
|
25
28
|
|
26
29
|
# Set/read device
|
@@ -33,84 +36,90 @@ module WS2801
|
|
33
36
|
# Arguments (or nil):
|
34
37
|
# device: (String)
|
35
38
|
def self.device dev = nil
|
36
|
-
return @@device if dev.nil?
|
37
|
-
@@device = dev
|
39
|
+
return @@options[:device] if dev.nil?
|
40
|
+
@@options[:device] = dev
|
38
41
|
end
|
39
42
|
|
40
|
-
#
|
43
|
+
# Set/read current Strip
|
41
44
|
#
|
42
|
-
# Example
|
43
|
-
# >> WS2801.
|
44
|
-
|
45
|
-
|
45
|
+
# Example;
|
46
|
+
# >> WS2801.strip
|
47
|
+
# >> WS2801.strip @newstrip
|
48
|
+
def self.strip strip = nil
|
49
|
+
return @@options[:strip] if strip.nil?
|
50
|
+
@@options[:strip] = strip
|
46
51
|
end
|
47
52
|
|
48
|
-
#
|
53
|
+
# Set/read current Autowrite option
|
54
|
+
# Write after each set (default: true)
|
49
55
|
#
|
50
56
|
# Example;
|
51
|
-
# >> WS2801.
|
52
|
-
|
53
|
-
|
57
|
+
# >> WS2801.autowrite
|
58
|
+
# >> WS2801.autowrite @newstrip
|
59
|
+
def self.autowrite autowrit = nil
|
60
|
+
return @@options[:autowrite] if autowrit.nil?
|
61
|
+
@@options[:autowrite] = autowrit
|
54
62
|
end
|
55
63
|
|
56
|
-
#
|
57
|
-
#
|
64
|
+
# Generate empty strip array
|
65
|
+
#
|
66
|
+
# Example:
|
67
|
+
# >> WS2801.generate
|
68
|
+
def self.generate
|
69
|
+
@@options[:strip] = Array.new(@@options[:len]*3+1) { 0 }
|
70
|
+
end
|
71
|
+
|
72
|
+
# Write colors to the device
|
73
|
+
# (this needs root rights)
|
58
74
|
#
|
59
75
|
# Example:
|
60
76
|
# >> WS2801.write
|
61
77
|
def self.write
|
62
|
-
return false if @@strip.nil?
|
78
|
+
return false if @@options[:strip].nil?
|
63
79
|
|
64
|
-
@@strip.each_with_index do |s,i|
|
65
|
-
@@strip[i] = 0 if @@strip[i].nil?
|
80
|
+
@@options[:strip].each_with_index do |s,i|
|
81
|
+
@@options[:strip][i] = 0 if @@options[:strip][i].nil?
|
66
82
|
end
|
67
83
|
|
68
|
-
File.open(@@device, 'w') do |file|
|
69
|
-
file.write(@@strip.pack('C*'))
|
84
|
+
File.open(@@options[:device], 'w') do |file|
|
85
|
+
file.write(@@options[:strip].pack('C*'))
|
70
86
|
end
|
71
87
|
end
|
72
88
|
|
73
|
-
#
|
89
|
+
# Set pixel to color
|
74
90
|
#
|
75
91
|
# Example:
|
76
|
-
#
|
92
|
+
# >> WS2801.set { :r => 255, :list => [1..10] }
|
93
|
+
# >> WS2801.set { :g => 128, :list => :all }
|
94
|
+
# >> WS2801.set { :r => 40, :g => 255, :b => 200, :list => 4 }
|
77
95
|
#
|
78
|
-
#
|
79
|
-
#
|
80
|
-
#
|
81
|
-
#
|
82
|
-
#
|
83
|
-
def self.
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
96
|
+
# Options:
|
97
|
+
# :list => [] # color in pixels in list
|
98
|
+
# :r => (Integer)
|
99
|
+
# :g => (Integer)
|
100
|
+
# :b => (Integer)
|
101
|
+
def self.set options = {}
|
102
|
+
self.generate if @@options[:strip].length == 0
|
103
|
+
options[:list] = (0..(self.length-1)).to_a if options[:list].nil? or options[:list] == :all
|
104
|
+
options[:list] = [options[:list]] if options[:list].is_a? Numeric
|
105
|
+
options[:list].each do |i|
|
106
|
+
@@options[:strip][(i*3)] = options[:r] || 0
|
107
|
+
@@options[:strip][(i*3)+1] = options[:g] || 0
|
108
|
+
@@options[:strip][(i*3)+2] = options[:b] || 0
|
109
|
+
end
|
110
|
+
self.write if @@options[:autowrite] == true
|
88
111
|
end
|
89
112
|
|
90
|
-
#
|
113
|
+
# Fade to color
|
91
114
|
#
|
92
|
-
# Example:
|
93
|
-
# >> WS2801.fill 120, 255, 120
|
94
|
-
#
|
95
|
-
# Arguments:
|
96
|
-
# red (Integer)
|
97
|
-
# green (Integer)
|
98
|
-
# blue (Integer)
|
99
|
-
def self.fill red, green, blue
|
100
|
-
self.gen if @@strip.length == 0
|
101
|
-
((@@strip.size-1)/3).times do |i|
|
102
|
-
@@strip[(i*3)] = red
|
103
|
-
@@strip[(i*3)+1] = green
|
104
|
-
@@strip[(i*3)+2] = blue
|
105
|
-
end
|
106
|
-
end
|
115
|
+
# Example: WS2801.fade
|
107
116
|
|
108
|
-
#
|
117
|
+
# Set off black
|
109
118
|
#
|
110
119
|
# Example:
|
111
|
-
# >> WS2801.
|
112
|
-
def self.
|
113
|
-
self.
|
114
|
-
self.write
|
120
|
+
# >> WS2801.off
|
121
|
+
def self.off
|
122
|
+
self.generate
|
123
|
+
self.write if @@options[:autowrite] == true
|
115
124
|
end
|
116
125
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ws2801
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,14 +11,15 @@ bindir: bin
|
|
11
11
|
cert_chain: []
|
12
12
|
date: 2013-01-12 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
|
-
description: Controlling ws2801 chip from Ruby on Raspberry PI (RGB LED
|
15
|
-
|
14
|
+
description: Controlling ws2801 chip from Ruby on Raspberry PI or similar (RGB LED
|
15
|
+
Stripes/Pixel)
|
16
|
+
email: roman@pramberger.ch
|
16
17
|
executables: []
|
17
18
|
extensions: []
|
18
19
|
extra_rdoc_files: []
|
19
20
|
files:
|
20
21
|
- lib/ws2801.rb
|
21
|
-
homepage: https://
|
22
|
+
homepage: https://github.com/b1nary/ws2801
|
22
23
|
licenses: []
|
23
24
|
post_install_message:
|
24
25
|
rdoc_options: []
|
@@ -41,5 +42,5 @@ rubyforge_project:
|
|
41
42
|
rubygems_version: 1.8.23
|
42
43
|
signing_key:
|
43
44
|
specification_version: 3
|
44
|
-
summary: Controlling ws2801 chip from Ruby on Raspberry PI (RGB LED Stripes/Pixel)
|
45
|
+
summary: Controlling ws2801 chip from Ruby on Raspberry PI or similar (RGB LED Stripes/Pixel)
|
45
46
|
test_files: []
|