-
Notifications
You must be signed in to change notification settings - Fork 6
/
matrix.rb
129 lines (100 loc) · 2.26 KB
/
matrix.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
=begin
This example uses matrix objects to create frames with patterns really fast
@author Akhil Stanislavose <[email protected]>
=end
require 'blinken_window/screen'
require './blinken_string'
require 'matrix'
W, H = 6, 10
require 'blinken_window/shifters/terminal_shifter'
SCREEN = BlinkenWindow::Screen.new(W,H, BlinkenWindow::Shifters::TerminalShifter.new(W,H))
# require 'blinken_window/shifters/gpio_shifter'
# SCREEN = BlinkenWindow::Screen.new(W, H, BlinkenWindow::Shifters::GPIOShifter.new(5,4,6))
def all(bit)
SCREEN.paint(Matrix.build(H, W) { bit }.to_a)
end
def flash(s=0.5)
all(1)
sleep(s)
SCREEN.clear
sleep(s)
end
def random(s=0.08)
SCREEN.paint(Matrix.build(H,W) { rand(2) }.to_a)
sleep(block_given? ? yield : s)
end
def slideright(s=0.04)
W.times do |col|
SCREEN.paint(Matrix.build(H,W) { |r,c| c > col ? 1 : 0 }.to_a)
sleep(s)
end
end
def slideleft(s=0.04)
(0...W).reverse_each do |col|
SCREEN.paint(Matrix.build(H,W) { |r,c| c > col ? 0 : 1 }.to_a)
sleep(s)
end
end
def slideup(s=0.04)
H.times do |row|
SCREEN.paint(Matrix.build(H,W) { |r,c| r > row ? 1 : 0 }.to_a)
sleep(s)
end
end
def slidedown(s=0.04)
(0...H).reverse_each do |row|
SCREEN.paint(Matrix.build(H,W) { |r,c| r > row ? 0 : 1 }.to_a)
sleep(s)
end
end
def ntoxy(n)
y = n/6
x = n - y*6
[x,y]
end
def snake(width,s=0.02)
ns = (0..(59-width)).to_a + (0..(59-width)).to_a.reverse
ns.each do |i|
SCREEN.clear
i.upto(i+width) do |j|
break if j == 0 || j == 60
SCREEN.set(*ntoxy(j))
end
SCREEN.render
sleep(s)
end
end
loop do
# Random blinks
30.times do |i|
random(0.08)
# random { 0.08 + ((i > 45 ? i : 0) * 0.001) # slow down to the end }
end
# Switch on all
all(1)
sleep(0.5)
# flash twice
3.times { flash(0.5) }
all(1)
sleep(0.5)
2.times { snake(32,0.02) }
20.times { random(0.08) }
all(1)
sleep(0.5)
# Switch column by column from left to right
slideright(0.07)
slideleft(0.07)
slideright(0.07)
slidedown(0.04)
slideup(0.04)
# slidedown(0.04)
# 5.times { random(0.08) }
flash(0.4)
all(1)
sleep(0.4)
slideright(0.04)
BlinkenString.new('Merry Christmas!').scroll do |frame|
SCREEN.paint(frame)
sleep(0.08)
end
end