atduskgreg-rad 0.2.5

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