raspberry_pi_iot 0.0.8 → 0.0.9

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/doc/Actuator.html +1 -1
  3. data/doc/BH1750.html +1 -1
  4. data/doc/BME280.html +1 -1
  5. data/doc/BMP280.html +1 -1
  6. data/doc/BMxSensor.html +1 -1
  7. data/doc/BinaryActuator.html +1 -1
  8. data/doc/BinaryEffector.html +1 -1
  9. data/doc/BinaryReceptor.html +1 -1
  10. data/doc/BinarySensor.html +1 -1
  11. data/doc/Bus.html +1 -1
  12. data/doc/Button.html +343 -53
  13. data/doc/DHT11.html +1 -1
  14. data/doc/DHT22.html +1 -1
  15. data/doc/DHTxxSensor.html +1 -1
  16. data/doc/DS18B20.html +1 -1
  17. data/doc/DigitalActuator.html +1 -1
  18. data/doc/DigitalEffector.html +16 -28
  19. data/doc/DigitalReceptor.html +1 -1
  20. data/doc/DigitalSensor.html +1 -1
  21. data/doc/Effector.html +1 -1
  22. data/doc/HCSR501.html +1 -1
  23. data/doc/HumitureSensor.html +1 -1
  24. data/doc/IoT.html +1 -1
  25. data/doc/LED.html +99 -47
  26. data/doc/MAX44009.html +1 -1
  27. data/doc/RaspberryPi.html +1 -1
  28. data/doc/RaspberryPiIoT.html +115 -0
  29. data/doc/Receptor.html +1 -1
  30. data/doc/Sensor.html +1 -1
  31. data/doc/TemperatureSensor.html +1 -1
  32. data/doc/_index.html +16 -1
  33. data/doc/class_list.html +1 -1
  34. data/doc/file.LICENSE.html +92 -0
  35. data/doc/file.README.html +26 -4
  36. data/doc/file_list.html +5 -0
  37. data/doc/index.html +26 -4
  38. data/doc/method_list.html +105 -113
  39. data/doc/top-level-namespace.html +2 -2
  40. data/lib/button.rb +28 -4
  41. data/lib/digital_effector.rb +8 -14
  42. data/lib/led.rb +4 -0
  43. data/lib/led_rgb.rb +27 -44
  44. data/lib/raspberry_pi_iot.rb +7 -0
  45. data/test/test_Raspberry_Pi_IoT.rb +11 -0
  46. data/test/test_button.rb +9 -3
  47. data/test/test_helper.rb +4 -0
  48. data/test/test_led.rb +4 -4
  49. data/test/test_led_rgb.rb +25 -2
  50. data/test/test_thermal.rb +27 -0
  51. metadata +69 -4
@@ -82,7 +82,7 @@
82
82
  <p class="children">
83
83
 
84
84
 
85
- <strong class="modules">Modules:</strong> <span class='object_link'><a href="Bus.html" title="Bus (module)">Bus</a></span>, <span class='object_link'><a href="IoT.html" title="IoT (module)">IoT</a></span>, <span class='object_link'><a href="RaspberryPi.html" title="RaspberryPi (module)">RaspberryPi</a></span>
85
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="Bus.html" title="Bus (module)">Bus</a></span>, <span class='object_link'><a href="IoT.html" title="IoT (module)">IoT</a></span>, <span class='object_link'><a href="RaspberryPi.html" title="RaspberryPi (module)">RaspberryPi</a></span>, <span class='object_link'><a href="RaspberryPiIoT.html" title="RaspberryPiIoT (module)">RaspberryPiIoT</a></span>
86
86
 
87
87
 
88
88
 
@@ -102,7 +102,7 @@
102
102
  </div>
103
103
 
104
104
  <div id="footer">
105
- Generated on Tue Dec 18 16:03:38 2018 by
105
+ Generated on Thu Dec 20 18:09:38 2018 by
106
106
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
107
107
  0.9.16 (ruby-2.3.3).
