atduskgreg-rad 0.2.5

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 (143) hide show
  1. data/History.txt +104 -0
  2. data/License.txt +282 -0
  3. data/Manifest.txt +142 -0
  4. data/README.rdoc +55 -0
  5. data/Rakefile +142 -0
  6. data/bin/hello_world_test/Makefile +436 -0
  7. data/bin/hello_world_test/hello_world.cpp +23 -0
  8. data/bin/rad +302 -0
  9. data/lib/examples/add_hysteresis.rb +13 -0
  10. data/lib/examples/basic_blink.rb +10 -0
  11. data/lib/examples/blink_m_address_assignment.rb +104 -0
  12. data/lib/examples/blink_m_hello.rb +14 -0
  13. data/lib/examples/blink_m_multi.rb +61 -0
  14. data/lib/examples/blink_with_serial.rb +16 -0
  15. data/lib/examples/configure_pa_lcd_boot.rb +91 -0
  16. data/lib/examples/debounce_methods.rb +49 -0
  17. data/lib/examples/external_variable_fu.rb +26 -0
  18. data/lib/examples/external_variables.rb +32 -0
  19. data/lib/examples/first_sound.rb +23 -0
  20. data/lib/examples/frequency_generator.rb +30 -0
  21. data/lib/examples/hello_array.rb +48 -0
  22. data/lib/examples/hello_array2.rb +79 -0
  23. data/lib/examples/hello_array_eeprom.rb +59 -0
  24. data/lib/examples/hello_clock.rb +84 -0
  25. data/lib/examples/hello_eeprom.rb +51 -0
  26. data/lib/examples/hello_eeprom_lcdpa.rb +81 -0
  27. data/lib/examples/hello_format_print.rb +94 -0
  28. data/lib/examples/hello_lcd_charset.rb +75 -0
  29. data/lib/examples/hello_pa_lcd.rb +59 -0
  30. data/lib/examples/hello_servos.rb +88 -0
  31. data/lib/examples/hello_spectra_sound.rb +38 -0
  32. data/lib/examples/hello_world.rb +11 -0
  33. data/lib/examples/hello_xbee.rb +12 -0
  34. data/lib/examples/hysteresis_duel.rb +39 -0
  35. data/lib/examples/i2c_with_clock_chip.rb +124 -0
  36. data/lib/examples/midi_beat_box.rb +86 -0
  37. data/lib/examples/midi_scales.rb +94 -0
  38. data/lib/examples/motor_knob.rb +30 -0
  39. data/lib/examples/servo_buttons.rb +23 -0
  40. data/lib/examples/servo_calibrate_continuous.rb +92 -0
  41. data/lib/examples/servo_throttle.rb +40 -0
  42. data/lib/examples/software_serial.rb +10 -0
  43. data/lib/examples/sparkfun_lcd.rb +48 -0
  44. data/lib/examples/spectra_soft_pot.rb +34 -0
  45. data/lib/examples/times_method.rb +8 -0
  46. data/lib/examples/toggle.rb +10 -0
  47. data/lib/examples/twitter.rb +57 -0
  48. data/lib/examples/two_wire.rb +14 -0
  49. data/lib/libraries/AFSoftSerial/AFSoftSerial.cpp +321 -0
  50. data/lib/libraries/AFSoftSerial/AFSoftSerial.h +61 -0
  51. data/lib/libraries/AFSoftSerial/keywords.txt +18 -0
  52. data/lib/libraries/AF_XPort/AF_XPort.cpp +166 -0
  53. data/lib/libraries/AF_XPort/AF_XPort.h +48 -0
  54. data/lib/libraries/DS1307/DS1307.cpp +162 -0
  55. data/lib/libraries/DS1307/DS1307.h +66 -0
  56. data/lib/libraries/DS1307/keywords.txt +18 -0
  57. data/lib/libraries/FrequencyTimer2/FrequencyTimer2.cpp +144 -0
  58. data/lib/libraries/FrequencyTimer2/FrequencyTimer2.h +42 -0
  59. data/lib/libraries/FrequencyTimer2/keywords.txt +22 -0
  60. data/lib/libraries/I2CEEPROM/I2CEEPROM.cpp +120 -0
  61. data/lib/libraries/I2CEEPROM/I2CEEPROM.h +70 -0
  62. data/lib/libraries/I2CEEPROM/keywords.txt +21 -0
  63. data/lib/libraries/LoopTimer/LoopTimer.cpp +35 -0
  64. data/lib/libraries/LoopTimer/LoopTimer.h +34 -0
  65. data/lib/libraries/LoopTimer/keywords.txt +27 -0
  66. data/lib/libraries/OneWire/OneWire.cpp +194 -0
  67. data/lib/libraries/OneWire/OneWire.h +63 -0
  68. data/lib/libraries/OneWire/keywords.txt +35 -0
  69. data/lib/libraries/OneWire/readme.txt +13 -0
  70. data/lib/libraries/SWSerLCDpa/SWSerLCDpa.cpp +296 -0
  71. data/lib/libraries/SWSerLCDpa/SWSerLCDpa.h +69 -0
  72. data/lib/libraries/SWSerLCDsf/SWSerLCDsf.cpp +311 -0
  73. data/lib/libraries/SWSerLCDsf/SWSerLCDsf.h +67 -0
  74. data/lib/libraries/Servo/Servo.cpp +192 -0
  75. data/lib/libraries/Servo/Servo.h +61 -0
  76. data/lib/libraries/Stepper/Stepper.cpp +220 -0
  77. data/lib/libraries/Stepper/Stepper.h +86 -0
  78. data/lib/libraries/Stepper/keywords.txt +28 -0
  79. data/lib/libraries/Wire/Wire.cpp +262 -0
  80. data/lib/libraries/Wire/Wire.h +67 -0
  81. data/lib/libraries/Wire/keywords.txt +31 -0
  82. data/lib/libraries/Wire/twi.h +57 -0
  83. data/lib/libraries/Wire/utility/twi.c +449 -0
  84. data/lib/libraries/Wire/utility/twi.h +57 -0
  85. data/lib/plugins/bitwise_ops.rb +54 -0
  86. data/lib/plugins/blink.rb +25 -0
  87. data/lib/plugins/blink_m.rb +356 -0
  88. data/lib/plugins/debounce.rb +138 -0
  89. data/lib/plugins/debug_output_to_lcd.rb +71 -0
  90. data/lib/plugins/hysteresis.rb +52 -0
  91. data/lib/plugins/input_output_state.rb +84 -0
  92. data/lib/plugins/lcd_padding.rb +58 -0
  93. data/lib/plugins/mem_test.rb +37 -0
  94. data/lib/plugins/midi.rb +60 -0
  95. data/lib/plugins/parallax_ping.rb +50 -0
  96. data/lib/plugins/servo_pulse.rb +31 -0
  97. data/lib/plugins/servo_setup.rb +86 -0
  98. data/lib/plugins/smoother.rb +54 -0
  99. data/lib/plugins/spark_fun_serial_lcd.rb +100 -0
  100. data/lib/plugins/spectra_symbol.rb +79 -0
  101. data/lib/plugins/twitter_connect.rb +145 -0
  102. data/lib/rad.rb +5 -0
  103. data/lib/rad/README.rdoc +5 -0
  104. data/lib/rad/arduino_plugin.rb +246 -0
  105. data/lib/rad/arduino_sketch.rb +627 -0
  106. data/lib/rad/generators/makefile/makefile.erb +243 -0
  107. data/lib/rad/generators/makefile/makefile.rb +38 -0
  108. data/lib/rad/hardware_library.rb +813 -0
  109. data/lib/rad/init.rb +14 -0
  110. data/lib/rad/progressbar.rb +236 -0
  111. data/lib/rad/rad_processor.rb +128 -0
  112. data/lib/rad/rad_rewriter.rb +94 -0
  113. data/lib/rad/rad_type_checker.rb +26 -0
  114. data/lib/rad/sim/arduino_sketch.rb +57 -0
  115. data/lib/rad/sketch_compiler.rb +47 -0
  116. data/lib/rad/tasks/build_and_make.rake +210 -0
  117. data/lib/rad/tasks/rad.rb +2 -0
  118. data/lib/rad/todo.txt +13 -0
  119. data/lib/rad/variable_processing.rb +153 -0
  120. data/lib/rad/version.rb +9 -0
  121. data/scripts/txt2html +67 -0
  122. data/setup.rb +1585 -0
  123. data/spec/examples/hello_world.rb +11 -0
  124. data/spec/examples/serial_motor.rb +12 -0
  125. data/spec/models/arduino_sketch_spec.rb +82 -0
  126. data/spec/models/sketch_compiler_spec.rb +96 -0
  127. data/spec/models/spec_helper.rb +2 -0
  128. data/spec/sim/hello_world_spec.rb +42 -0
  129. data/spec/spec.opts +1 -0
  130. data/test/test_array_processing.rb +179 -0
  131. data/test/test_plugin_loading.rb +151 -0
  132. data/test/test_translation_post_processing.rb +185 -0
  133. data/test/test_variable_processing.rb +238 -0
  134. data/website/examples/assembler_test.rb.html +73 -0
  135. data/website/examples/gps_reader.rb.html +39 -0
  136. data/website/examples/hello_world.rb.html +38 -0
  137. data/website/examples/serial_motor.rb.html +41 -0
  138. data/website/index.html +178 -0
  139. data/website/index.txt +64 -0
  140. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  141. data/website/stylesheets/screen.css +169 -0
  142. data/website/template.rhtml +48 -0
  143. metadata +217 -0
