birdbrain 0.2.1 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/birdbrain/birdbrain_device.rb +32 -6
- data/lib/birdbrain/birdbrain_exception.rb +0 -9
- data/lib/birdbrain/birdbrain_finch.rb +4 -0
- data/lib/birdbrain/birdbrain_finch_input.rb +4 -4
- data/lib/birdbrain/birdbrain_hummingbird.rb +4 -24
- data/lib/birdbrain/birdbrain_hummingbird_input.rb +1 -1
- data/lib/birdbrain/birdbrain_microbit.rb +28 -0
- data/lib/birdbrain/birdbrain_microbit_input.rb +14 -14
- data/lib/birdbrain/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb21675457d7a7b695a6f4b4858987a08cc68ebf295c1d3d869e8f0b5f5a5df6
|
4
|
+
data.tar.gz: cac303fd2d781c1422ba1409e6f18d95b0878d08fb46809dc850c0beefa95e83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 507384baf7913ffd3cfac814352828169d92b73134846fbac52566416e1ecc87e3e798f9921e3f565ccb7b3ed61a16c892fcd1722f11340c0a2edf41e79be54e
|
7
|
+
data.tar.gz: 4e24f99216233d97443b45a88139e68515239d75c0ef1c07265cdd2f8648361e6bf9c6f17105fbffcc50edd660e8554b3f5dc2569a5bda25903ba5b7d8c4d80c
|
@@ -12,30 +12,56 @@ class BirdbrainDevice
|
|
12
12
|
attr_accessor :device
|
13
13
|
|
14
14
|
def initialize(device = DEFAULT_DEVICE)
|
15
|
+
self.state = BirdbrainState.new
|
16
|
+
self.device = device
|
17
|
+
self.connected = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.connect(device = DEFAULT_DEVICE, raise_exception_if_no_connection = false)
|
15
21
|
raise(BirdbrainException, 'Missing device name') if device.nil?
|
16
22
|
raise(BirdbrainException, "Invalid device name: #{device}") unless VALID_DEVICES.include?(device)
|
17
23
|
|
18
|
-
|
19
|
-
|
20
|
-
|
24
|
+
device = new(device)
|
25
|
+
|
26
|
+
device.connect
|
27
|
+
|
28
|
+
raise(BirdbrainException, 'No connection') if raise_exception_if_no_connection && !device.connected?
|
21
29
|
|
22
|
-
|
30
|
+
device
|
23
31
|
end
|
24
32
|
|
25
|
-
def
|
33
|
+
def connect
|
34
|
+
self.connected = BirdbrainRequest.connected?(device)
|
35
|
+
self.connected = nil unless valid_device_type?
|
26
36
|
connected
|
27
37
|
end
|
28
38
|
|
39
|
+
def connected?
|
40
|
+
!!connected
|
41
|
+
end
|
42
|
+
|
29
43
|
def disconnect
|
30
44
|
BirdbrainRequest.disconnect(device) if connected?
|
31
45
|
|
32
46
|
state.microbit_display_map_clear unless state.nil?
|
33
47
|
|
34
|
-
self.connected =
|
48
|
+
self.connected = nil
|
35
49
|
self.device = nil
|
36
50
|
self.state = nil
|
37
51
|
end
|
38
52
|
|
53
|
+
def self.find_device
|
54
|
+
('A'..'C').each do |device|
|
55
|
+
connected_device = connect(device)
|
56
|
+
|
57
|
+
return connected_device if connected_device.valid_device_type?
|
58
|
+
rescue BirdbrainException
|
59
|
+
next
|
60
|
+
end
|
61
|
+
|
62
|
+
new(nil)
|
63
|
+
end
|
64
|
+
|
39
65
|
def microbit?
|
40
66
|
BirdbrainMicrobitInput.microbit?(device) if connected?
|
41
67
|
end
|
@@ -2,13 +2,4 @@
|
|
2
2
|
# Copyright (c) 2021 Base2 Incorporated--All Rights Reserved.
|
3
3
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
4
4
|
class BirdbrainException < StandardError
|
5
|
-
def self.disconnect(device, message)
|
6
|
-
begin
|
7
|
-
BirdbrainRequest.disconnect(device)
|
8
|
-
rescue BirdbrainException
|
9
|
-
true
|
10
|
-
end
|
11
|
-
|
12
|
-
raise(BirdbrainException, message)
|
13
|
-
end
|
14
5
|
end
|
@@ -27,6 +27,10 @@ class BirdbrainFinch < BirdbrainMicrobit
|
|
27
27
|
self.move_start_time = 0 # after move records how long it took the startup to complete for tuning
|
28
28
|
end
|
29
29
|
|
30
|
+
def valid_device_type?
|
31
|
+
finch?
|
32
|
+
end
|
33
|
+
|
30
34
|
def moving?
|
31
35
|
BirdbrainFinchInput.moving?(device) if connected?
|
32
36
|
end
|
@@ -9,11 +9,11 @@ class BirdbrainFinchInput < BirdbrainRequest
|
|
9
9
|
DEFAULT_UNLIMITED_MIN_RESPONSE = -1000000
|
10
10
|
DEFAULT_UNLIMITED_MAX_RESPONSE = 1000000
|
11
11
|
ORIENTATIONS = ['Beak%20Up', 'Beak%20Down', 'Tilt%20Left', 'Tilt%20Right', 'Level', 'Upside%20Down']
|
12
|
-
ORIENTATION_RESULTS = ['Beak up', 'Beak down', 'Tilt left', 'Tilt right', 'Level', 'Upside down']
|
12
|
+
ORIENTATION_RESULTS = ['Beak up', 'Beak down', 'Tilt left', 'Tilt right', 'Level', 'Upside down', 'In between']
|
13
13
|
ORIENTATION_IN_BETWEEN = 'In between'
|
14
14
|
|
15
15
|
def self.finch?(device)
|
16
|
-
request_status(response_body('hummingbird', 'in', '
|
16
|
+
request_status(response_body('hummingbird', 'in', 'isFinch', 'static', device))
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.moving?(device)
|
@@ -92,11 +92,11 @@ class BirdbrainFinchInput < BirdbrainRequest
|
|
92
92
|
orientation_check(device, 5)
|
93
93
|
end
|
94
94
|
|
95
|
-
def self.orientation_check(device, index)
|
95
|
+
private_class_method def self.orientation_check(device, index)
|
96
96
|
request_status(response_body('hummingbird', 'in', 'finchOrientation', ORIENTATIONS[index], device))
|
97
97
|
end
|
98
98
|
|
99
|
-
def self.sensor(device, sensor, other = nil, options = {})
|
99
|
+
private_class_method def self.sensor(device, sensor, other = nil, options = {})
|
100
100
|
return false if other == false # for invalid directions
|
101
101
|
|
102
102
|
factor = options.key?(:factor) ? options[:factor] : DEFAULT_FACTOR
|
@@ -9,6 +9,10 @@ class BirdbrainHummingbird < BirdbrainMicrobit
|
|
9
9
|
VALID_SENSOR_PORTS = '123'
|
10
10
|
VALID_SERVO_PORTS = '1234'
|
11
11
|
|
12
|
+
def valid_device_type?
|
13
|
+
hummingbird?
|
14
|
+
end
|
15
|
+
|
12
16
|
def light(port)
|
13
17
|
BirdbrainHummingbirdInput.light(device, port) if connected_and_valid?(port, VALID_SENSOR_PORTS)
|
14
18
|
end
|
@@ -48,28 +52,4 @@ class BirdbrainHummingbird < BirdbrainMicrobit
|
|
48
52
|
def play_note(note, beats)
|
49
53
|
BirdbrainHummingbirdOutput.play_note(device, note, beats) if connected?
|
50
54
|
end
|
51
|
-
|
52
|
-
def orientation_screen_up?
|
53
|
-
BirdbrainMicrobitInput.orientation_screen_up?(device) if connected?
|
54
|
-
end
|
55
|
-
|
56
|
-
def orientation_screen_down?
|
57
|
-
BirdbrainMicrobitInput.orientation_screen_down?(device) if connected?
|
58
|
-
end
|
59
|
-
|
60
|
-
def orientation_tilt_left?
|
61
|
-
BirdbrainMicrobitInput.orientation_tilt_left?(device) if connected?
|
62
|
-
end
|
63
|
-
|
64
|
-
def orientation_tilt_right?
|
65
|
-
BirdbrainMicrobitInput.orientation_tilt_right?(device) if connected?
|
66
|
-
end
|
67
|
-
|
68
|
-
def orientation_logo_up?
|
69
|
-
BirdbrainMicrobitInput.orientation_logo_up?(device) if connected?
|
70
|
-
end
|
71
|
-
|
72
|
-
def orientation_logo_down?
|
73
|
-
BirdbrainMicrobitInput.orientation_logo_down?(device) if connected?
|
74
|
-
end
|
75
55
|
end
|
@@ -26,7 +26,7 @@ class BirdbrainHummingbirdInput < BirdbrainRequest
|
|
26
26
|
sensor(device, port, 0.012941176470588235) # factor=3.3/255
|
27
27
|
end
|
28
28
|
|
29
|
-
def self.sensor(device, port, factor)
|
29
|
+
private_class_method def self.sensor(device, port, factor)
|
30
30
|
response = response_body('hummingbird', 'in', 'sensor', port, device)
|
31
31
|
|
32
32
|
(response.nil? ? nil : bounds((response.to_f * factor).to_i, 0, 100))
|
@@ -4,6 +4,10 @@
|
|
4
4
|
class BirdbrainMicrobit < BirdbrainDevice
|
5
5
|
VALID_BUTTONS = 'AB'
|
6
6
|
|
7
|
+
def valid_device_type?
|
8
|
+
microbit?
|
9
|
+
end
|
10
|
+
|
7
11
|
def microbit_accelerometer
|
8
12
|
BirdbrainMicrobitInput.microbit_accelerometer(device) if connected?
|
9
13
|
end
|
@@ -28,6 +32,30 @@ class BirdbrainMicrobit < BirdbrainDevice
|
|
28
32
|
BirdbrainMicrobitInput.microbit_orientation(device) if connected?
|
29
33
|
end
|
30
34
|
|
35
|
+
def microbit_orientation_screen_up?
|
36
|
+
BirdbrainMicrobitInput.microbit_orientation_screen_up?(device) if connected?
|
37
|
+
end
|
38
|
+
|
39
|
+
def microbit_orientation_screen_down?
|
40
|
+
BirdbrainMicrobitInput.microbit_orientation_screen_down?(device) if connected?
|
41
|
+
end
|
42
|
+
|
43
|
+
def microbit_orientation_tilt_left?
|
44
|
+
BirdbrainMicrobitInput.microbit_orientation_tilt_left?(device) if connected?
|
45
|
+
end
|
46
|
+
|
47
|
+
def microbit_orientation_tilt_right?
|
48
|
+
BirdbrainMicrobitInput.microbit_orientation_tilt_right?(device) if connected?
|
49
|
+
end
|
50
|
+
|
51
|
+
def microbit_orientation_logo_up?
|
52
|
+
BirdbrainMicrobitInput.microbit_orientation_logo_up?(device) if connected?
|
53
|
+
end
|
54
|
+
|
55
|
+
def microbit_orientation_logo_down?
|
56
|
+
BirdbrainMicrobitInput.microbit_orientation_logo_down?(device) if connected?
|
57
|
+
end
|
58
|
+
|
31
59
|
def microbit_display(led_list)
|
32
60
|
BirdbrainMicrobitOutput.microbit_display(state, device, led_list) if connected?
|
33
61
|
end
|
@@ -2,9 +2,9 @@
|
|
2
2
|
# Copyright (c) 2021 Base2 Incorporated--All Rights Reserved.
|
3
3
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
4
4
|
class BirdbrainMicrobitInput < BirdbrainRequest
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
MICROBIT_ORIENTATIONS = ['Screen%20Up', 'Screen%20Down', 'Tilt%20Left', 'Tilt%20Right', 'Logo%20Up', 'Logo%20Down']
|
6
|
+
MICROBIT_ORIENTATION_RESULTS = ['Screen up', 'Screen down', 'Tilt left', 'Tilt right', 'Logo up', 'Logo down', 'In between']
|
7
|
+
MICROBIT_ORIENTATION_IN_BETWEEN = 'In between'
|
8
8
|
|
9
9
|
def self.microbit?(device)
|
10
10
|
request_status(response_body('hummingbird', 'in', 'isHummingbird', 'static', device))
|
@@ -31,40 +31,40 @@ class BirdbrainMicrobitInput < BirdbrainRequest
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.microbit_orientation(device)
|
34
|
-
|
34
|
+
MICROBIT_ORIENTATIONS.each_with_index do |orientation, index|
|
35
35
|
return nil if (response = response_body('hummingbird', 'in', 'orientation', orientation, device)).nil?
|
36
36
|
|
37
|
-
return
|
37
|
+
return MICROBIT_ORIENTATION_RESULTS[index] if request_status(response)
|
38
38
|
end
|
39
39
|
|
40
|
-
|
40
|
+
MICROBIT_ORIENTATION_IN_BETWEEN
|
41
41
|
end
|
42
42
|
|
43
|
-
def self.
|
43
|
+
def self.microbit_orientation_screen_up?(device)
|
44
44
|
orientation_check(device, 0)
|
45
45
|
end
|
46
46
|
|
47
|
-
def self.
|
47
|
+
def self.microbit_orientation_screen_down?(device)
|
48
48
|
orientation_check(device, 1)
|
49
49
|
end
|
50
50
|
|
51
|
-
def self.
|
51
|
+
def self.microbit_orientation_tilt_left?(device)
|
52
52
|
orientation_check(device, 2)
|
53
53
|
end
|
54
54
|
|
55
|
-
def self.
|
55
|
+
def self.microbit_orientation_tilt_right?(device)
|
56
56
|
orientation_check(device, 3)
|
57
57
|
end
|
58
58
|
|
59
|
-
def self.
|
59
|
+
def self.microbit_orientation_logo_up?(device)
|
60
60
|
orientation_check(device, 4)
|
61
61
|
end
|
62
62
|
|
63
|
-
def self.
|
63
|
+
def self.microbit_orientation_logo_down?(device)
|
64
64
|
orientation_check(device, 5)
|
65
65
|
end
|
66
66
|
|
67
|
-
def self.orientation_check(device, index)
|
68
|
-
request_status(response_body('hummingbird', 'in', 'orientation',
|
67
|
+
private_class_method def self.orientation_check(device, index)
|
68
|
+
request_status(response_body('hummingbird', 'in', 'orientation', MICROBIT_ORIENTATIONS[index], device))
|
69
69
|
end
|
70
70
|
end
|
data/lib/birdbrain/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: birdbrain
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fmorton
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: This Ruby library allows students to use Ruby to read sensors and set
|
14
14
|
motors and LEDs with the Birdbrain Technologies Hummingbird Bit. To use Ruby with
|