108
108
  </div>
data/lib/button.rb CHANGED
@@ -10,31 +10,43 @@ class Button < BinaryReceptor
10
10
  @measure_pause = 0.01
11
11
  @long_click = 1.0
12
12
  @short_interval = 0.2
13
+ @timeout = 30
13
14
  @intervals = []
15
+ # samples: wait time press time wait time press time
16
+ # double press: [[1.486804292, 0.090814152], [0.131284967, 0.13125429]]
17
+ # long press: [[0.910878286, 1.109352219]]
14
18
  end
15
19
 
16
- # Is button pressed?
20
+ # Is button being pressed?
17
21
  def pressed?
18
22
  low?
19
23
  end
20
24
 
21
- # Is button not pressed?
25
+ # Is button not being pressed?
22
26
  def not_pressed?
23
27
  high?
24
28
  end
25
29
 
30
+ def was_pressed?
31
+ @intervals.size > 0
32
+ end
33
+
34
+ def was_not_pressed?
35
+ !was_pressed?
36
+ end
37
+
26
38
  # Wait for the 1st pressing of button
27
39
  def wait_for_press
28
40
  wait_for_presses(1)
29
41
  end
30
42
 
31
43
  # Wait for several sequential presses
32
- def wait_for_presses(attempts=2)
44
+ def wait_for_presses(attempts=2, timeout=@timeout)
33
45
  @intervals = []
34
46
  attempts.times do
35
47
  interval = []
36
48
  timer = Time.now
37
- while not_pressed? do
49
+ while not_pressed? && (Time.now-timer) < timeout do
38
50
  sleep @measure_pause
39
51
  end
40
52
  interval << Time.now-timer
@@ -67,4 +79,16 @@ class Button < BinaryReceptor
67
79
  def long_press?(intervals=@intervals)
68
80
  intervals.size == 1 && intervals[0][1] >= @long_click
69
81
  end
82
+
83
+ def set_timeout(timeout)
84
+ @timeout = timeout
85
+ end
86
+
87
+ def timeout?
88
+ min_wait_time = 0.0
89
+ @intervals.each do |interval|
90
+ min_wait_time = [min_wait_time, interval[0]].min
91
+ end
92
+ min_wait_time > @timeout
93
+ end
70
94
  end
@@ -9,13 +9,13 @@ class DigitalEffector < Effector
9
9
  @pins = {} # GPIO pins
10
10
 
11
11
  def initialize(pins, state=:low)
12
- @states = {}
13
- @pins = pins
12
+ @states = {} # ON / Off states for pin numbers
13
+ @pins = pins # DigitalEffector.new {red: 17, green: 28, blue: 22}
14
14
  @pins.each_value do |pin|
15
15
  RPi::GPIO.setup pin, :as => :output, :initialize => state
16
16
  @states[pin] = (state == :high)
17
17
  end
18
- @pin = pins.values[0]
18
+ @pin = pins.values[0] # default pin
19
19
  end
20
20
 
21
21
  def self.on(pin=@pin)
@@ -27,23 +27,17 @@ class DigitalEffector < Effector
27
27
  end
28
28
 
29
29
  def on(pin=@pin)
30
- BinaryEffector.on @pin
31
- @states[pin] = true
30
+ DigitalEffector.on pin
31
+ @states[pin_number(pin)] = true
32
32
  end
33
33
 
34
34
  def off(pin=@pin)
35
- BinaryEffector.off @pin
36
- @states[pin] = false
35
+ DigitalEffector.off pin
36
+ @states[pin_number(pin)] = false
37
37
  end
38
38
 
39
39
  def on?(pin=@pin)
40
- state = nil
41
- if pin.class.name == 'Fixnum' # by number
42
- state = @states[pin]
43
- elsif @pins[pin] # by name
44
- state = @states[@pins[pin]]
45
- end
46
- state
40
+ @states[pin_number(pin)]
47
41
  end
