nxt 0.3.0 → 0.5.0
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.
- checksums.yaml +15 -0
- data/README.md +45 -0
- data/lib/communication/bluetooth_communication.rb +85 -0
- data/lib/communication/serial_port_profile.rb +71 -0
- data/lib/nxt.rb +111 -20
- data/lib/ruby-nxt.sublime-project +8 -0
- data/lib/ruby-nxt.sublime-workspace +288 -0
- data/lib/telegrams/commands/direct/get_battery_level.rb +8 -0
- data/lib/telegrams/commands/direct/get_current_program_name.rb +8 -0
- data/lib/{nxt/commands/sound.rb → telegrams/commands/direct/get_input_values.rb} +0 -0
- data/lib/{nxt/commands/tone.rb → telegrams/commands/direct/keep_alive.rb} +0 -0
- data/lib/telegrams/commands/direct/ls_get_status.rb +0 -0
- data/lib/telegrams/commands/direct/ls_read.rb +0 -0
- data/lib/telegrams/commands/direct/ls_write.rb +0 -0
- data/lib/telegrams/commands/direct/message_read.rb +0 -0
- data/lib/telegrams/commands/direct/message_write.rb +0 -0
- data/lib/telegrams/commands/direct/output_state.rb +229 -0
- data/lib/telegrams/commands/direct/play_sound_file.rb +38 -0
- data/lib/telegrams/commands/direct/play_tone.rb +34 -0
- data/lib/telegrams/commands/direct/replies/get_battery_level_reply.rb +28 -0
- data/lib/telegrams/commands/direct/replies/get_current_program_name_reply.rb +30 -0
- data/lib/telegrams/commands/direct/replies/play_sound_file_reply.rb +13 -0
- data/lib/telegrams/commands/direct/replies/play_tone_reply.rb +14 -0
- data/lib/telegrams/commands/direct/replies/reset_motor_position_reply.rb +13 -0
- data/lib/telegrams/commands/direct/replies/set_input_mode_reply.rb +11 -0
- data/lib/telegrams/commands/direct/replies/set_output_state_reply.rb +11 -0
- data/lib/telegrams/commands/direct/replies/start_program_reply.rb +13 -0
- data/lib/telegrams/commands/direct/replies/stop_program_reply.rb +13 -0
- data/lib/telegrams/commands/direct/replies/stop_sound_playback_reply.rb +13 -0
- data/lib/telegrams/commands/direct/reset_input_scaled_value.rb +0 -0
- data/lib/telegrams/commands/direct/reset_motor_position.rb +8 -0
- data/lib/telegrams/commands/direct/set_input_mode.rb +101 -0
- data/lib/telegrams/commands/direct/set_output_state.rb +29 -0
- data/lib/telegrams/commands/direct/start_program.rb +30 -0
- data/lib/telegrams/commands/direct/stop_program.rb +9 -0
- data/lib/telegrams/commands/direct/stop_sound_playback.rb +8 -0
- data/lib/telegrams/commands/direct_command.rb +8 -0
- data/lib/telegrams/commands/direct_command_reply.rb +10 -0
- data/lib/telegrams/commands/message_translator.rb +46 -0
- data/lib/telegrams/commands/system/get_device_info.rb +8 -0
- data/lib/telegrams/commands/system/replies/get_device_info_reply.rb +41 -0
- data/lib/telegrams/commands/system_command.rb +8 -0
- data/lib/telegrams/messages/error.rb +0 -0
- data/lib/telegrams/messages/message.rb +0 -0
- data/lib/telegrams/messages/success.rb +0 -0
- data/lib/telegrams/no_message_reply.rb +10 -0
- data/lib/telegrams/reply.rb +82 -0
- data/lib/telegrams/respondable_telegram.rb +29 -0
- data/lib/telegrams/telegram.rb +14 -0
- data/spec/communication/bluetooth_communication_spec.rb +170 -0
- data/spec/communication/serial_port_profile_spec.rb +139 -0
- data/spec/helper.rb +1 -0
- data/spec/nxt_spec.rb +438 -0
- data/spec/telegrams/commands/direct/get_battery_level_spec.rb +26 -0
- data/spec/telegrams/commands/direct/get_current_program_name_spec.rb +26 -0
- data/spec/telegrams/commands/direct/output_state_spec.rb +198 -0
- data/spec/telegrams/commands/direct/play_sound_file_spec.rb +75 -0
- data/spec/telegrams/commands/direct/play_tone_spec.rb +63 -0
- data/spec/telegrams/commands/direct/replies/get_battery_level_reply_spec.rb +40 -0
- data/spec/telegrams/commands/direct/replies/get_current_program_name_reply_spec.rb +33 -0
- data/spec/telegrams/commands/direct/replies/play_sound_file_reply_spec.rb +13 -0
- data/spec/telegrams/commands/direct/replies/play_tone_reply_spec.rb +14 -0
- data/spec/telegrams/commands/direct/replies/reset_motor_position_reply_spec.rb +13 -0
- data/spec/telegrams/commands/direct/replies/set_input_mode_reply_spec.rb +12 -0
- data/spec/telegrams/commands/direct/replies/set_output_state_reply_spec.rb +12 -0
- data/spec/telegrams/commands/direct/replies/start_program_reply_spec.rb +12 -0
- data/spec/telegrams/commands/direct/replies/stop_program_reply_spec.rb +13 -0
- data/spec/telegrams/commands/direct/replies/stop_sound_playback_reply_spec.rb +13 -0
- data/spec/telegrams/commands/direct/reset_motor_position_spec.rb +31 -0
- data/spec/telegrams/commands/direct/set_input_mode_spec.rb +122 -0
- data/spec/telegrams/commands/direct/set_output_state_spec.rb +72 -0
- data/spec/telegrams/commands/direct/start_program_spec.rb +58 -0
- data/spec/telegrams/commands/direct/stop_program_spec.rb +34 -0
- data/spec/telegrams/commands/direct/stop_sound_playback_spec.rb +34 -0
- data/spec/telegrams/commands/direct_command_reply_spec.rb +7 -0
- data/spec/telegrams/commands/direct_command_spec.rb +34 -0
- data/spec/telegrams/commands/system/get_device_info_spec.rb +16 -0
- data/spec/telegrams/commands/system/replies/get_device_info_reply_spec.rb +63 -0
- data/spec/telegrams/commands/system_command_spec.rb +26 -0
- data/spec/telegrams/no_message_reply_spec.rb +12 -0
- data/spec/telegrams/reply_spec.rb +63 -0
- data/spec/telegrams/respondable_telegram_spec.rb +66 -0
- data/spec/telegrams/telegram_spec.rb +38 -0
- metadata +97 -116
- data/README.markdown +0 -52
- data/Rakefile +0 -35
- data/lib/nxt/commands/base.rb +0 -51
- data/lib/nxt/commands/input.rb +0 -60
- data/lib/nxt/commands/output.rb +0 -105
- data/lib/nxt/commands/program.rb +0 -70
- data/lib/nxt/connectors/base.rb +0 -35
- data/lib/nxt/connectors/input/color.rb +0 -30
- data/lib/nxt/connectors/input/touch.rb +0 -11
- data/lib/nxt/connectors/input/ultrasonic.rb +0 -11
- data/lib/nxt/connectors/output/motor.rb +0 -114
- data/lib/nxt/errors.rb +0 -25
- data/lib/nxt/exceptions.rb +0 -26
- data/lib/nxt/interfaces/base.rb +0 -36
- data/lib/nxt/interfaces/serial_port.rb +0 -88
- data/lib/nxt/interfaces/usb.rb +0 -8
- data/lib/nxt/nxt_brick.rb +0 -167
- data/lib/nxt/patches/module.rb +0 -22
- data/lib/nxt/patches/string.rb +0 -29
- data/lib/nxt/utils/accessors.rb +0 -24
- data/spec/matchers.rb +0 -7
- data/spec/nxt/connectors/output/motor_spec.rb +0 -55
- data/spec/nxt/interfaces/serial_port_spec.rb +0 -73
- data/spec/nxt/nxt_brick_spec.rb +0 -199
- data/spec/spec_helper.rb +0 -4
data/README.markdown
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# NXT
|
2
|
-
|
3
|
-
Control a Lego NXT 2.0 brick using Ruby code. This library works by piping
|
4
|
-
commands over a serialport connection to the brick, allowing you to write Ruby
|
5
|
-
scripts to control your bot. This means you can use both the Bluetooth and USB
|
6
|
-
serial ports provided on the brick as interfaces within your code.
|
7
|
-
|
8
|
-
This project used to be based on "ruby-nxt", and Tony Buser's subsequent rewrite
|
9
|
-
"nxt". It is now a complete rewrite, based heavily in some parts on the
|
10
|
-
aforesaid projects internally, but with a brand new external API that should
|
11
|
-
prove cleaner and easier to work with.
|
12
|
-
|
13
|
-
This code implements direct command, as outlined in "Appendix 2-LEGO MINDSTORMS
|
14
|
-
NXT Direct Commands.pdf". Not all functionality is implemented yet!
|
15
|
-
|
16
|
-
## Getting Started
|
17
|
-
|
18
|
-
### Connect to Your NXT Brick
|
19
|
-
|
20
|
-
In order to start coding with your NXT, you'll need to set up either a
|
21
|
-
Bluetooth or USB connection to it. Follow one of the below set of steps, and
|
22
|
-
make a note of the `/dev/*` address you end up using to point to the NXT.
|
23
|
-
|
24
|
-
### Creating a Bluetooth Serialport Connection
|
25
|
-
|
26
|
-
For instructions on creating a bluetooth serialport connection:
|
27
|
-
|
28
|
-
* Linux: http://tonybuser.com/bluetooth-serial-port-to-nxt-in-linux
|
29
|
-
* Max OSX: http://tonybuser.com/bluetooth-serial-port-to-nxt-in-osx
|
30
|
-
* Windows: http://tonybuser.com/ruby-serialportnxt-on-windows
|
31
|
-
|
32
|
-
### Creating a USB Serialport Connection
|
33
|
-
|
34
|
-
TODO
|
35
|
-
|
36
|
-
Once you have your NXT Connected
|
37
|
-
|
38
|
-
## Documentation and Examples
|
39
|
-
|
40
|
-
The NXT project has been heavily documented using nice, clean, human readable
|
41
|
-
markdown. YARD is used to generated the docs, and the options have been included
|
42
|
-
in our .yardopts file, so simply run a YARD server to read them:
|
43
|
-
|
44
|
-
yard server
|
45
|
-
|
46
|
-
This documents the API, both internal and external. For bite-sized chunks of NXT
|
47
|
-
code that is much more appropriate for beginners,
|
48
|
-
[have a look at the examples](https://github.com/nathankleyn/nxt/tree/master/examples).
|
49
|
-
|
50
|
-
In addition to this, you might find the tests quite helpful. There are currently
|
51
|
-
only RSpec unit tests, which can be found in the `spec` directory; the plan is
|
52
|
-
to add some decent feature tests soon.
|
data/Rakefile
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'rake'
|
2
|
-
require 'rake/clean'
|
3
|
-
require 'rdoc/task'
|
4
|
-
require 'rspec/core/rake_task'
|
5
|
-
|
6
|
-
RDoc::Task.new do |rdoc|
|
7
|
-
files = ['README.markdown', 'lib/**/*.rb']
|
8
|
-
rdoc.rdoc_files.add(files)
|
9
|
-
rdoc.main = 'README.markdown'
|
10
|
-
rdoc.title = 'ruby_events Docs'
|
11
|
-
rdoc.rdoc_dir = 'doc/rdoc'
|
12
|
-
rdoc.options << '--line-numbers'
|
13
|
-
end
|
14
|
-
|
15
|
-
RSpec::Core::RakeTask.new(:spec)
|
16
|
-
|
17
|
-
desc 'NXT related tasks'
|
18
|
-
namespace :nxt do
|
19
|
-
desc 'Detect a connected NXT brick within /dev.'
|
20
|
-
task :detect do
|
21
|
-
unless $DEV ||= ENV['NXT'] || ENV['DEV']
|
22
|
-
begin
|
23
|
-
devices = Dir['/dev/*NXT*']
|
24
|
-
if devices.size > 0
|
25
|
-
$DEV = devices[0]
|
26
|
-
puts "Detected a NXT brick at '#{$DEV}'."
|
27
|
-
else
|
28
|
-
puts 'Could not detect any connected NXT bricks.'
|
29
|
-
end
|
30
|
-
rescue
|
31
|
-
# FIXME: The /dev directory isn't there, possibly running on Windows.
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/nxt/commands/base.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
module NXT
|
2
|
-
module Command
|
3
|
-
module Base
|
4
|
-
|
5
|
-
private
|
6
|
-
|
7
|
-
COMMAND_TYPES = {
|
8
|
-
direct: 0x00,
|
9
|
-
system: 0x01,
|
10
|
-
reply: 0x02
|
11
|
-
}.freeze
|
12
|
-
|
13
|
-
COMMANDS = {
|
14
|
-
0x00 => 'startprogram',
|
15
|
-
0x01 => 'stopprogram',
|
16
|
-
0x02 => 'playsoundfile',
|
17
|
-
0x03 => 'playtone',
|
18
|
-
0x04 => 'setoutputstate',
|
19
|
-
0x05 => 'setinputmode',
|
20
|
-
0x06 => 'getoutputstate',
|
21
|
-
0x07 => 'getinputvalues',
|
22
|
-
0x08 => 'resetinputscaledvalue',
|
23
|
-
0x09 => 'messagewrite',
|
24
|
-
0x0a => 'resetmotorposition',
|
25
|
-
0x0b => 'getbatterylevel',
|
26
|
-
0x0c => 'stopsoundplayback',
|
27
|
-
0x0d => 'keepalive',
|
28
|
-
0x0e => 'lsgetstatus',
|
29
|
-
0x0f => 'lswrite',
|
30
|
-
0x10 => 'lsread',
|
31
|
-
0x11 => 'getcurrentprogramname',
|
32
|
-
0x13 => 'messageread',
|
33
|
-
}
|
34
|
-
|
35
|
-
PORTS = {
|
36
|
-
a: 0x00,
|
37
|
-
b: 0x01,
|
38
|
-
c: 0x02,
|
39
|
-
one: 0x00,
|
40
|
-
two: 0x01,
|
41
|
-
three: 0x02,
|
42
|
-
four: 0x03,
|
43
|
-
all: 0xFF
|
44
|
-
}
|
45
|
-
|
46
|
-
def port_as_byte(port)
|
47
|
-
PORTS[port]
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/lib/nxt/commands/input.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
module NXT
|
2
|
-
module Command
|
3
|
-
module Input
|
4
|
-
include NXT::Command::Base
|
5
|
-
extend NXT::Utils::Accessors
|
6
|
-
|
7
|
-
@@command_type = COMMAND_TYPES[:direct]
|
8
|
-
@@command = 0x05
|
9
|
-
|
10
|
-
SENSOR_TYPES = {}
|
11
|
-
[:no_sensor,
|
12
|
-
:switch,
|
13
|
-
:temperature,
|
14
|
-
:reflection,
|
15
|
-
:angle,
|
16
|
-
:light_active,
|
17
|
-
:light_inactive,
|
18
|
-
:sound_db,
|
19
|
-
:sound_dba,
|
20
|
-
:custom,
|
21
|
-
:lowspeed,
|
22
|
-
:lowspeed_9v,
|
23
|
-
:highspeed,
|
24
|
-
:colorfull,
|
25
|
-
:colorred,
|
26
|
-
:colorgreen,
|
27
|
-
:colorblue,
|
28
|
-
:colornone
|
29
|
-
].each_with_index do |key, index|
|
30
|
-
SENSOR_TYPES[key] = index
|
31
|
-
end
|
32
|
-
|
33
|
-
SENSOR_MODES = {
|
34
|
-
:rawmode => 0x00,
|
35
|
-
:booleanmode => 0x20,
|
36
|
-
:transitioncntmode => 0x40,
|
37
|
-
:periodcountermode => 0x60,
|
38
|
-
:pctfullscalemode => 0x80,
|
39
|
-
:celsiusmode => 0xA0,
|
40
|
-
:fahrenheitmode => 0xC0,
|
41
|
-
:anglestepmode => 0xE0,
|
42
|
-
:slopemask => 0x1F,
|
43
|
-
:modemask => 0xE0
|
44
|
-
}
|
45
|
-
|
46
|
-
def set_input_mode(type, mode)
|
47
|
-
raise "Invalid sensor type: #{type}" if !type.nil? && !SENSOR_TYPES.include?(type)
|
48
|
-
|
49
|
-
@interface.send_and_receive([
|
50
|
-
@@command_type,
|
51
|
-
@@command,
|
52
|
-
port_as_byte(@port),
|
53
|
-
SENSOR_TYPES[type],
|
54
|
-
SENSOR_MODES[mode]
|
55
|
-
])
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
data/lib/nxt/commands/output.rb
DELETED
@@ -1,105 +0,0 @@
|
|
1
|
-
module NXT
|
2
|
-
module Command
|
3
|
-
# An implementation of all the output related NXT commands:
|
4
|
-
#
|
5
|
-
# * setoutputstate
|
6
|
-
# * getoutputstate
|
7
|
-
#
|
8
|
-
# This is used predominantly to interface with the servo-motor connectors
|
9
|
-
# that come prepackaged with NXT kits.
|
10
|
-
#
|
11
|
-
# This class can also be used to talk to other third-party accessories
|
12
|
-
# connected in the output ports on the NXT brick.
|
13
|
-
#
|
14
|
-
# This class does not actually talk to the chosen interface for the NXT
|
15
|
-
# brick. Instead, it outputs messages in byte arrays ready to be serialised
|
16
|
-
# to the brick over the appropriate interface from within the {NXT::Brick}
|
17
|
-
# class.
|
18
|
-
module Output
|
19
|
-
include NXT::Command::Base
|
20
|
-
extend NXT::Utils::Accessors
|
21
|
-
|
22
|
-
@@command_type = COMMAND_TYPES[:direct]
|
23
|
-
@@command_identifier = 0x04
|
24
|
-
|
25
|
-
# The mode enum. This is a list of possible values when setting the mode
|
26
|
-
# byte.
|
27
|
-
#
|
28
|
-
# Reference: Appendix 2, Page 6
|
29
|
-
MODE = {
|
30
|
-
# Motor will rotate freely.
|
31
|
-
# NOTE: This is not documented in the Appendixes.
|
32
|
-
coast: 0x00,
|
33
|
-
# Turn on the specified motor.
|
34
|
-
motor_on: 0x01,
|
35
|
-
# Use run/brake instead of run/float in PWM. This means the voltage is
|
36
|
-
# not allowed to float between PWM pulses, improving accuracy at the
|
37
|
-
# expense of greater power usage.
|
38
|
-
brake: 0x02,
|
39
|
-
# Turns on the regulation. This is required when setting a regulation
|
40
|
-
# mode setting.
|
41
|
-
regulated: 0x04
|
42
|
-
}.freeze
|
43
|
-
|
44
|
-
# The regulation mode enum. This is a list of possible values when
|
45
|
-
# setting the regulation mode byte.
|
46
|
-
#
|
47
|
-
# Reference: Appendix 2, Page 6
|
48
|
-
REGULATION_MODE = {
|
49
|
-
# No regulation will be enabled.
|
50
|
-
idle: 0x00,
|
51
|
-
# Power control will be enabled on specific output.
|
52
|
-
motor_speed: 0x01,
|
53
|
-
# Synchronisation will be enabled. This requires two output ports to
|
54
|
-
# have this enabled before it will work.
|
55
|
-
motor_sync: 0x02
|
56
|
-
}.freeze
|
57
|
-
|
58
|
-
# The run state enum. This is a list of possible values when setting the
|
59
|
-
# run state byte.
|
60
|
-
#
|
61
|
-
# Reference: Appendix 2, Page 6
|
62
|
-
RUN_STATE = {
|
63
|
-
# Output will be idle.
|
64
|
-
idle: 0x00,
|
65
|
-
# Output will ramp-up to the desired speed.
|
66
|
-
ramp_up: 0x10,
|
67
|
-
# Output will be running.
|
68
|
-
running: 0x20,
|
69
|
-
# Output will ramp-down to the desired speed.
|
70
|
-
ramp_down: 0x40
|
71
|
-
}.freeze
|
72
|
-
|
73
|
-
attr_combined_accessor :power, 75
|
74
|
-
attr_combined_accessor :mode, :motor_on
|
75
|
-
attr_combined_accessor :regulation_mode, :idle
|
76
|
-
attr_combined_accessor :run_state, :running
|
77
|
-
attr_combined_accessor :tacho_limit, 0
|
78
|
-
|
79
|
-
attr_setter :power, is: Integer
|
80
|
-
attr_setter :mode, is_key_in: MODE
|
81
|
-
attr_setter :regulation_mode, is_key_in: REGULATION_MODE
|
82
|
-
attr_setter :run_state, is_key_in: RUN_STATE
|
83
|
-
attr_setter :tacho_limit, is: Integer
|
84
|
-
|
85
|
-
def set_output_state(response_required = false)
|
86
|
-
# Pack this value into a 32-bit unsigned little-endian binary string,
|
87
|
-
# then unpack it into 4 8 bit unsigned integer chunks. We are
|
88
|
-
# converting the passed in value to a little endian, unsigned long
|
89
|
-
# value.
|
90
|
-
tacho_limit_as_bytes = [self.tacho_limit].pack('V').unpack('C4')
|
91
|
-
|
92
|
-
@interface.send_and_receive([
|
93
|
-
@@command_type,
|
94
|
-
@@command_identifier,
|
95
|
-
port_as_byte(self.port),
|
96
|
-
self.power,
|
97
|
-
MODE[self.mode],
|
98
|
-
REGULATION_MODE[self.regulation_mode],
|
99
|
-
0, # turn ratio
|
100
|
-
RUN_STATE[self.run_state]
|
101
|
-
] + tacho_limit_as_bytes, response_required)
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
data/lib/nxt/commands/program.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
module NXT
|
2
|
-
module Command
|
3
|
-
module Output
|
4
|
-
class Program
|
5
|
-
include NXT::Command::Base
|
6
|
-
|
7
|
-
@@command_type = COMMAND_TYPES[:direct]
|
8
|
-
START_PROGRAM = 0x00
|
9
|
-
STOP_PROGRAM = 0x01
|
10
|
-
GET_CURRENT_PROGRAM_NAME = 0x11
|
11
|
-
|
12
|
-
def initialize(interface, name=nil)
|
13
|
-
@interface = interface
|
14
|
-
@name = name
|
15
|
-
end
|
16
|
-
|
17
|
-
def start
|
18
|
-
self.class.start(@interface, @name)
|
19
|
-
end
|
20
|
-
|
21
|
-
def stop
|
22
|
-
self.class.stop(@interface)
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
class << self
|
27
|
-
|
28
|
-
def start(interface, name)
|
29
|
-
response = send_command(interface, START_PROGRAM, name)
|
30
|
-
|
31
|
-
unless response[:status] == NXT::Errors::SUCCESS
|
32
|
-
message = "#{response[:message]}; Try using '.rxe' as the filename extension"
|
33
|
-
raise NXT::Exceptions::CommandError.new message
|
34
|
-
end
|
35
|
-
|
36
|
-
response
|
37
|
-
end
|
38
|
-
|
39
|
-
def stop(interface)
|
40
|
-
send_command(interface, STOP_PROGRAM)
|
41
|
-
end
|
42
|
-
|
43
|
-
def get_running_name(interface)
|
44
|
-
response = send_command(interface, GET_CURRENT_PROGRAM_NAME)
|
45
|
-
raise NXT::Exceptions::CommandError.new(response[:message]) if response[:status] != NXT::Errors::SUCCESS
|
46
|
-
convert_data_to_string(response[:data])
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
def send_command(interface, command, name=nil)
|
51
|
-
|
52
|
-
array = [@@command_type, command]
|
53
|
-
array.concat convert_string_to_data(name) unless name.nil?
|
54
|
-
|
55
|
-
response = interface.send_and_receive(array)
|
56
|
-
end
|
57
|
-
|
58
|
-
def convert_data_to_string(data)
|
59
|
-
data.pack("C*").strip
|
60
|
-
end
|
61
|
-
|
62
|
-
def convert_string_to_data(name, max_length=20)
|
63
|
-
name.ljust(max_length, "\0").unpack("C*")
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
data/lib/nxt/connectors/base.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
module NXT
|
2
|
-
module Connector
|
3
|
-
module Base
|
4
|
-
SENSOR_TYPES = {}
|
5
|
-
[:no_sensor,
|
6
|
-
:switch,
|
7
|
-
:temperature,
|
8
|
-
:reflection,
|
9
|
-
:angle,
|
10
|
-
:light_active,
|
11
|
-
:light_inactive,
|
12
|
-
:sound_db,
|
13
|
-
:sound_dba,
|
14
|
-
:custom,
|
15
|
-
:lowspeed,
|
16
|
-
:lowspeed_9v,
|
17
|
-
:highspeed,
|
18
|
-
:colorfull,
|
19
|
-
:colorred,
|
20
|
-
:colorgreen,
|
21
|
-
:colorblue,
|
22
|
-
:colornone
|
23
|
-
].each_with_index do |key, index|
|
24
|
-
SENSOR_TYPES[key] = index
|
25
|
-
end
|
26
|
-
|
27
|
-
def set_input_mode(interface, type, mode)
|
28
|
-
raise "Invalid sensor type: #{mode}" if !mode.nil? && !SENSOR_TYPES.include?(mode)
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module NXT
|
2
|
-
module Connector
|
3
|
-
module Input
|
4
|
-
class Color
|
5
|
-
include NXT::Command::Input
|
6
|
-
|
7
|
-
attr_accessor :port, :interface
|
8
|
-
|
9
|
-
COLORS = {
|
10
|
-
:off => :colornone,
|
11
|
-
:red => :colorred,
|
12
|
-
:green => :colorgreen,
|
13
|
-
:blue => :colorblue,
|
14
|
-
:all => :colorfull
|
15
|
-
}
|
16
|
-
def initialize(port, interface)
|
17
|
-
@interface = interface
|
18
|
-
@port = port
|
19
|
-
end
|
20
|
-
|
21
|
-
def set_color(color)
|
22
|
-
raise "Invalid color #{color}" unless COLORS.include?(color)
|
23
|
-
|
24
|
-
set_input_mode(COLORS[color], :booleanmode)
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|