Class: BirdbrainFinch

Inherits:
BirdbrainMicrobit show all
Defined in:
lib/birdbrain/birdbrain_finch.rb

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'

Constants inherited from BirdbrainMicrobit

BirdbrainMicrobit::VALID_BUTTONS

Constants inherited from BirdbrainDevice

BirdbrainDevice::DEFAULT_DEVICE, BirdbrainDevice::VALID_DEVICES

Instance Attribute Summary collapse

Attributes inherited from BirdbrainDevice

#connected, #device, #state

Instance Method Summary collapse

Methods inherited from BirdbrainMicrobit

#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?

Methods inherited from BirdbrainDevice

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 # seconds to allow finch to start moving
  self.move_timeout_seconds = MOVE_TIMEOUT_SECONDS # maximum number of seconds to wait for finch moving
  self.move_start_time = 0 # after move records how long it took the startup to complete for tuning
end

Instance Attribute Details

#move_start_timeObject

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_secondsObject

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_secondsObject

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

#accelerometerObject



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

#compassObject



58
59
60
# File 'lib/birdbrain/birdbrain_finch.rb', line 58

def compass
  BirdbrainFinchInput.compass(device) if connected?
end

#distanceObject



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

#magnetometerObject



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

Returns:

  • (Boolean)


34
35
36
# File 'lib/birdbrain/birdbrain_finch.rb', line 34

def moving?
  BirdbrainFinchInput.moving?(device) if connected?
end

#orientationObject



66
67
68
# File 'lib/birdbrain/birdbrain_finch.rb', line 66

def orientation
  BirdbrainFinchInput.orientation(device) if connected?
end

#orientation_beak_down?Boolean

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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_encodersObject



169
170
171
# File 'lib/birdbrain/birdbrain_finch.rb', line 169

def reset_encoders
  BirdbrainFinchOutput.reset_encoders(device) if connected?
end

#stopObject



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

Returns:

  • (Boolean)


30
31
32
# File 'lib/birdbrain/birdbrain_finch.rb', line 30

def valid_device_type?
  finch?
end

#waitObject



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_movementObject



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) # short wait for finch to start moving

  self.move_start_time = Time.now - start_time # close to amount of time it took the finch to startup for tuning

  true
end

#wait_until_movement_and_waitObject



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