48
42
 
49
43
  def off?(pin=@pin)
data/lib/led.rb CHANGED
@@ -7,10 +7,12 @@ class LED < BinaryEffector
7
7
  self.name = 'LED'
8
8
  end
9
9
 
10
+ # Turn on the LED.
10
11
  def on(pin=@pin)
11
12
  super(pin)
12
13
  end
13
14
 
15
+ # Turn off the LED.
14
16
  def off(pin=@pin)
15
17
  super(pin)
16
18
  end
@@ -25,12 +27,14 @@ class LED < BinaryEffector
25
27
  end
26
28
  end
27
29
 
30
+ # Turn the LED on for N seconds.
28
31
  def on_for(seconds=1)
29
32
  on
30
33
  sleep seconds
31
34
  off
32
35
  end
33
36
 
37
+ # Turn the LED off for N seconds.
34
38
  def off_for(seconds=1)
35
39
  off
36
40
  sleep seconds
data/lib/led_rgb.rb CHANGED
@@ -14,45 +14,25 @@ class LED
14
14
  self.name = 'RGB LED'
15
15
  end
16
16
 
17
- def red_on
18
- DigitalEffector.on @red
19
- end
20
-
21
- def red_off
22
- DigitalEffector.off @red
23
- end
24
-
25
- def green_on
26
- DigitalEffector.on @green
27
- end
28
-
29
- def green_off
30
- DigitalEffector.off @green
31
- end
32
-
33
- def blue_on
34
- DigitalEffector.on @blue
35
- end
36
-
37
- def blue_off
38
- DigitalEffector.off @blue
39
- end
40
-
41
- def on(color)
17
+ def on(color=:all)
42
18
  color = :aoi if color == :aqua
43
19
  case color
44
20
  when :red
45
- red_on
21
+ super @red
46
22
  when :green
47
- green_on
23
+ super @green
48
24
  when :blue
49
- blue_on
25
+ super @blue
50
26
  when :yellow
51
- red_on
52
- green_on
27
+ super @red
28
+ super @green
53
29
  when :aoi
54
- blue_on
55
- green_on
30
+ super @blue
31
+ super @green
32
+ when :all
33
+ super @red
34
+ super @green
35
+ super @blue
56
36
  else
57
37
  end
58
38
  end
@@ -61,30 +41,33 @@ class LED
61
41
  color = :aoi if color == :aqua
62
42
  case color
63
43
  when :red
64
- red_off
44
+ super @red
65
45
  when :green
66
- green_off
46
+ super @green
67
47
  when :blue
68
- blue_off
48
+ super @blue
69
49
  when :yellow
70
- red_off
71
- green_off
50
+ super @red
51
+ super @green
72
52
  when :aoi
73
- blue_off
74
- green_off
53
+ super @blue
54
+ super @green
75
55
  when :all
76
- all_off
56
+ super @red
57
+ super @green
58
+ super @blue
77
59
  else
78
60
  all_off
79
61
  end
80
62
  end
81
63
 
82
- def all_off
83
- red_off
84
- green_off
85
- blue_off
64
+ def all_on
65
+ on :all
86
66
  end
87
67
 
68
+ def all_off
69
+ off :all
70
+ end
88
71
 
89
72
  def blink(list = :all, repeat=3, switched_on=0.25, switched_off=0.5)
90
73
  colors = (list == :all) ? [:red, :green, :blue] : (list.class == Array ? list : [list])
@@ -1,3 +1,10 @@
1
1
  require 'raspberry_pi'
2
2
  require 'receptor'
3
3
  require 'effector'
