neo_rad 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. checksums.yaml +7 -0
  2. data/History.txt +112 -0
  3. data/License.txt +282 -0
  4. data/Manifest.txt +144 -0
  5. data/README.rdoc +1 -0
  6. data/Rakefile +142 -0
  7. data/bin/rad +302 -0
  8. data/lib/examples/add_hysteresis.rb +13 -0
  9. data/lib/examples/basic_blink.rb +10 -0
  10. data/lib/examples/blink_m_address_assignment.rb +104 -0
  11. data/lib/examples/blink_m_hello.rb +14 -0
  12. data/lib/examples/blink_m_multi.rb +61 -0
  13. data/lib/examples/blink_with_serial.rb +16 -0
  14. data/lib/examples/configure_pa_lcd_boot.rb +91 -0
  15. data/lib/examples/debounce_methods.rb +49 -0
  16. data/lib/examples/external_variable_fu.rb +26 -0
  17. data/lib/examples/external_variables.rb +32 -0
  18. data/lib/examples/first_sound.rb +23 -0
  19. data/lib/examples/frequency_generator.rb +30 -0
  20. data/lib/examples/hello_array.rb +48 -0
  21. data/lib/examples/hello_array2.rb +112 -0
  22. data/lib/examples/hello_array_eeprom.rb +59 -0
  23. data/lib/examples/hello_clock.rb +84 -0
  24. data/lib/examples/hello_eeprom.rb +51 -0
  25. data/lib/examples/hello_eeprom_lcdpa.rb +81 -0
  26. data/lib/examples/hello_format_print.rb +94 -0
  27. data/lib/examples/hello_lcd_charset.rb +75 -0
  28. data/lib/examples/hello_pa_lcd.rb +59 -0
  29. data/lib/examples/hello_servos.rb +88 -0
  30. data/lib/examples/hello_spectra_sound.rb +38 -0
  31. data/lib/examples/hello_world.rb +11 -0
  32. data/lib/examples/hello_xbee.rb +12 -0
  33. data/lib/examples/hysteresis_duel.rb +39 -0
  34. data/lib/examples/i2c_with_clock_chip.rb +124 -0
  35. data/lib/examples/midi_beat_box.rb +86 -0
  36. data/lib/examples/midi_scales.rb +94 -0
  37. data/lib/examples/motor_knob.rb +30 -0
  38. data/lib/examples/servo_buttons.rb +23 -0
  39. data/lib/examples/servo_calibrate_continuous.rb +92 -0
  40. data/lib/examples/servo_throttle.rb +40 -0
  41. data/lib/examples/software_serial.rb +10 -0
  42. data/lib/examples/sparkfun_lcd.rb +48 -0
  43. data/lib/examples/spectra_soft_pot.rb +34 -0
  44. data/lib/examples/times_method.rb +8 -0
  45. data/lib/examples/toggle.rb +10 -0
  46. data/lib/examples/twitter.rb +57 -0
  47. data/lib/examples/two_wire.rb +14 -0
  48. data/lib/libraries/AFSoftSerial/AFSoftSerial.cpp +321 -0
  49. data/lib/libraries/AFSoftSerial/AFSoftSerial.h +61 -0
  50. data/lib/libraries/AFSoftSerial/keywords.txt +18 -0
  51. data/lib/libraries/AF_XPort/AF_XPort.cpp +166 -0
  52. data/lib/libraries/AF_XPort/AF_XPort.h +48 -0
  53. data/lib/libraries/DS1307/DS1307.cpp +162 -0
  54. data/lib/libraries/DS1307/DS1307.h +66 -0
  55. data/lib/libraries/DS1307/keywords.txt +18 -0
  56. data/lib/libraries/FrequencyTimer2/FrequencyTimer2.cpp +144 -0
  57. data/lib/libraries/FrequencyTimer2/FrequencyTimer2.h +42 -0
  58. data/lib/libraries/FrequencyTimer2/keywords.txt +22 -0
  59. data/lib/libraries/I2CEEPROM/I2CEEPROM.cpp +120 -0
  60. data/lib/libraries/I2CEEPROM/I2CEEPROM.h +70 -0
  61. data/lib/libraries/I2CEEPROM/keywords.txt +21 -0
  62. data/lib/libraries/LoopTimer/LoopTimer.cpp +35 -0
  63. data/lib/libraries/LoopTimer/LoopTimer.h +34 -0
  64. data/lib/libraries/LoopTimer/keywords.txt +27 -0
  65. data/lib/libraries/OneWire/OneWire.cpp +194 -0
  66. data/lib/libraries/OneWire/OneWire.h +63 -0
  67. data/lib/libraries/OneWire/keywords.txt +35 -0
  68. data/lib/libraries/OneWire/readme.txt +13 -0
  69. data/lib/libraries/SWSerLCDpa/SWSerLCDpa.cpp +296 -0
  70. data/lib/libraries/SWSerLCDpa/SWSerLCDpa.h +69 -0
  71. data/lib/libraries/SWSerLCDsf/SWSerLCDsf.cpp +311 -0
  72. data/lib/libraries/SWSerLCDsf/SWSerLCDsf.h +67 -0
  73. data/lib/libraries/Servo/Servo.cpp +192 -0
  74. data/lib/libraries/Servo/Servo.h +61 -0
  75. data/lib/libraries/Stepper/Stepper.cpp +220 -0
  76. data/lib/libraries/Stepper/Stepper.h +86 -0
  77. data/lib/libraries/Stepper/keywords.txt +28 -0
  78. data/lib/libraries/Wire/Wire.cpp +262 -0
  79. data/lib/libraries/Wire/Wire.h +67 -0
  80. data/lib/libraries/Wire/keywords.txt +31 -0
  81. data/lib/libraries/Wire/twi.h +57 -0
  82. data/lib/libraries/Wire/utility/twi.c +449 -0
  83. data/lib/libraries/Wire/utility/twi.h +57 -0
  84. data/lib/plugins/bitwise_ops.rb +54 -0
  85. data/lib/plugins/blink.rb +25 -0
  86. data/lib/plugins/blink_m.rb +356 -0
  87. data/lib/plugins/debounce.rb +138 -0
  88. data/lib/plugins/debug_output_to_lcd.rb +71 -0
  89. data/lib/plugins/hysteresis.rb +52 -0
  90. data/lib/plugins/input_output_state.rb +84 -0
  91. data/lib/plugins/lcd_padding.rb +58 -0
  92. data/lib/plugins/mem_test.rb +37 -0
  93. data/lib/plugins/midi.rb +60 -0
  94. data/lib/plugins/parallax_ping.rb +50 -0
  95. data/lib/plugins/servo_pulse.rb +31 -0
  96. data/lib/plugins/servo_setup.rb +86 -0
  97. data/lib/plugins/smoother.rb +54 -0
  98. data/lib/plugins/spark_fun_serial_lcd.rb +100 -0
  99. data/lib/plugins/spectra_symbol.rb +79 -0
  100. data/lib/plugins/twitter_connect.rb +145 -0
  101. data/lib/rad/README.rdoc +5 -0
  102. data/lib/rad/arduino_plugin.rb +246 -0
  103. data/lib/rad/arduino_sketch.rb +628 -0
  104. data/lib/rad/darwin_installer.rb +23 -0
  105. data/lib/rad/generators/makefile/makefile.erb +243 -0
  106. data/lib/rad/generators/makefile/makefile.rb +38 -0
  107. data/lib/rad/hardware_library.rb +813 -0
  108. data/lib/rad/init.rb +15 -0
  109. data/lib/rad/linux_installer.rb +132 -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/lib/rad.rb +5 -0
  122. data/scripts/txt2html +67 -0
  123. data/setup.rb +1585 -0
  124. data/spec/examples/hello_world.rb +11 -0
  125. data/spec/examples/serial_motor.rb +12 -0
  126. data/spec/models/arduino_sketch_spec.rb +82 -0
  127. data/spec/models/sketch_compiler_spec.rb +96 -0
  128. data/spec/models/spec_helper.rb +2 -0
  129. data/spec/sim/hello_world_spec.rb +42 -0
  130. data/spec/spec.opts +1 -0
  131. data/test/hello_world_test/Makefile +436 -0
  132. data/test/hello_world_test/hello_world.cpp +23 -0
  133. data/test/test_array_processing.rb +179 -0
  134. data/test/test_plugin_loading.rb +151 -0
  135. data/test/test_translation_post_processing.rb +185 -0
  136. data/test/test_variable_processing.rb +238 -0
  137. data/website/examples/assembler_test.rb.html +73 -0
  138. data/website/examples/gps_reader.rb.html +39 -0
  139. data/website/examples/hello_world.rb.html +38 -0
  140. data/website/examples/serial_motor.rb.html +41 -0
  141. data/website/index.html +178 -0
  142. data/website/index.txt +64 -0
  143. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  144. data/website/stylesheets/screen.css +169 -0
  145. data/website/template.rhtml +48 -0
  146. metadata +222 -0