@@ -0,0 +1,23 @@
1
+ #include <WProgram.h>
2
+
3
+ void loop();
4
+ void setup();
5
+ int main();
6
+
7
+ void setup() {
8
+ pinMode(13, OUTPUT);
9
+ }
10
+
11
+ int main() {
12
+ init();
13
+ setup();
14
+ for( ;; ) { loop(); }
15
+ return 0;
16
+ }
17
+
18
+ void loop() {
19
+ digitalWrite( 13, HIGH );
20
+ delay( 500 );
21
+ digitalWrite( 13, LOW );
22
+ delay( 500 );
23
+ }
data/bin/rad ADDED
@@ -0,0 +1,302 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'rubygems'
5
+ rescue LoadError
6
+ # no rubygems to load, so we fail silently
7
+ end
8
+
9
+ require 'optparse'
10
+ require 'fileutils'
11
+ require 'yaml'
12
+ require 'open-uri'
13
+ require 'readline'
14
+
15
+ require File.expand_path(File.dirname(__FILE__)) + "/../lib/rad/version.rb"
16
+ require File.expand_path(File.dirname(__FILE__)) + "/../lib/rad/progressbar.rb"
17
+
18
+ class OptionParser #:nodoc:
19
+
20
+ def self.parse(args)
21
+ # defaults
22
+
23
+ options = {"hardware" => {
24
+ "serial_port" => '/dev/tty.usbserial*',
25
+ "mcu" => "atmega168",
26
+ "physical_reset" => false
27
+ },
28
+ "software" => {
29
+ "arduino_root" => "/Applications/arduino-0012"
30
+ }
31
+ }
32
+
33
+ opts = OptionParser.new do |opts|
34
+
35
+ opts.banner = <<-BANNER
36
+ Build a directory for your RAD Project and install RAD in its vendor sub-directory.
37
+
38
+ Usage: #{File.basename($0)} <sketch_dir_name> <options for config>
39
+ BANNER
40
+
41
+ opts.on("-p", "--port [SERIAL PORT]",
42
+ "Path to your serial port",
43
+ " (default: #{options['hardware']['serial_port']})") do |port|
44
+
45
+ options["hardware"]["serial_port"] = port if port
46
+ end
47
+
48
+ opts.on("-m", "--mcu [PROCESSOR TYPE]",
49
+ "Type of processor on your board",
50
+ " (default: #{options['hardware']['mcu']})") do |port|
51
+
52
+ options["hardware"]["serial_port"] = port if port
53
+ end
54
+
55
+ opts.on("-r", "--reset [RESET REQUIRED]",
56
+ "Require a hardware reset before uploading?",
57
+ " (default: #{options['hardware']['physical_reset']})") do |no_reset|
58
+ options["hardware"]["physical_reset"] = true unless no_reset
59
+ end
60
+
61
+ opts.on("-a", "--arduino [ARDUINO DIR]",
62
+ "Path to your Arduino install",
63
+ " (default: #{options['software']['arduino_root']})") do |arduino|
64
+ options["software"]["arduino_root"] = arduino if arduino
65
+ end
66
+
67
+ opts.on("-v", "--version [VERSION]",
68
+ "RAD version number",
69
+ " (#{Rad::VERSION::STRING})") do
70
+ puts Rad::VERSION::STRING
71
+ exit
72
+ end
73
+
74
+ opts.on_tail("-h", "--help", "Show this message") do
75
+ puts opts
76
+ exit
77
+ end
78
+ end
79
+
80
+ opts.parse!(args)
81
+ [options, opts]
82
+ end
83
+
84
+ end
85
+
86
+
87
+ # home = ENV['HOME'] || ENV['USERPROFILE'] || ENV['HOMEPATH']
88
+ # begin
89
+ # config = YAML::load open(home + "/.rad")
90
+ # rescue
91
+ # config = false
92
+ # end
93
+ #
94
+
95
+
96
+ if ARGV[0] == "install"
97
+ raise "Sorry. Can only install Arduino on Mac OS X. See here for Linux instructions: http://www.arduino.cc/playground/Learning/Linux" unless RUBY_PLATFORM =~ /darwin/
98
+ puts "Downloading arduino-0012 for Mac from Arduino.cc"
99
+ File.open("/Applications/arduino-0012.zip", "w") do |file|
100
+ pbar = nil
101
+ file << open("http://www.arduino.cc/files/arduino-0012-mac.zip",
102
+ :content_length_proc => lambda {|t|
103
+ if t && 0 < t
104
+ pbar = ProgressBar.new(" Progress", t)
105
+ pbar.file_transfer_mode
106
+ end
107
+ },
108
+ :progress_proc => lambda {|s|
109
+ pbar.set s if pbar
110
+ }).read
111
+ pbar.finish
112
+ end
113
+ puts "Unzipping..."
114
+ `cd /Applications; unzip arduino-0012.zip`
115
+ `rm /Applications/arduino-0012.zip`
116
+ puts "installed Arduino here: /Applications/arduino-0012"
117
+ elsif ARGV[0] == "test"
118
+ test_dir = File.expand_path(File.dirname(__FILE__)) + "/../bin/hello_world_test"
119
+ puts "Compiling hello_world.cpp to test your Arduino."
120
+ puts "cd #{test_dir}; make depend; make;"
121
+ `cd #{test_dir}; make depend; make;`
122
+ puts
123
+ puts "Compilation successful."
124
+ puts
125
+ puts "Make sure your Arduino is connected and then hit return."
126
+ Readline::readline('')
127
+
128
+ `cd #{test_dir}; make upload`
129
+
130
+ # find the USB port to make sure the Arduino's actually plugged in
131
+ options, parser = OptionParser.parse(ARGV)
132
+ usb_port = options["hardware"]["serial_port"]
133
+ port_name = usb_port.split("/").last
134
+ port_dir = usb_port.split("/")[0..(usb_port.split("/").length-2)].join("/")
135
+ unless `ls #{port_dir}`.split(/\n/).any?{|d| d.match(/#{port_name}/)}
136
+ puts
137
+ puts "******************************************************"
138
+ puts "*** It looks like your Arduino is not plugged in. ***"
139
+ puts "*** Plug it in and try again. ***"
140
+ puts "*** ***"
141
+ puts "*** NOTE: If your usb port is not /dev/tty.usb* ***"
142
+ puts "*** pass it in to this script with the -p option. ***"
143
+ puts "******************************************************"
144
+ else
145
+ puts
146
+ puts "******************************************************"
147
+ puts "*** Success! ***"
148
+ puts "*** If your Arduino's light starts blinking soon, ***"
149
+ puts "*** then your Arduino environment is ***"
150
+ puts "*** correctly configured. ***"
151
+ puts "*** ***"
152
+ puts "*** Otherwise something is not hooked up properly. ***"
153
+ puts "******************************************************"
154
+ end
155
+ puts
156
+ puts "cleaning up..."
157
+ `rm #{test_dir}/hello_world.hex #{test_dir}/core.a #{test_dir}/hello_world.elf`
158
+ else
159
+ # Handle options:
160
+ options, parser = OptionParser.parse(ARGV)
161
+ sketch_name = ARGV[0]
162
+ parser.parse!(["-h"]) unless sketch_name
163
+
164
+
165
+ # Build vendor/rad:
166
+
167
+ FileUtils.mkdir_p "#{sketch_name}/vendor/rad"
168
+ puts "Successfully created your sketch directory."
169
+
170
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/rad/.", "#{sketch_name}/vendor/rad"
171
+ puts "Installed RAD into #{sketch_name}/vendor/rad"
172
+ puts
173
+
174
+ # Build vendor/libraries:
175
+
176
+ FileUtils.mkdir_p "#{sketch_name}/vendor/libraries"
177
+ puts "Successfully created your libraries directory."
178
+
179
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/DS1307/.", "#{sketch_name}/vendor/libraries/DS1307"
180
+ puts "Installed DS1307 into #{sketch_name}/vendor/libraries"
181
+ puts
182
+
183
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/FrequencyTimer2/.", "#{sketch_name}/vendor/libraries/FrequencyTimer2"
184
+ puts "Installed FrequencyTimer2 into #{sketch_name}/vendor/libraries"
185
+ puts
186
+
187
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/I2CEEPROM/.", "#{sketch_name}/vendor/libraries/I2CEEPROM"
188
+ puts "Installed I2CEEPROM into #{sketch_name}/vendor/libraries"
189
+ puts
190
+
191
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/LoopTimer/.", "#{sketch_name}/vendor/libraries/LoopTimer"
192
+ puts "Installed LoopTimer into #{sketch_name}/vendor/libraries"
193
+ puts
194
+
195
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/OneWire/.", "#{sketch_name}/vendor/libraries/OneWire"
196
+ puts "Installed OneWire into #{sketch_name}/vendor/libraries"
197
+ puts
198
+
199
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/Servo/.", "#{sketch_name}/vendor/libraries/Servo"
200
+ puts "Installed Servo into #{sketch_name}/vendor/libraries"
201
+ puts
202
+
203
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/Stepper/.", "#{sketch_name}/vendor/libraries/Stepper"
204
+ puts "Installed Stepper into #{sketch_name}/vendor/libraries"
205
+ puts
206
+
207
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/SWSerLCDpa/.", "#{sketch_name}/vendor/libraries/SWSerLCDpa"
208
+ puts "Installed SWSerLCDpa into #{sketch_name}/vendor/libraries"
209
+ puts
210
+
211
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/SWSerLCDsf/.", "#{sketch_name}/vendor/libraries/SWSerLCDsf"
212
+ puts "Installed SWSerLCDsf into #{sketch_name}/vendor/libraries"
213
+ puts
214
+
215
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/Wire/.", "#{sketch_name}/vendor/libraries/Wire"
216
+ puts "Installed Wire into #{sketch_name}/vendor/libraries"
217
+ puts
218
+
219
+ # Build examples -- used for basic testing
220
+
221
+ FileUtils.mkdir_p "#{sketch_name}/vendor/libraries"
222
+ puts "Successfully created your examples directory."
223
+
224
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/examples/.", "#{sketch_name}/examples"
225
+ puts "Installed examples into #{sketch_name}/examples"
226
+ puts
227
+
228
+ # Build test -- used testing
229
+
230
+ # FIXME: this should put the tests into the vendor/tests directory instead.
231
+
232
+ # FileUtils.mkdir_p "#{sketch_name}/test"
233
+ # puts "Successfully created your test directory."
234
+ #
235
+ # FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/test/.", "#{sketch_name}/test"
236
+ # puts "Installed tests into #{sketch_name}/test"
237
+ # puts
238
+
239
+ # Build vendor/plugins:
240
+
241
+ FileUtils.mkdir_p "#{sketch_name}/vendor/plugins"
242
+ puts "Successfully created your plugins directory."
243
+
244
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/plugins/.", "#{sketch_name}/vendor/plugins"
245
+ puts "Installed Default plugins into #{sketch_name}/vendor/plugins"
246
+ puts
247
+
248
+ # Add an default sketch directory # needed to run test:compile
249
+
250
+ FileUtils.mkdir_p "#{sketch_name}/#{sketch_name}"
251
+ puts "Successfully created your default sketch directory."
252
+
253
+ # Build sketch files, etc.:
254
+
255
+ FileUtils.touch "#{sketch_name}/#{sketch_name}.rb"
256
+ File.open("#{sketch_name}/#{sketch_name}.rb", "w") do |file|
257
+ file << <<-EOS
258
+ class #{sketch_name.split("_").collect{|c| c.capitalize}.join("")} < ArduinoSketch
259
+
260
+ # looking for hints? check out the examples directory
261
+ # example sketches can be uploaded to your arduino with
262
+ # rake make:upload sketch=examples/hello_world
263
+ # just replace hello_world with other examples
264
+
265
+ def loop
266
+ # your code here
267
+ end
268
+
269
+ end
270
+ EOS
271
+ end
272
+ puts "Added #{sketch_name}/#{sketch_name}.rb"
273
+
274
+ File.open("#{sketch_name}/Rakefile", 'w') do |file|
275
+ file << <<-EOS
276
+ require 'vendor/rad/init.rb'
277
+ EOS
278
+ end
279
+ puts "Added #{sketch_name}/Rakefile"
280
+
281
+ FileUtils.mkdir_p "#{sketch_name}/config"
282
+ puts "Added #{sketch_name}/config"
283
+
284
+ File.open("#{sketch_name}/config/hardware.yml", 'w') do |file|
285
+ file << options["hardware"].to_yaml
286
+ end
287
+ puts "Added #{sketch_name}/config/hardware.yml"
288
+
289
+ File.open("#{sketch_name}/config/software.yml", 'w') do |file|
290
+ file << options["software"].to_yaml
291
+ end
292
+ puts "Added #{sketch_name}/config/software.yml"
293
+
294
+ puts
295
+ puts "Run 'rake -T' inside your sketch dir to learn how to compile and upload it."
296
+
297
+ puts "***************************************************"
298
+ puts "*** Please note: This version supports ***"
299
+ puts "*** Arduino 12 only! ***"
300
+ puts "*** run rad install arduino to upgrade ***"
301
+ puts "***************************************************"
302
+ end
@@ -0,0 +1,13 @@
1
+ class AddHysteresis < ArduinoSketch
2
+
3
+ input_pin 3, :as => :sensor
4
+ output_pin 13, :as => :led
5
+
6
+
7
+ def loop
8
+ reading = add_hysteresis sensor, 8
9
+ blink led, 100 if reading > 100
10
+ blink led, 1000 if reading <= 100
11
+ end
12
+
13
+ end
@@ -0,0 +1,10 @@
1
+ class BasicBlink < ArduinoSketch
2
+ # hello world (uncomment to run)
3
+
4
+ output_pin 13, :as => :led
5
+
6
+ def loop
7
+ blink led, 100
8
+ x = 4
9
+ end
10
+ end
@@ -0,0 +1,104 @@
1
+ class BlinkMAddressAssignment < ArduinoSketch
2
+
3
+ # want to use more than one blink m?
4
+ # since each blink m arrives with the same address,
5
+ # we can't address each one individually
6
+ #
7
+ # so the first thing we need to do is give each one a new address
8
+ # that's the purpose of this sketch
9
+ #
10
+ # install one blinkm at a time
11
+ # a pa_lcd screen makes this easier
12
+ # the screen will start at address ten and increment approximately every
13
+ # four seconds. Pressing during the first four seconds sets the blnikm
14
+ # address to 10, during the next four seconds to 11 and so on
15
+ # difficult without a screen.
16
+ # if you need to, program an led to help with the timing
17
+
18
+
19
+ @blink_m_start_address = 10
20
+ @flag = false
21
+ @addr1 = "10, byte"
22
+ @addr2 = "11, byte"
23
+ @addr3 = "12, byte"
24
+
25
+ output_pin 19, :as => :wire, :device => :i2c, :enable => :true # reminder, true issues wire.begin
26
+ input_pin 7, :as => :button_one, :device => :button
27
+ input_pin 8, :as => :button_two, :device => :button
28
+ input_pin 9, :as => :button_three, :device => :button
29
+
30
+ output_pin 5, :as => :my_lcd, :device => :pa_lcd, :rate => 19200, :clear_screen => :true
31
+
32
+ def setup
33
+ delay 1000
34
+ my_lcd.setxy 0,0, "bienvenue"
35
+ delay 5000
36
+ end
37
+
38
+ def loop
39
+
40
+ if @flag == false
41
+ staging
42
+ else
43
+ test_address
44
+ end
45
+ delay 100
46
+ end
47
+
48
+ def staging
49
+ my_lcd.setxy 0,0, "press button one to"
50
+ my_lcd.setxy 0,1, "set address to "
51
+ my_lcd.print @blink_m_start_address
52
+ my_lcd.setxy 0,2, "or two for status"
53
+ delay 60
54
+ my_lcd.setxy 0,3, " "
55
+ my_lcd.setxy 0,3
56
+ 800.times do |i|
57
+ return 0 if @flag == true
58
+ my_lcd.print "." if i % 50 == 0
59
+ delay 5
60
+ if button_one.read_input
61
+ assign_address
62
+ elsif button_two.read_input
63
+ test_address
64
+ end
65
+ end
66
+ @blink_m_start_address += 1
67
+ end
68
+
69
+ def assign_address
70
+ @flag = true
71
+ my_lcd.clearscr "setting to "
72
+ my_lcd.print @blink_m_start_address
73
+ delay 100
74
+ BlinkM_setAddress @blink_m_start_address
75
+ my_lcd.clearscr "done"
76
+ control_it
77
+ end
78
+
79
+ def control_it
80
+ delay 500
81
+ my_lcd.clearscr "stopping script"
82
+ BlinkM_stopScript @blink_m_start_address
83
+ my_lcd.clearscr "stopping script.."
84
+ delay 500
85
+ my_lcd.clearscr "fade to purple.."
86
+ BlinkM_fadeToRGB(@blink_m_start_address, 0xff,0x00,0xff)
87
+ my_lcd.clearscr "fade to purple"
88
+ delay 500
89
+ BlinkM_fadeToRGB(@blink_m_start_address, 0xff,0x00,0xff)
90
+ end
91
+
92
+
93
+ def test_address
94
+ my_lcd.clearscr
95
+ my_lcd.setxy 0,0, "testing address"
96
+ my_lcd.setxy 0,1
97
+ my_lcd.print blink_m_check_address_message @blink_m_start_address
98
+ delay 5000
99
+ end
100
+
101
+
102
+
103
+
104
+ end