4
+ require_relative 'raspberry_pi_iot/version'
5
+
6
+ module RaspberryPiIoT
7
+ class Error < StandardError
8
+ end
9
+ # Your code goes here...
10
+ end
@@ -0,0 +1,11 @@
1
+ require "test_helper"
2
+
3
+ class RaspberryPiIoTTest < Minitest::Test
4
+ def test_that_it_has_a_version_number
5
+ refute_nil ::RaspberryPiIoT::VERSION
6
+ end
7
+
8
+ # def test_it_does_something_useful
9
+ # assert false
10
+ # end
11
+ end
data/test/test_button.rb CHANGED
@@ -10,12 +10,16 @@ class RaspberryPiIoT_ButtonTest < MiniTest::Test
10
10
  def setup
11
11
  @pin = 21
12
12
  @button = Button.new(@pin)
13
+ @button.set_timeout 10
13
14
  end
14
15
 
15
16
  def test_wait_for_press
17
+ assert @button.not_pressed?
18
+ assert @button.was_not_pressed?
16
19
  printf "Waiting for press...\n"
17
20
  @button.wait_for_press
18
- assert @button.not_pressed?
21
+ assert @button.was_pressed? if !@button.timeout?
22
+
19
23
  end
20
24
 
21
25
 
@@ -27,9 +31,10 @@ class RaspberryPiIoT_ButtonTest < MiniTest::Test
27
31
  end
28
32
 
29
33
  def test_wait_for_long_press
30
- printf "Waiting for 1 long press...\n"
34
+ printf "Waiting for 1 long press (> 1 second)...\n"
31
35
  @button.wait_for_press
32
- assert !@button.single_press?
36
+ assert @button.single_press?
37
+ assert !@button.double_press?
33
38
  assert @button.long_press?
34
39
  end
35
40
 
@@ -37,5 +42,6 @@ class RaspberryPiIoT_ButtonTest < MiniTest::Test
37
42
  printf "Waiting for double press...\n", p
38
43
  @button.wait_for_presses 2
39
44
  assert @button.double_press?
45
+ assert !@button.single_press?
40
46
  end
41
47
  end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
+ require "raspberry_pi_iot"
3
+
4
+ require "minitest/autorun"
data/test/test_led.rb CHANGED
@@ -35,11 +35,11 @@ class RaspberryPiIoT_LedTest < Minitest::Test
35
35
  end
36
36
 
37
37
  def test_sos
38
+ 3.times { @led.on_for(0.25); @led.off_for(0.25) }
39
+ sleep 1
38
40
  3.times { @led.on_for(0.5); @led.off_for(0.25) }
39
- sleep 0.5
40
- 3.times { @led.on_for(0.15); @led.off_for(0.25) }
41
- sleep 0.5
42
- 3.times { @led.on_for(0.5); @led.off_for(0.25) }
41
+ sleep 1
42
+ 3.times { @led.on_for(0.25); @led.off_for(0.25) }
43
43
  sleep 1.5
44
44
  @led.off
45
45
  end
data/test/test_led_rgb.rb CHANGED
@@ -17,20 +17,41 @@ class RaspberryPiIoT_LedRgbTest < Minitest::Test
17
17
 
18
18
  def test_red
19
19
  @rgb.on :red
20
+ assert @rgb.on? :red
20
21
  sleep @time_on
21
22
  @rgb.off
23
+ assert @rgb.off? :red
22
24
  end
23
25
 
24
26
  def test_green
25
27
  @rgb.on :green
28
+ assert @rgb.on? :green
26
29
  sleep @time_on
27
30
  @rgb.off
31
+ assert @rgb.off? :green
28
32
  end
29
33
 
30
34
  def test_blue
31
35
  @rgb.on :blue
36
+ assert @rgb.on? :blue
32
37
  sleep @time_on
33
38
  @rgb.off
39
+ assert @rgb.off? :blue
40
+ end
41
+
42
+ def test_all_on
43
+ @rgb.on :all
44
+ assert @rgb.on? :red
45
+ assert @rgb.on? :green
46
+ assert @rgb.on? :blue
47
+ sleep @time_on
48
+ end
49
+
50
+ def test_all_off
51
+ @rgb.off :all
52
+ assert @rgb.off? :red
53
+ assert @rgb.off? :green
54
+ assert @rgb.off? :blue
34
55
  end
