nxt 0.3.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|