phidgets-ffi 0.0.5 → 0.1.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.
Files changed (79) hide show
  1. data/.gitignore +3 -0
  2. data/LICENSE +1 -1
  3. data/README.rdoc +92 -42
  4. data/examples/accelerometer.rb +39 -0
  5. data/examples/advanced_servo.rb +94 -0
  6. data/examples/analog.rb +43 -0
  7. data/examples/bridge.rb +57 -0
  8. data/examples/dictionary.rb +46 -31
  9. data/examples/encoder.rb +59 -0
  10. data/examples/frequency_counter.rb +63 -0
  11. data/examples/gps.rb +91 -0
  12. data/examples/interface_kit_with_block.rb +68 -0
  13. data/examples/interface_kit_without_block.rb +60 -0
  14. data/examples/ir.rb +157 -0
  15. data/examples/led.rb +36 -0
  16. data/examples/manager.rb +16 -10
  17. data/examples/motor_control.rb +108 -0
  18. data/examples/{ffi → raw-ffi}/dictionary.rb +11 -1
  19. data/examples/{ffi → raw-ffi}/interface_kit.rb +19 -2
  20. data/examples/{ffi → raw-ffi}/library_version.rb +0 -0
  21. data/examples/{ffi → raw-ffi}/log.rb +0 -0
  22. data/examples/{ffi → raw-ffi}/manager.rb +6 -3
  23. data/examples/rfid.rb +63 -0
  24. data/examples/servo.rb +45 -30
  25. data/examples/spatial.rb +75 -0
  26. data/examples/stepper.rb +87 -0
  27. data/examples/temperature_sensor.rb +49 -0
  28. data/examples/text_lcd.rb +101 -0
  29. data/lib/phidgets-ffi.rb +34 -3
  30. data/lib/phidgets-ffi/accelerometer.rb +122 -0
  31. data/lib/phidgets-ffi/advanced_servo.rb +304 -0
  32. data/lib/phidgets-ffi/analog.rb +111 -0
  33. data/lib/phidgets-ffi/bridge.rb +167 -0
  34. data/lib/phidgets-ffi/common.rb +506 -103
  35. data/lib/phidgets-ffi/dictionary.rb +136 -23
  36. data/lib/phidgets-ffi/encoder.rb +196 -0
  37. data/lib/phidgets-ffi/error.rb +8 -3
  38. data/lib/phidgets-ffi/ffi/accelerometer.rb +30 -0
  39. data/lib/phidgets-ffi/ffi/advanced_servo.rb +73 -0
  40. data/lib/phidgets-ffi/ffi/analog.rb +29 -0
  41. data/lib/phidgets-ffi/ffi/bridge.rb +44 -0
  42. data/lib/phidgets-ffi/ffi/common.rb +51 -34
  43. data/lib/phidgets-ffi/ffi/constants.rb +3 -1
  44. data/lib/phidgets-ffi/ffi/dictionary.rb +25 -20
  45. data/lib/phidgets-ffi/ffi/encoder.rb +32 -0
  46. data/lib/phidgets-ffi/ffi/frequency_counter.rb +38 -0
  47. data/lib/phidgets-ffi/ffi/gps.rb +32 -0
  48. data/lib/phidgets-ffi/ffi/interface_kit.rb +26 -23
  49. data/lib/phidgets-ffi/ffi/ir.rb +50 -0
  50. data/lib/phidgets-ffi/ffi/led.rb +40 -0
  51. data/lib/phidgets-ffi/ffi/log.rb +7 -6
  52. data/lib/phidgets-ffi/ffi/manager.rb +35 -20
  53. data/lib/phidgets-ffi/ffi/motor_control.rb +66 -0
  54. data/lib/phidgets-ffi/ffi/rfid.rb +36 -0
  55. data/lib/phidgets-ffi/ffi/servo.rb +16 -15
  56. data/lib/phidgets-ffi/ffi/spatial.rb +40 -0
  57. data/lib/phidgets-ffi/ffi/stepper.rb +56 -0
  58. data/lib/phidgets-ffi/ffi/temperature_sensor.rb +42 -0
  59. data/lib/phidgets-ffi/ffi/text_lcd.rb +55 -0
  60. data/lib/phidgets-ffi/frequency_counter.rb +148 -0
  61. data/lib/phidgets-ffi/gps.rb +181 -0
  62. data/lib/phidgets-ffi/interface_kit.rb +205 -92
  63. data/lib/phidgets-ffi/ir.rb +290 -0
  64. data/lib/phidgets-ffi/led.rb +112 -0
  65. data/lib/phidgets-ffi/log.rb +14 -2
  66. data/lib/phidgets-ffi/manager.rb +143 -26
  67. data/lib/phidgets-ffi/motor_control.rb +497 -0
  68. data/lib/phidgets-ffi/phidgets-ffi.rb +15 -2
  69. data/lib/phidgets-ffi/rfid.rb +220 -0
  70. data/lib/phidgets-ffi/servo.rb +103 -61
  71. data/lib/phidgets-ffi/spatial.rb +306 -0
  72. data/lib/phidgets-ffi/stepper.rb +370 -0
  73. data/lib/phidgets-ffi/temperature_sensor.rb +157 -0
  74. data/lib/phidgets-ffi/text_lcd.rb +298 -0
  75. data/lib/phidgets-ffi/version.rb +1 -1
  76. data/phidgets-ffi.gemspec +2 -2
  77. metadata +89 -76
  78. data/examples/ffi/servo.rb +0 -67
  79. data/examples/interface_kit.rb +0 -20
@@ -0,0 +1,59 @@
1
+ require 'rubygems'
2
+ require 'phidgets-ffi'
3
+
4
+ puts "Library Version: #{Phidgets::FFI.library_version}"
5
+
6
+ en = Phidgets::Encoder.new
7
+
8
+ puts "Wait for PhidgetEncoder to attached..."
9
+
10
+ #The following method runs when the PhidgetEncoder is attached to the system
11
+ en.on_attach do |device, obj|
12
+
13
+ puts "Device attributes: #{device.attributes} attached"
14
+ puts "Class: #{device.device_class}"
15
+ puts "Id: #{device.id}"
16
+ puts "Serial number: #{device.serial_number}"
17
+ puts "Version: #{device.version}"
18
+ puts "# Digital Inputs: #{en.inputs.size}"
19
+ puts "# Encoders: #{device.encoders.size}"
20
+
21
+ begin
22
+ en.encoders[0].enabled = true #some encoders do not support the enable feature
23
+ rescue Phidgets::Error::Unsupported => e
24
+ puts "Exception caught: #{e.message}"
25
+ end
26
+
27
+ sleep 1
28
+
29
+ en.encoders[0].position = 200
30
+
31
+ begin
32
+ puts "Index Position: #{en.encoders[0].index_position}"
33
+ rescue Phidgets::Error::UnknownVal => e
34
+ puts "Exception caught: #{e.message}"
35
+ end
36
+
37
+ puts "Position: #{en.encoders[0].position}"
38
+ end
39
+
40
+ en.on_detach do |device, obj|
41
+ puts "#{device.attributes.inspect} detached"
42
+ end
43
+
44
+ en.on_error do |device, obj, code, description|
45
+ puts "Error #{code}: #{description}"
46
+ end
47
+
48
+ en.on_input_change do |device, input, state, obj|
49
+ puts "Input #{input.index}'s state has changed to #{state}"
50
+ end
51
+
52
+ en.on_position_change do |device, encoder, time, position_change, obj|
53
+
54
+ puts "Encoder #{encoder.index} -- Position: #{device.encoders[encoder.index].position} -- Relative Change: #{position_change} -- Elapsed Time: #{time}"
55
+ end
56
+
57
+ sleep 10
58
+
59
+ en.close
@@ -0,0 +1,63 @@
1
+ require 'rubygems'
2
+ require 'phidgets-ffi'
3
+
4
+ puts "Library Version: #{Phidgets::FFI.library_version}"
5
+
6
+ fc = Phidgets::FrequencyCounter.new
7
+
8
+ puts "Wait for PhidgetFrequncyCounter to attached..."
9
+
10
+ #The following method runs when the PhidgetFrequencyCounter is attached to the system
11
+ fc.on_attach do |device, obj|
12
+
13
+ puts "Device attributes: #{device.attributes} attached"
14
+ puts "Class: #{device.device_class}"
15
+ puts "Id: #{device.id}"
16
+ puts "Serial number: #{device.serial_number}"
17
+ puts "Version: #{device.version}"
18
+ puts "# Inputs: #{device.inputs.size}"
19
+
20
+ device.inputs[0].enabled = true
21
+
22
+ device.inputs[0].filter_type = Phidgets::FFI::FrequencyCounterFilterTypes[:filter_type_zero_crossing]
23
+
24
+ device.inputs[0].timeout = 100018
25
+
26
+ sleep 1
27
+
28
+ puts "Enabled: #{device.inputs[0].enabled}"
29
+ puts "Filter Type: #{device.inputs[0].filter_type}"
30
+ puts "Timeout: #{device.inputs[0].timeout}"
31
+
32
+ end
33
+
34
+ fc.on_detach do |device, obj|
35
+ puts "#{device.attributes.inspect} detached"
36
+ end
37
+
38
+ fc.on_error do |device, obj, code, description|
39
+ puts "Error #{code}: #{description}"
40
+ end
41
+
42
+ fc.on_count do |device, input, time, count, obj|
43
+ puts "Channel #{input.index}: #{count} pulses in #{time} microseconds"
44
+ end
45
+
46
+ sleep 5
47
+
48
+ if(fc.attached?)
49
+ 5.times do
50
+ begin
51
+ puts "Frequency[0]: #{fc.inputs[0].frequency}"
52
+ puts "Total count: #{fc.inputs[0].total_count}"
53
+ puts "Total time: #{fc.inputs[0].total_time} microseconds"
54
+ puts ''
55
+ rescue Phidgets::Error::UnknownVal => e
56
+ puts "Exception caught: #{e.message}"
57
+ end
58
+ sleep 0.5
59
+ end
60
+ end
61
+
62
+ sleep 1
63
+ fc.close
data/examples/gps.rb ADDED
@@ -0,0 +1,91 @@
1
+ require 'rubygems'
2
+ require 'phidgets-ffi'
3
+
4
+ puts "Library Version: #{Phidgets::FFI.library_version}"
5
+
6
+ gps = Phidgets::GPS.new
7
+
8
+ puts "Wait for PhidgetGPS to attached..."
9
+
10
+ #The following method runs when the PhidgetGPS is attached to the system
11
+ gps.on_attach do |device, obj|
12
+
13
+ puts "Device attributes: #{device.attributes} attached"
14
+ puts "Class: #{device.device_class}"
15
+ puts "Id: #{device.id}"
16
+ puts "Serial number: #{device.serial_number}"
17
+ puts "Version: #{device.version}"
18
+
19
+ puts "Waiting for position fix status to be acquired"
20
+
21
+ end
22
+
23
+ gps.on_detach do |device, obj|
24
+ puts "#{device.attributes.inspect} detached"
25
+ end
26
+
27
+ gps.on_error do |device, obj, code, description|
28
+ puts "Error #{code}: #{description}"
29
+ end
30
+
31
+ gps.on_position_fix_status_change do |device, fix_status, obj|
32
+ puts "Position fix status changed to: #{fix_status}"
33
+ end
34
+
35
+ gps.on_position_change do |device, lat, long, alt, obj|
36
+ puts "Latitude: #{lat} degrees, longitude: #{long} degrees, altitude: #{alt} m"
37
+ end
38
+
39
+ sleep 5
40
+
41
+ if(gps.attached?)
42
+ 5.times do
43
+ begin
44
+ puts "Latitude: #{gps.latitude} degrees"
45
+ rescue Phidgets::Error::UnknownVal => e
46
+ puts "Exception caught: #{e.message}"
47
+ end
48
+
49
+ begin
50
+ puts "Longitude: #{gps.longitude} degrees"
51
+ rescue Phidgets::Error::UnknownVal => e
52
+ puts "Exception caught: #{e.message}"
53
+ end
54
+
55
+ begin
56
+ puts "Altitude: #{gps.altitude} m"
57
+ rescue Phidgets::Error::UnknownVal => e
58
+ puts "Exception caught: #{e.message}"
59
+ end
60
+
61
+ begin
62
+ puts "Heading: #{gps.heading} degrees"
63
+ rescue Phidgets::Error::UnknownVal => e
64
+ puts "Exception caught: #{e.message}"
65
+ end
66
+
67
+ begin
68
+ puts "Velocity: #{gps.velocity} km/h"
69
+ rescue Phidgets::Error::UnknownVal => e
70
+ puts "Exception caught: #{e.message}"
71
+ end
72
+
73
+ begin
74
+ puts "GPS Time(UTC): #{gps.time[:hours]}:#{gps.time[:minutes]}:#{gps.time[:seconds]}:#{gps.time[:milliseconds]}"
75
+ rescue Phidgets::Error::UnknownVal => e
76
+ puts "Exception caught: #{e.message}"
77
+ end
78
+
79
+ begin
80
+ puts "GPS Date(UTC): #{gps.date[:month]}/#{gps.date[:day]}/#{gps.date[:year]}"
81
+ rescue Phidgets::Error::UnknownVal => e
82
+ puts "Exception caught: #{e.message}"
83
+ end
84
+
85
+ puts ''
86
+ sleep 0.5
87
+ end
88
+ end
89
+
90
+ sleep 50
91
+ gps.close
@@ -0,0 +1,68 @@
1
+ require 'rubygems'
2
+ require 'phidgets-ffi'
3
+
4
+ puts "Library Version: #{Phidgets::FFI.library_version}"
5
+
6
+ puts "Wait for PhidgetInterfaceKit to attach..."
7
+
8
+ begin
9
+ Phidgets::InterfaceKit.new do |ifkit|
10
+
11
+ puts "Device attributes: #{ifkit.attributes} attached"
12
+ puts "Class: #{ifkit.device_class}"
13
+ puts "Id: #{ifkit.id}"
14
+ puts "Serial number: #{ifkit.serial_number}"
15
+ puts "Version: #{ifkit.version}"
16
+ puts "# Digital inputs: #{ifkit.inputs.size}"
17
+ puts "# Digital outputs: #{ifkit.outputs.size}"
18
+ puts "# Analog inputs: #{ifkit.sensors.size}"
19
+
20
+ sleep 1
21
+
22
+ if(ifkit.sensors.size > 0)
23
+ ifkit.ratiometric = false
24
+ ifkit.sensors[0].data_rate = 64
25
+ ifkit.sensors[0].sensitivity = 15
26
+
27
+ puts "Sensivity: #{ifkit.sensors[0].sensitivity}"
28
+ puts "Data rate: #{ifkit.sensors[0].data_rate}"
29
+ puts "Data rate max: #{ifkit.sensors[0].data_rate_max}"
30
+ puts "Data rate min: #{ifkit.sensors[0].data_rate_min}"
31
+ puts "Sensor value[0]: #{ifkit.sensors[0].to_i}"
32
+ puts "Raw sensor value[0]: #{ifkit.sensors[0].raw_value}"
33
+
34
+ ifkit.outputs[0].state = true
35
+ sleep 1 #allow time for digital output 0's state to be set
36
+ puts "Is digital output 0's state on? ... #{ifkit.outputs[0].on?}"
37
+ end
38
+
39
+ ifkit.on_detach do |device, obj|
40
+ puts "#{device.attributes.inspect} detached"
41
+ end
42
+
43
+ ifkit.on_error do |device, obj, code, description|
44
+ puts "Error #{code}: #{description}"
45
+ end
46
+
47
+ ifkit.on_input_change do |device, input, state, obj|
48
+ puts "Input #{input.index}'s state has changed to #{state}"
49
+ end
50
+
51
+ ifkit.on_output_change do |device, output, state, obj|
52
+ puts "Output #{output.index}'s state has changed to #{state}"
53
+ end
54
+
55
+ ifkit.on_sensor_change do |device, input, value, obj|
56
+ puts "Sensor #{input.index}'s value has changed to #{value}"
57
+ end
58
+
59
+ sleep 10
60
+ end
61
+ rescue Phidgets::Error::Timeout => e
62
+ puts "Exception caught: #{e.message}"
63
+ end
64
+
65
+
66
+
67
+
68
+
@@ -0,0 +1,60 @@
1
+ require 'rubygems'
2
+ require 'phidgets-ffi'
3
+
4
+ puts "Library Version: #{Phidgets::FFI.library_version}"
5
+
6
+ ifkit = Phidgets::InterfaceKit.new
7
+
8
+ ifkit.on_attach do |device, obj|
9
+
10
+ puts "Device attributes: #{device.attributes} attached"
11
+ puts "Class: #{device.device_class}"
12
+ puts "Id: #{device.id}"
13
+ puts "Serial number: #{device.serial_number}"
14
+ puts "Version: #{device.version}"
15
+ puts "# Digital inputs: #{device.inputs.size}"
16
+ puts "# Digital outputs: #{device.outputs.size}"
17
+ puts "# Analog inputs: #{device.sensors.size}"
18
+
19
+ sleep 1
20
+
21
+ if(device.sensors.size > 0)
22
+ device.ratiometric = false
23
+ device.sensors[0].data_rate = 64
24
+ device.sensors[0].sensitivity = 15
25
+
26
+ puts "Sensivity: #{device.sensors[0].sensitivity}"
27
+ puts "Data rate: #{device.sensors[0].data_rate}"
28
+ puts "Data rate max: #{device.sensors[0].data_rate_max}"
29
+ puts "Data rate min: #{device.sensors[0].data_rate_min}"
30
+ puts "Sensor value[0]: #{device.sensors[0].to_i}"
31
+ puts "Raw sensor value[0]: #{device.sensors[0].raw_value}"
32
+
33
+ device.outputs[0].state = true
34
+ sleep 1 #allow time for digital output 0's state to be set
35
+ puts "Is digital output 0's state on? ... #{device.outputs[0].on?}"
36
+ end
37
+ end
38
+
39
+ ifkit.on_detach do |device, obj|
40
+ puts "#{device.attributes.inspect} detached"
41
+ end
42
+
43
+ ifkit.on_error do |device, obj, code, description|
44
+ puts "Error #{code}: #{description}"
45
+ end
46
+
47
+ ifkit.on_input_change do |device, input, state, obj|
48
+ puts "Input #{input.index}'s state has changed to #{state}"
49
+ end
50
+
51
+ ifkit.on_output_change do |device, output, state, obj|
52
+ puts "Output #{output.index}'s state has changed to #{state}"
53
+ end
54
+
55
+ ifkit.on_sensor_change do |device, input, value, obj|
56
+ puts "Sensor #{input.index}'s value has changed to #{value}"
57
+ end
58
+
59
+ sleep 10
60
+ ifkit.close
data/examples/ir.rb ADDED
@@ -0,0 +1,157 @@
1
+ require 'rubygems'
2
+ require 'phidgets-ffi'
3
+
4
+ puts "Library Version: #{Phidgets::FFI.library_version}"
5
+
6
+ ir = Phidgets::IR.new
7
+
8
+ puts "Wait for PhidgetIR to attached..."
9
+
10
+ #The following method runs when the PhidgetIR is attached to the system
11
+ ir.on_attach do |device, obj|
12
+
13
+ puts "Device attributes: #{device.attributes} attached"
14
+ puts "Class: #{device.device_class}"
15
+ puts "Id: #{device.id}"
16
+ puts "Serial number: #{device.serial_number}"
17
+ puts "Version: #{device.version}"
18
+
19
+ #example of sending RAW Data - this was captured from an Apple remote Volume UP command
20
+ volume_up_raw_data = [
21
+ 9040, 4590, 540, 630, 550, 1740, 550, 1750, 550, 1740,
22
+ 550, 620, 550, 1750, 550, 1740, 550, 1750, 550, 1740,
23
+ 550, 1740, 560, 1740, 540, 630, 550, 620, 550, 620,
24
+ 540, 630, 550, 1750, 550, 1740, 560, 1740, 550, 620,
25
+ 550, 1740, 550, 620, 550, 620, 560, 610, 550, 620,
26
+ 550, 1750, 550, 1740, 550, 620, 550, 1740, 550, 1750,
27
+ 550, 620, 550, 620, 550, 620, 540]
28
+
29
+ 5.times do
30
+ puts 'Transmiting raw data ...'
31
+ device.transmit_raw(volume_up_raw_data, 67, 38000, 33, 110000)
32
+ sleep 0.2
33
+ end
34
+
35
+ end
36
+
37
+ ir.on_detach do |device, obj|
38
+ puts "#{device.attributes.inspect} detached"
39
+ end
40
+
41
+ ir.on_error do |device, obj, code, description|
42
+ puts "Error #{code}: #{description}"
43
+ end
44
+
45
+ ir.on_code do |device, data, data_length, bit_count, repeat, obj|
46
+ puts "Code #{data} received, length: #{data_length}, bit count: #{bit_count}, repeat: #{repeat}"
47
+ end
48
+
49
+ ir.on_learn do |device, data, data_length, code_info, obj|
50
+ print "\n-------------------Learned Code---------------------\n"
51
+
52
+ puts "Code: #{data}"
53
+ puts "Data length: #{data_length}"
54
+ puts "Bit count: #{code_info[:bit_count]}"
55
+ puts "Encoding: #{code_info[:encoding]}"
56
+ puts "Length: #{code_info[:length]}"
57
+ puts "Gap: #{code_info[:gap]}"
58
+ puts "Trail: #{code_info[:trail]}"
59
+ puts "Header: #{code_info[:header][0]}, #{code_info[:header][1]}"
60
+ puts "One: #{code_info[:one][0]}, #{code_info[:one][1]}"
61
+ puts "Zero: #{code_info[:zero][0]}, #{code_info[:zero][1]}"
62
+ puts "Min repeat: #{code_info[:min_repeat]}"
63
+
64
+ printf 'Toggle mask: '
65
+ 16.times do |i|
66
+ print "#{code_info[:toggle_mask][i]}, "
67
+ end
68
+
69
+ puts ''
70
+
71
+ puts "Carrier frequency: #{code_info[:carrier_frequency]}"
72
+ print "Duty cycle: #{code_info[:duty_cycle]} \n\n"
73
+
74
+ end
75
+
76
+ ir.on_raw_data do |device, raw_data, data_length, obj|
77
+ print "Raw data: "
78
+ data_length.times do |i|
79
+ print "#{raw_data[i]}, "
80
+ end
81
+
82
+ puts ''
83
+
84
+ end
85
+
86
+
87
+ puts "Please transmit a code now ..."
88
+ sleep 10
89
+
90
+ if(ir.attached?)
91
+
92
+ apple_volume_down = ["77", "E1", "B0", "F0"]
93
+ apple_volume_code_info = Phidgets::IR::IR_code_info.new
94
+ apple_volume_code_info[:bit_count] = 32
95
+ apple_volume_code_info[:encoding] = Phidgets::FFI::IREncoding[:encoding_space]
96
+ apple_volume_code_info[:length] = Phidgets::FFI::IRLength[:length_constant]
97
+ apple_volume_code_info[:gap] = 232
98
+ apple_volume_code_info[:trail] = 432
99
+ apple_volume_code_info[:header][0] = 9080
100
+ apple_volume_code_info[:header][1] = 4604
101
+ apple_volume_code_info[:one][0] = 550
102
+ apple_volume_code_info[:one][1] = 1753
103
+ apple_volume_code_info[:zero][0] = 550
104
+ apple_volume_code_info[:zero][1] = 623
105
+ apple_volume_code_info[:min_repeat] = 0
106
+ apple_volume_code_info[:carrier_frequency] = 38000
107
+ apple_volume_code_info[:duty_cycle] = 50
108
+
109
+ begin
110
+ 5.times do
111
+ puts 'Transmitting data ...'
112
+ ir.transmit apple_volume_down, apple_volume_code_info
113
+ sleep 0.2
114
+ end
115
+
116
+ rescue Phidgets::Error::Timeout => e
117
+ puts "Exception caught: #{e.message}"
118
+ end
119
+
120
+ 5.times do
121
+ begin
122
+ puts ''
123
+ raw_data, raw_data_length = ir.read_raw_data
124
+
125
+ print "Last raw data: "
126
+ raw_data_length.times do |i|
127
+ print "#{raw_data[i]},"
128
+ end
129
+
130
+ puts ''
131
+ puts "Data length: #{raw_data_length}"
132
+
133
+ puts ''
134
+ data, data_length, bit_count = ir.last_code
135
+
136
+ print 'Last code: '
137
+ print "#{data}"
138
+ puts ''
139
+ puts "Data length: #{data_length}"
140
+ puts "Bit count: #{bit_count}"
141
+
142
+ puts ''
143
+ sleep 0.2
144
+ puts '----------------------------------------------------'
145
+
146
+ puts 'Transmitting the last code that was received'
147
+ ir.transmit data, apple_volume_code_info
148
+
149
+ rescue Phidgets::Error::UnknownVal => e
150
+ puts "Exception caught: #{e.message}"
151
+ end
152
+
153
+ end
154
+ end
155
+
156
+ sleep 1
157
+ ir.close