35
56
 
36
57
  def test_colors
@@ -53,10 +74,12 @@ class RaspberryPiIoT_LedRgbTest < Minitest::Test
53
74
  end
54
75
 
55
76
  def test_sos
56
- @rgb.blink :red, 3, 0.25, 0.5
77
+ @rgb.blink :red, 3, 0.25, 0.25
57
78
  sleep 1
58
79
  @rgb.blink :red, 3, 0.5, 0.5
59
80
  sleep 1
60
- @rgb.blink :red, 3, 0.25, 0.5
81
+ @rgb.blink :red, 3, 0.25, 0.25
82
+ assert @rgb.off?
83
+ sleep 1
61
84
  end
62
85
  end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'minitest/autorun'
4
+
5
+ $LOAD_PATH << "../lib"
6
+ require "thermal_sensor"
7
+
8
+ class RaspberryPiIoT_ThermalSensorTest < MiniTest::Test
9
+
10
+ def setup
11
+ @sensor = RaspberryPi::ThermalSensor.new
12
+ end
13
+
14
+ def test_sensor_value
15
+ c = @sensor.celsius
16
+ assert c > 15.0
17
+
18
+ r = @sensor.reaumur
19
+ assert r < c
20
+
21
+ f = @sensor.fahrenheit
22
+ assert f > c
23
+
24
+ k = @sensor.kelvin
25
+ assert k > f
26
+ end
27
+ end
metadata CHANGED
@@ -1,15 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raspberry_pi_iot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Shock (Mikhail V. Shokhirev)
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-18 00:00:00.000000000 Z
11
+ date: 2018-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.17'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.17'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: yard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.9.16
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.9.16
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.0'
13
69
  - !ruby/object:Gem::Dependency
14
70
  name: rpi_gpio
15
71
  requirement: !ruby/object:Gem::Requirement
@@ -143,11 +199,13 @@ files:
143
199
  - doc/LED.html
144
200
  - doc/MAX44009.html
145
201
  - doc/RaspberryPi.html
202
+ - doc/RaspberryPiIoT.html
146
203
  - doc/Receptor.html
147
204
  - doc/Sensor.html
148
205
  - doc/TemperatureSensor.html
149
206
  - doc/_index.html
150
207
  - doc/class_list.html
208
+ - doc/file.LICENSE.html
151
209
  - doc/file.README.html
152
210
  - doc/file_list.html
153
211
  - doc/frames.html
@@ -182,18 +240,25 @@ files:
182
240
  - lib/temperature_sensor.rb
183
241
  - lib/thermal_sensor.rb
184
242
  - test/standalone_test_bmp280.rb
243
+ - test/test_Raspberry_Pi_IoT.rb
185
244
  - test/test_bh1750.rb
186
245
  - test/test_button.rb
187
246
  - test/test_dht11.rb
188
247
  - test/test_ds18b20.rb
248
+ - test/test_helper.rb
189
249
  - test/test_info.rb
190
250
  - test/test_led.rb
191
251
  - test/test_led_rgb.rb
192
252
  - test/test_max44009_gy49.rb
253
+ - test/test_thermal.rb
193
254
  homepage: https://github.com/mike-shock/Ruby-Raspberry_Pi_IoT/
194
255
  licenses:
195
256
  - MIT
196
- metadata: {}
257
+ metadata:
258
+ allowed_push_host: https://rubygems.org
259
+ homepage_uri: https://github.com/mike-shock/Ruby-Raspberry_Pi_IoT/
260
+ source_code_uri: 'TODO: Put your gem''s public repo URL here.'
261
+ changelog_uri: 'TODO: Put your gem''s CHANGELOG.md URL here.'
197
262
  post_install_message:
198
263
  rdoc_options: []
199
264
  require_paths: