Class: BirdbrainFinch
Overview
Copyright © 2021 Base2 Incorporated–All Rights Reserved.
Constant Summary
collapse
- FORWARD =
'F'
- BACKWARD =
'B'
- LEFT =
BirdbrainDevice::LEFT
- RIGHT =
BirdbrainDevice::RIGHT
- MOVE_START_WAIT_SECONDS =
0.15
- MOVE_TIMEOUT_SECONDS =
60.0
- VALID_LED_PORTS =
'123'
- VALID_TAIL_PORTS =
'1234all'
- VALID_TRILED_PORTS =
'1234'
- VALID_SENSOR_PORTS =
'123'
- VALID_SERVO_PORTS =
'1234'
- VALID_MOVE_DIRECTION =
'FB'
- VALID_TURN_DIRECTION =
'LR'
BirdbrainMicrobit::VALID_BUTTONS
BirdbrainDevice::DEFAULT_DEVICE, BirdbrainDevice::VALID_DEVICES
Instance Attribute Summary collapse
#connected, #device, #state
Instance Method Summary
collapse
-
#accelerometer ⇒ Object
-
#beak(r_intensity, g_intensity, b_intensity) ⇒ Object
-
#compass ⇒ Object
-
#distance ⇒ Object
-
#encoder(direction) ⇒ Object
-
#initialize(device = DEFAULT_DEVICE) ⇒ BirdbrainFinch
constructor
A new instance of BirdbrainFinch.
-
#light(direction) ⇒ Object
-
#line(direction) ⇒ Object
-
#magnetometer ⇒ Object
-
#motors(left_speed, right_speed) ⇒ Object
-
#move(direction, distance, speed, wait_to_finish_movement = true) ⇒ Object
-
#moving? ⇒ Boolean
-
#orientation ⇒ Object
-
#orientation_beak_down? ⇒ Boolean
-
#orientation_beak_up? ⇒ Boolean
-
#orientation_level? ⇒ Boolean
-
#orientation_tilt_left? ⇒ Boolean
-
#orientation_tilt_right? ⇒ Boolean
-
#orientation_upside_down? ⇒ Boolean
-
#play_note(note, beats) ⇒ Object
-
#reset_encoders ⇒ Object
-
#stop ⇒ Object
-
#tail(port, r_intensity, g_intensity, b_intensity) ⇒ Object
-
#turn(direction, angle, speed, wait_to_finish_movement = true) ⇒ Object
-
#valid_device_type? ⇒ Boolean
-
#wait ⇒ Object
-
#wait_until_movement ⇒ Object
-
#wait_until_movement_and_wait ⇒ Object
#microbit_accelerometer, #microbit_button?, #microbit_clear_display, #microbit_compass, #microbit_display, #microbit_magnetometer, #microbit_orientation, #microbit_orientation_logo_down?, #microbit_orientation_logo_up?, #microbit_orientation_screen_down?, #microbit_orientation_screen_up?, #microbit_orientation_tilt_left?, #microbit_orientation_tilt_right?, #microbit_point, #microbit_print, #microbit_shaking?
connect, #connect, #connected?, #connected_and_valid?, #disconnect, #finch?, find_device, #hummingbird?, #microbit?, #valid?
Constructor Details
#initialize(device = DEFAULT_DEVICE) ⇒ BirdbrainFinch
Returns a new instance of BirdbrainFinch.
23
24
25
26
27
28
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 23
def initialize(device = DEFAULT_DEVICE)
super
self.move_start_wait_seconds = MOVE_START_WAIT_SECONDS
self.move_timeout_seconds = MOVE_TIMEOUT_SECONDS
self.move_start_time = 0
end
|
Instance Attribute Details
#move_start_time ⇒ Object
Returns the value of attribute move_start_time.
20
21
22
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 20
def move_start_time
@move_start_time
end
|
#move_start_wait_seconds ⇒ Object
Returns the value of attribute move_start_wait_seconds.
19
20
21
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 19
def move_start_wait_seconds
@move_start_wait_seconds
end
|
#move_timeout_seconds ⇒ Object
Returns the value of attribute move_timeout_seconds.
21
22
23
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 21
def move_timeout_seconds
@move_timeout_seconds
end
|
Instance Method Details
#accelerometer ⇒ Object
54
55
56
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 54
def accelerometer
BirdbrainFinchInput.accelerometer(device) if connected?
end
|
#beak(r_intensity, g_intensity, b_intensity) ⇒ Object
94
95
96
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 94
def beak(r_intensity, g_intensity, b_intensity)
BirdbrainHummingbirdOutput.tri_led(device, 1, r_intensity, g_intensity, b_intensity) if connected?
end
|
#compass ⇒ Object
58
59
60
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 58
def compass
BirdbrainFinchInput.compass(device) if connected?
end
|
#distance ⇒ Object
42
43
44
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 42
def distance
BirdbrainFinchInput.distance(device) if connected?
end
|
#encoder(direction) ⇒ Object
50
51
52
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 50
def encoder(direction)
BirdbrainFinchInput.encoder(device, direction) if connected?
end
|
#light(direction) ⇒ Object
38
39
40
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 38
def light(direction)
BirdbrainFinchInput.light(device, direction) if connected?
end
|
#line(direction) ⇒ Object
46
47
48
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 46
def line(direction)
BirdbrainFinchInput.line(device, direction) if connected?
end
|
#magnetometer ⇒ Object
62
63
64
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 62
def magnetometer
BirdbrainFinchInput.magnetometer(device) if connected?
end
|
#motors(left_speed, right_speed) ⇒ Object
161
162
163
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 161
def motors(left_speed, right_speed)
BirdbrainFinchOutput.motors(device, left_speed, right_speed) if connected?
end
|
#move(direction, distance, speed, wait_to_finish_movement = true) ⇒ Object
137
138
139
140
141
142
143
144
145
146
147
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 137
def move(direction, distance, speed, wait_to_finish_movement = true)
return nil unless connected_and_valid?(direction, VALID_MOVE_DIRECTION)
unless (response = BirdbrainFinchOutput.move(device, direction, distance, speed))
return response
end
wait_until_movement_and_wait if wait_to_finish_movement
true
end
|
#moving? ⇒ Boolean
34
35
36
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 34
def moving?
BirdbrainFinchInput.moving?(device) if connected?
end
|
#orientation ⇒ Object
66
67
68
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 66
def orientation
BirdbrainFinchInput.orientation(device) if connected?
end
|
#orientation_beak_down? ⇒ Boolean
74
75
76
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 74
def orientation_beak_down?
BirdbrainFinchInput.orientation_beak_down?(device) if connected?
end
|
#orientation_beak_up? ⇒ Boolean
70
71
72
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 70
def orientation_beak_up?
BirdbrainFinchInput.orientation_beak_up?(device) if connected?
end
|
#orientation_level? ⇒ Boolean
86
87
88
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 86
def orientation_level?
BirdbrainFinchInput.orientation_level?(device) if connected?
end
|
#orientation_tilt_left? ⇒ Boolean
78
79
80
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 78
def orientation_tilt_left?
BirdbrainFinchInput.orientation_tilt_left?(device) if connected?
end
|
#orientation_tilt_right? ⇒ Boolean
82
83
84
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 82
def orientation_tilt_right?
BirdbrainFinchInput.orientation_tilt_right?(device) if connected?
end
|
#orientation_upside_down? ⇒ Boolean
90
91
92
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 90
def orientation_upside_down?
BirdbrainFinchInput.orientation_upside_down?(device) if connected?
end
|
#play_note(note, beats) ⇒ Object
108
109
110
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 108
def play_note(note, beats)
BirdbrainHummingbirdOutput.play_note(device, note, beats) if connected?
end
|
#reset_encoders ⇒ Object
169
170
171
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 169
def reset_encoders
BirdbrainFinchOutput.reset_encoders(device) if connected?
end
|
#stop ⇒ Object
165
166
167
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 165
def stop
BirdbrainFinchOutput.stop(device) if connected?
end
|
#tail(port, r_intensity, g_intensity, b_intensity) ⇒ Object
98
99
100
101
102
103
104
105
106
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 98
def tail(port, r_intensity, g_intensity, b_intensity)
return nil unless connected_and_valid?(port, VALID_TAIL_PORTS)
if port.to_s == 'all'
(2..5).each { |each_port| BirdbrainHummingbirdOutput.tri_led(device, each_port, r_intensity, g_intensity, b_intensity) }
else
BirdbrainHummingbirdOutput.tri_led(device, port + 1, r_intensity, g_intensity, b_intensity)
end
end
|
#turn(direction, angle, speed, wait_to_finish_movement = true) ⇒ Object
149
150
151
152
153
154
155
156
157
158
159
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 149
def turn(direction, angle, speed, wait_to_finish_movement = true)
return nil unless connected_and_valid?(direction, VALID_TURN_DIRECTION)
unless (response = BirdbrainFinchOutput.turn(device, direction, angle, speed))
return response
end
wait_until_movement_and_wait if wait_to_finish_movement
true
end
|
#valid_device_type? ⇒ Boolean
30
31
32
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 30
def valid_device_type?
finch?
end
|
#wait ⇒ Object
122
123
124
125
126
127
128
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 122
def wait
start_time = Time.now
sleep(0.01) while moving? && ((Time.now - start_time) < move_timeout_seconds)
true
end
|
#wait_until_movement ⇒ Object
112
113
114
115
116
117
118
119
120
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 112
def wait_until_movement
start_time = Time.now
sleep(0.01) while !moving? && ((Time.now - start_time) < move_start_wait_seconds)
self.move_start_time = Time.now - start_time
true
end
|
#wait_until_movement_and_wait ⇒ Object
130
131
132
133
134
135
|
# File 'lib/birdbrain/birdbrain_finch.rb', line 130
def wait_until_movement_and_wait
wait_until_movement
wait
true
end
|