data/Rakefile ADDED
@@ -0,0 +1,142 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/rdoctask'
8
+ require 'rake/contrib/rubyforgepublisher'
9
+ require 'fileutils'
10
+ require 'hoe'
11
+
12
+ RAD_ROOT = File.expand_path(File.dirname(__FILE__))
13
+
14
+ begin
15
+ require 'spec/rake/spectask'
16
+ rescue LoadError
17
+ puts 'To use rspec for testing you must install rspec gem:'
18
+ puts '$ sudo gem install rspec'
19
+ exit
20
+ end
21
+
22
+ include FileUtils
23
+ require File.join(File.dirname(__FILE__), 'lib', 'rad', 'version')
24
+
25
+ BIN = "rad"
26
+ AUTHOR = 'Greg Borenstein' # can also be an array of Authors
27
+ EMAIL = "greg@mfdz.com"
28
+ DESCRIPTION = "A framework for programming the Arduino physcial computing platform using Ruby. RAD converts Ruby scripts written using a set of Rails-like conventions and helpers into C source code which can be compiled and run on the Arduino microcontroller."
29
+ GEM_NAME = 'rad' # what ppl will type to install your gem
30
+
31
+ @config_file = "~/.rubyforge/user-config.yml"
32
+ @config = nil
33
+ def rubyforge_username
34
+ unless @config
35
+ begin
36
+ @config = YAML.load(File.read(File.expand_path(@config_file)))
37
+ rescue
38
+ puts <<-EOS
39
+ ERROR: No rubyforge config file found: #{@config_file}"
40
+ Run 'rubyforge setup' to prepare your env for access to Rubyforge
41
+ - See http://newgem.rubyforge.org/rubyforge.html for more details
42
+ EOS
43
+ exit
44
+ end
45
+ end
46
+ @rubyforge_username ||= @config["username"]
47
+ end
48
+
49
+ RUBYFORGE_PROJECT = 'rad' # The unix name for your project
50
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
51
+ DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
52
+
53
+ NAME = "rad"
54
+ REV = nil
55
+ # UNCOMMENT IF REQUIRED:
56
+ # REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
57
+ VERS = Rad::VERSION::STRING + (REV ? ".#{REV}" : "")
58
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']
59
+ RDOC_OPTS = ['--quiet', '--title', 'rad documentation',
60
+ "--opname", "index.html",
61
+ "--line-numbers",
62
+ "--main", "README",
63
+ "--inline-source"]
64
+
65
+ class Hoe
66
+ def extra_deps
67
+ @extra_deps.reject { |x| Array(x).first == 'hoe' }
68
+ end
69
+ end
70
+
71
+ # Generate all the Rake tasks
72
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
73
+ hoe = Hoe.new(GEM_NAME, VERS) do |p|
74
+ p.author = AUTHOR
75
+ p.description = DESCRIPTION
76
+ p.email = EMAIL
77
+ p.summary = DESCRIPTION
78
+ p.url = HOMEPATH
79
+ p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
80
+ p.test_globs = ["test/**/test_*.rb"]
81
+ p.clean_globs |= CLEAN #An array of file patterns to delete on clean.
82
+
83
+ # == Optional
84
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
85
+ p.extra_deps = [ ['RubyToC', '>= 1.0.0'] ]
86
+ #p.spec_extras = {} # A hash of extra values to set in the gemspec.
87
+ end
88
+
89
+ CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\n\n")
90
+ PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
91
+ hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
92
+
93
+ desc 'Generate website files'
94
+ task :website_generate do
95
+ Dir['website/**/*.txt'].each do |txt|
96
+ sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
97
+ end
98
+ end
99
+
100
+ desc 'Upload website files to rubyforge'
101
+ task :website_upload do
102
+ host = "#{rubyforge_username}@rubyforge.org"
103
+ remote_dir = "/var/www/gforge-projects/#{PATH}/"
104
+ local_dir = 'website'
105
+ sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
106
+ end
107
+
108
+ desc 'Generate and upload website files'
109
+ task :website => [:website_generate, :website_upload, :publish_docs]
110
+
111
+ desc 'Release the website and new gem version'
112
+ task :deploy => [:check_version, :website, :release] do
113
+ puts "Remember to create SVN tag:"
114
+ puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
115
+ "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
116
+ puts "Suggested comment:"
117
+ puts "Tagging release #{CHANGES}"
118
+ end
119
+
120
+ desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
121
+ task :local_deploy => [:website_generate, :install_gem]
122
+
123
+ task :check_version do
124
+ unless ENV['VERSION']
125
+ puts 'Must pass a VERSION=x.y.z release version'
126
+ exit
127
+ end
128
+ unless ENV['VERSION'] == VERS
129
+ puts "Please update your version.rb to match the release version, currently #{VERS}"
130
+ exit
131
+ end
132
+ end
133
+
134
+ desc "Run the specs under spec/models"
135
+ Spec::Rake::SpecTask.new do |t|
136
+ t.spec_opts = ['--options', "spec/spec.opts"]
137
+ t.spec_files = FileList['spec/models/*_spec.rb']
138
+ end
139
+
140
+ desc "Default task is to run specs"
141
+ task :default => :spec
142
+
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
+ require File.expand_path(File.dirname(__FILE__)) + "/../lib/rad/linux_installer.rb"
18
+ require File.expand_path(File.dirname(__FILE__)) + "/../lib/rad/darwin_installer.rb"
19
+
20
+ class OptionParser #:nodoc:
21
+
22
+ def self.parse(args)
23
+ # defaults
24
+
25
+ options = {"hardware" => {
26
+ "serial_port" => '/dev/tty.usbserial*',
27
+ "mcu" => "atmega168",
28
+ "physical_reset" => false
29
+ },
30
+ "software" => {
31
+ "arduino_root" => "/Applications/arduino-0012"
32
+ }
33
+ }
34
+
35
+ opts = OptionParser.new do |opts|
36
+
37
+ opts.banner = <<-BANNER
38
+ Build a directory for your RAD Project and install RAD in its vendor sub-directory.
39
+
40
+ Usage: #{File.basename($0)} <sketch_dir_name> <options for config>
41
+ BANNER
42
+
43
+ opts.on("-p", "--port [SERIAL PORT]",
44
+ "Path to your serial port",
45
+ " (default: #{options['hardware']['serial_port']})") do |port|
46
+
47
+ options["hardware"]["serial_port"] = port if port
48
+ end
49
+
50
+ opts.on("-m", "--mcu [PROCESSOR TYPE]",
51
+ "Type of processor on your board",
52
+ " (default: #{options['hardware']['mcu']})") do |port|
53
+
54
+ options["hardware"]["serial_port"] = port if port
55
+ end
56
+
57
+ opts.on("-r", "--reset [RESET REQUIRED]",
58
+ "Require a hardware reset before uploading?",
59
+ " (default: #{options['hardware']['physical_reset']})") do |no_reset|
60
+ options["hardware"]["physical_reset"] = true unless no_reset
61
+ end
62
+
63
+ opts.on("-a", "--arduino [ARDUINO DIR]",
64
+ "Path to your Arduino install",
65
+ " (default: #{options['software']['arduino_root']})") do |arduino|
66
+ options["software"]["arduino_root"] = arduino if arduino
67
+ end
68
+
69
+ opts.on("-v", "--version [VERSION]",
70
+ "RAD version number",
71
+ " (#{Rad::VERSION::STRING})") do
72
+ puts Rad::VERSION::STRING
73
+ exit
74
+ end
75
+
76
+ opts.on_tail("-h", "--help", "Show this message") do
77
+ puts opts
78
+ exit
79
+ end
80
+ end
81
+
82
+ opts.parse!(args)
83
+ [options, opts]
84
+ end
85
+
86
+ end
87
+
88
+
89
+ # home = ENV['HOME'] || ENV['USERPROFILE'] || ENV['HOMEPATH']
90
+ # begin
91
+ # config = YAML::load open(home + "/.rad")
92
+ # rescue
93
+ # config = false
94
+ # end
95
+ #
96
+
97
+
98
+ if ARGV[0] == "install"
99
+
100
+ case RUBY_PLATFORM
101
+ when /linux/
102
+ LinuxInstaller.install!
103
+ when /darwin/
104
+ DarwinInstaller.install!
105
+ else
106
+ raise "Sorry. Can only install Arduino on Mac OS X. See here for Linux instructions: http://www.arduino.cc/playground/Learning/Linux"
107
+ end
108
+
109
+ elsif ARGV[0] == "test"
110
+ test_dir = File.expand_path(File.dirname(__FILE__)) + "/../test/hello_world_test"
111
+ puts "Compiling hello_world.cpp to test your Arduino."
112
+ puts "cd #{test_dir}; make depend; make;"
113
+ `cd #{test_dir}; make depend; make;`
114
+ puts
115
+ puts "Compilation successful."
116
+ puts
117
+ puts "Make sure your Arduino is connected and then hit return."
118
+ Readline::readline('')
119
+
120
+ `cd #{test_dir}; make upload`
121
+
122
+ # find the USB port to make sure the Arduino's actually plugged in
123
+ options, parser = OptionParser.parse(ARGV)
124
+ usb_port = options["hardware"]["serial_port"]
125
+ port_name = usb_port.split("/").last
126
+ port_dir = usb_port.split("/")[0..(usb_port.split("/").length-2)].join("/")
127
+ unless `ls #{port_dir}`.split(/\n/).any?{|d| d.match(/#{port_name}/)}
128
+ puts
129
+ puts "******************************************************"
130
+ puts "*** It looks like your Arduino is not plugged in. ***"
131
+ puts "*** Plug it in and try again. ***"
132
+ puts "*** ***"
133
+ puts "*** NOTE: If your usb port is not /dev/tty.usb* ***"
134
+ puts "*** pass it in to this script with the -p option. ***"
135
+ puts "******************************************************"
136
+ else
137
+ puts
138
+ puts "******************************************************"
139
+ puts "*** Success! ***"
140
+ puts "*** If your Arduino's light starts blinking soon, ***"
141
+ puts "*** then your Arduino environment is ***"
142
+ puts "*** correctly configured. ***"
143
+ puts "*** ***"
144
+ puts "*** Otherwise something is not hooked up properly. ***"
145
+ puts "******************************************************"
146
+ end
147
+ puts
148
+ puts "cleaning up..."
149
+ `rm #{test_dir}/hello_world.hex #{test_dir}/core.a #{test_dir}/hello_world.elf`
150
+ else
151
+ # Handle options:
152
+ options, parser = OptionParser.parse(ARGV)
153
+ sketch_name = ARGV[0]
154
+ parser.parse!(["-h"]) unless sketch_name
155
+
156
+
157
+ # Build vendor/rad:
158
+
159
+ FileUtils.mkdir_p "#{sketch_name}/vendor/rad"
160
+ puts "Successfully created your sketch directory."
161
+
162
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/rad/.", "#{sketch_name}/vendor/rad"
163
+ puts "Installed RAD into #{sketch_name}/vendor/rad"
164
+ puts
165
+
166
+ # Build vendor/libraries:
167
+
168
+ FileUtils.mkdir_p "#{sketch_name}/vendor/libraries"
169
+ puts "Successfully created your libraries directory."
170
+
171
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/AF_XPort/.", "#{sketch_name}/vendor/libraries/AF_XPort"
172
+ puts "Installed AF_XPort into #{sketch_name}/vendor/libraries"
173
+ puts
174
+
175
+ FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/AFSoftSerial/.", "#{sketch_name}/vendor/libraries/AFSoftSerial"
176
+ puts "Installed AFSoftSerial into #{sketch_name}/vendor/libraries"
177
+ puts
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
@@ -0,0 +1,14 @@
1
+ class BlinkMHello < ArduinoSketch
2
+
3
+ # just a scaffolding for blink_m_demo
4
+
5
+ output_pin 19, :as => :wire, :device => :i2c, :enable => :true
6
+
7
+ def loop
8
+
9
+ x = 4
10
+
11
+ end
12
+
13
+
14
+ end
@@ -0,0 +1,61 @@
1
+ class BlinkMMulti < ArduinoSketch
2
+
3
+ # demonstrate control of individual blinkms
4
+ # this assumes the leds have been assigned addresses 10, 11, 12
5
+ # which can be done with blink m address assignment
6
+
7
+ # two ways to address the blinkms, array and individual variables
8
+ @blink_addresses = [10,11,12]
9
+ @addr_all = "0, byte"
10
+ @addr1 = "10, byte"
11
+ @addr2 = "11, byte"
12
+ @addr3 = "12, byte"
13
+
14
+ output_pin 19, :as => :wire, :device => :i2c, :enable => :true # reminder, true issues wire.begin
15
+ input_pin 7, :as => :button_one, :device => :button
16
+ input_pin 8, :as => :button_two, :device => :button
17
+ input_pin 9, :as => :button_three, :device => :button
18
+ input_pin 10, :as => :button_four, :device => :button
19
+
20
+ # display the action on a 4x20 pa_lcd, yours may be 9200 instead of 19,200
21
+
22
+ output_pin 5, :as => :my_lcd, :device => :pa_lcd, :rate => 19200, :clear_screen => :true
23
+
24
+
25
+ def loop
26
+ stop_and_fade(@addr1) if button_one.read_input
27
+ stop_and_fade(@addr2) if button_two.read_input
28
+ stop_and_fade(@addr3) if button_three.read_input
29
+ dance if button_four.read_input
30
+ end
31
+
32
+ def stop_and_fade(addr)
33
+ f = 1 + addr # hack to coerce addr to int
34
+ my_lcd.clearscr
35
+ my_lcd.setxy 0,0, "blinkm # "
36
+ my_lcd.print addr
37
+ delay 700
38
+ BlinkM_stopScript addr
39
+ my_lcd.setxy 0,1, "stopping script.."
40
+ delay 700
41
+ my_lcd.setxy 0,2, "fade to purple.."
42
+ BlinkM_fadeToRGB(addr, 0xff,0x00,0xff)
43
+ end
44
+
45
+ def dance
46
+ BlinkM_setFadeSpeed(@addr_all, 20) # 1-255, with 1 producing the slowest fade
47
+ my_lcd.clearscr
48
+ my_lcd.setxy 0,0, "Do the shimmy.."
49
+ my_lcd.setxy 0,1
50
+ @blink_addresses.each do |a|
51
+ BlinkM_fadeToRGB(a, 1,166,138)
52
+ delay 100
53
+ end
54
+ @blink_addresses.each do |a|
55
+ BlinkM_fadeToRGB(a, 35,0,112)
56
+ delay 100
57
+ end
58
+ end
59
+
60
+
61
+ end
@@ -0,0 +1,16 @@
1
+ class BlinkWithSerial < ArduinoSketch
2
+
3
+ # hello world (uncomment to run)
4
+ @i = "0, long"
5
+
6
+ output_pin 13, :as => :led
7
+
8
+ serial_begin
9
+
10
+ def loop
11
+ @i += 1
12
+ serial_println @i
13
+ blink led, 100
14
+ end
15
+
16
+ end