madrona-rad 0.2.7 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/History.txt +6 -15
  2. data/Manifest.txt +38 -5
  3. data/README.rdoc +19 -7
  4. data/Rakefile +4 -3
  5. data/bin/rad +214 -130
  6. data/lib/examples/basic_blink.rb +10 -0
  7. data/lib/examples/blink_with_serial.rb +16 -0
  8. data/lib/examples/external_variable_fu.rb +21 -19
  9. data/lib/examples/external_variables.rb +0 -3
  10. data/lib/examples/hello_array2.rb +34 -1
  11. data/lib/examples/hello_array_eeprom.rb +4 -6
  12. data/lib/examples/hello_clock.rb +84 -0
  13. data/lib/examples/hello_eeprom.rb +3 -3
  14. data/lib/examples/hello_eeprom_lcdpa.rb +2 -2
  15. data/lib/examples/hello_format_print.rb +94 -0
  16. data/lib/examples/hello_spectra_sound.rb +38 -0
  17. data/lib/examples/hello_world.rb +3 -3
  18. data/lib/examples/hello_xbee.rb +12 -0
  19. data/lib/examples/midi_beat_box.rb +86 -0
  20. data/lib/examples/midi_scales.rb +94 -0
  21. data/lib/examples/servo_throttle.rb +11 -8
  22. data/lib/examples/software_serial.rb +10 -0
  23. data/lib/examples/twitter.rb +57 -0
  24. data/lib/libraries/AFSoftSerial/AFSoftSerial.cpp +321 -0
  25. data/lib/libraries/AFSoftSerial/AFSoftSerial.h +61 -0
  26. data/lib/libraries/{Servo → AFSoftSerial}/keywords.txt +18 -25
  27. data/lib/libraries/AF_XPort/AF_XPort.cpp +166 -0
  28. data/lib/libraries/AF_XPort/AF_XPort.h +48 -0
  29. data/lib/libraries/DS1307/DS1307.cpp +10 -9
  30. data/lib/libraries/DS1307/DS1307.h +6 -4
  31. data/lib/libraries/I2CEEPROM/I2CEEPROM.cpp +120 -0
  32. data/lib/libraries/I2CEEPROM/I2CEEPROM.h +70 -0
  33. data/lib/libraries/I2CEEPROM/keywords.txt +21 -0
  34. data/lib/libraries/LoopTimer/LoopTimer.cpp +35 -0
  35. data/lib/libraries/LoopTimer/LoopTimer.h +34 -0
  36. data/lib/libraries/LoopTimer/keywords.txt +27 -0
  37. data/lib/libraries/SWSerLCDpa/SWSerLCDpa.cpp +42 -48
  38. data/lib/libraries/SWSerLCDpa/SWSerLCDpa.h +11 -12
  39. data/lib/libraries/SWSerLCDsf/SWSerLCDsf.cpp +38 -0
  40. data/lib/libraries/SWSerLCDsf/SWSerLCDsf.h +9 -2
  41. data/lib/plugins/blink.rb +25 -0
  42. data/lib/plugins/blink_m.rb +3 -3
  43. data/lib/plugins/lcd_padding.rb +19 -0
  44. data/lib/plugins/midi.rb +60 -0
  45. data/lib/plugins/parallax_ping.rb +50 -0
  46. data/lib/plugins/servo_setup.rb +1 -1
  47. data/lib/plugins/twitter_connect.rb +145 -0
  48. data/lib/rad/README.rdoc +5 -0
  49. data/lib/rad/arduino_sketch.rb +91 -904
  50. data/lib/rad/darwin_installer.rb +23 -0
  51. data/lib/rad/generators/makefile/makefile.erb +1 -1
  52. data/lib/rad/generators/makefile/makefile.rb +3 -3
  53. data/lib/rad/hardware_library.rb +813 -0
  54. data/lib/rad/init.rb +4 -2
  55. data/lib/rad/linux_installer.rb +132 -0
  56. data/lib/rad/progressbar.rb +236 -0
  57. data/lib/rad/rad_processor.rb +56 -9
  58. data/lib/rad/rad_rewriter.rb +7 -2
  59. data/lib/rad/rad_type_checker.rb +1 -1
  60. data/lib/rad/sketch_compiler.rb +47 -0
  61. data/lib/rad/tasks/build_and_make.rake +41 -48
  62. data/lib/rad/version.rb +2 -2
  63. data/spec/examples/hello_world.rb +11 -0
  64. data/spec/examples/serial_motor.rb +12 -0
  65. data/spec/models/sketch_compiler_spec.rb +96 -0
  66. data/spec/sim/hello_world_spec.rb +0 -0
  67. data/test/hello_world_test/Makefile +436 -0
  68. data/test/hello_world_test/hello_world.cpp +23 -0
  69. data/test/test_array_processing.rb +1 -1
  70. data/test/test_plugin_loading.rb +1 -1
  71. data/test/test_translation_post_processing.rb +14 -70
  72. metadata +52 -39
  73. data/lib/examples/orig_servo_throttle.rb +0 -39
  74. data/lib/plugins/i2c_eeprom.rb +0 -70
data/History.txt CHANGED
@@ -1,19 +1,10 @@
1
- == 0.2.7 2008-07-31
2
- * Forcing gem build
1
+ == 0.3.5 2009-08-16
2
+ - added support for ruby 1.9 with help of Zen Spider
3
3
 
4
- == 0.2.6 2008-07-30
5
- * Tres grand update:
6
- - added support for spectra_soft_pots
7
- - added support and examples for blinkMs
8
- - added multi sensor hysteresis -- formerly one sensor only
9
- - added testing for plugin loading
10
- - external arrays now have cool instance style plus
11
- - drop down the metal style declarations
12
- - iteration on external arrays now works. internal still problematic
13
- - defines now work handily
14
- - numerous lcd library changes plus enhancements: setxy 0,1, "print_something"
15
- - lots of examples
16
- - and much more
4
+ == 0.3.0 2008-09-22
5
+ * Pushing to rubyforge..
6
+ - added rad install arduino
7
+ - added rad test arduino
17
8
 
18
9
  == 0.2.5 2008-07-21
19
10
  * 1ish large post Bastille Day update:
data/Manifest.txt CHANGED
@@ -5,9 +5,11 @@ README.rdoc
5
5
  Rakefile
6
6
  bin/rad
7
7
  lib/examples/add_hysteresis.rb
8
+ lib/examples/basic_blink.rb
8
9
  lib/examples/blink_m_address_assignment.rb
9
10
  lib/examples/blink_m_hello.rb
10
11
  lib/examples/blink_m_multi.rb
12
+ lib/examples/blink_with_serial.rb
11
13
  lib/examples/configure_pa_lcd_boot.rb
12
14
  lib/examples/debounce_methods.rb
13
15
  lib/examples/external_variable_fu.rb
@@ -17,30 +19,48 @@ lib/examples/frequency_generator.rb
17
19
  lib/examples/hello_array.rb
18
20
  lib/examples/hello_array2.rb
19
21
  lib/examples/hello_array_eeprom.rb
22
+ lib/examples/hello_clock.rb
20
23
  lib/examples/hello_eeprom.rb
21
24
  lib/examples/hello_eeprom_lcdpa.rb
25
+ lib/examples/hello_format_print.rb
22
26
  lib/examples/hello_lcd_charset.rb
23
27
  lib/examples/hello_pa_lcd.rb
24
28
  lib/examples/hello_servos.rb
29
+ lib/examples/hello_spectra_sound.rb
25
30
  lib/examples/hello_world.rb
31
+ lib/examples/hello_xbee.rb
26
32
  lib/examples/hysteresis_duel.rb
27
33
  lib/examples/i2c_with_clock_chip.rb
34
+ lib/examples/midi_beat_box.rb
35
+ lib/examples/midi_scales.rb
28
36
  lib/examples/motor_knob.rb
29
- lib/examples/orig_servo_throttle.rb
30
37
  lib/examples/servo_buttons.rb
31
38
  lib/examples/servo_calibrate_continuous.rb
32
39
  lib/examples/servo_throttle.rb
40
+ lib/examples/software_serial.rb
33
41
  lib/examples/sparkfun_lcd.rb
34
42
  lib/examples/spectra_soft_pot.rb
35
43
  lib/examples/times_method.rb
36
44
  lib/examples/toggle.rb
45
+ lib/examples/twitter.rb
37
46
  lib/examples/two_wire.rb
47
+ lib/libraries/AFSoftSerial/AFSoftSerial.cpp
48
+ lib/libraries/AFSoftSerial/AFSoftSerial.h
49
+ lib/libraries/AFSoftSerial/keywords.txt
50
+ lib/libraries/AF_XPort/AF_XPort.cpp
51
+ lib/libraries/AF_XPort/AF_XPort.h
38
52
  lib/libraries/DS1307/DS1307.cpp
39
53
  lib/libraries/DS1307/DS1307.h
40
54
  lib/libraries/DS1307/keywords.txt
41
55
  lib/libraries/FrequencyTimer2/FrequencyTimer2.cpp
42
56
  lib/libraries/FrequencyTimer2/FrequencyTimer2.h
43
57
  lib/libraries/FrequencyTimer2/keywords.txt
58
+ lib/libraries/I2CEEPROM/I2CEEPROM.cpp
59
+ lib/libraries/I2CEEPROM/I2CEEPROM.h
60
+ lib/libraries/I2CEEPROM/keywords.txt
61
+ lib/libraries/LoopTimer/LoopTimer.cpp
62
+ lib/libraries/LoopTimer/LoopTimer.h
63
+ lib/libraries/LoopTimer/keywords.txt
44
64
  lib/libraries/OneWire/OneWire.cpp
45
65
  lib/libraries/OneWire/OneWire.h
46
66
  lib/libraries/OneWire/keywords.txt
@@ -51,7 +71,6 @@ lib/libraries/SWSerLCDsf/SWSerLCDsf.cpp
51
71
  lib/libraries/SWSerLCDsf/SWSerLCDsf.h
52
72
  lib/libraries/Servo/Servo.cpp
53
73
  lib/libraries/Servo/Servo.h
54
- lib/libraries/Servo/keywords.txt
55
74
  lib/libraries/Stepper/Stepper.cpp
56
75
  lib/libraries/Stepper/Stepper.h
57
76
  lib/libraries/Stepper/keywords.txt
@@ -62,40 +81,54 @@ lib/libraries/Wire/twi.h
62
81
  lib/libraries/Wire/utility/twi.c
63
82
  lib/libraries/Wire/utility/twi.h
64
83
  lib/plugins/bitwise_ops.rb
84
+ lib/plugins/blink.rb
65
85
  lib/plugins/blink_m.rb
66
86
  lib/plugins/debounce.rb
67
87
  lib/plugins/debug_output_to_lcd.rb
68
88
  lib/plugins/hysteresis.rb
69
- lib/plugins/i2c_eeprom.rb
70
89
  lib/plugins/input_output_state.rb
71
90
  lib/plugins/lcd_padding.rb
72
91
  lib/plugins/mem_test.rb
92
+ lib/plugins/midi.rb
93
+ lib/plugins/parallax_ping.rb
73
94
  lib/plugins/servo_pulse.rb
74
95
  lib/plugins/servo_setup.rb
75
96
  lib/plugins/smoother.rb
76
97
  lib/plugins/spark_fun_serial_lcd.rb
77
98
  lib/plugins/spectra_symbol.rb
99
+ lib/plugins/twitter_connect.rb
78
100
  lib/rad.rb
101
+ lib/rad/README.rdoc
79
102
  lib/rad/arduino_plugin.rb
80
103
  lib/rad/arduino_sketch.rb
104
+ lib/rad/darwin_installer.rb
81
105
  lib/rad/generators/makefile/makefile.erb
82
106
  lib/rad/generators/makefile/makefile.rb
107
+ lib/rad/hardware_library.rb
83
108
  lib/rad/init.rb
109
+ lib/rad/linux_installer.rb
110
+ lib/rad/progressbar.rb
84
111
  lib/rad/rad_processor.rb
85
112
  lib/rad/rad_rewriter.rb
86
113
  lib/rad/rad_type_checker.rb
87
114
  lib/rad/sim/arduino_sketch.rb
115
+ lib/rad/sketch_compiler.rb
88
116
  lib/rad/tasks/build_and_make.rake
89
- lib/rad/developer.rake
90
117
  lib/rad/tasks/rad.rb
91
118
  lib/rad/todo.txt
92
119
  lib/rad/variable_processing.rb
93
120
  lib/rad/version.rb
94
121
  scripts/txt2html
95
122
  setup.rb
96
- spec/models/spec_helper.rb
123
+ spec/examples/hello_world.rb
124
+ spec/examples/serial_motor.rb
97
125
  spec/models/arduino_sketch_spec.rb
126
+ spec/models/sketch_compiler_spec.rb
127
+ spec/models/spec_helper.rb
128
+ spec/sim/hello_world_spec.rb
98
129
  spec/spec.opts
130
+ test/hello_world_test/Makefile
131
+ test/hello_world_test/hello_world.cpp
99
132
  test/test_array_processing.rb
100
133
  test/test_plugin_loading.rb
101
134
  test/test_translation_post_processing.rb
data/README.rdoc CHANGED
@@ -1,6 +1,6 @@
1
1
  =Welcome to RAD (Ruby Arduino Development)
2
2
 
3
- RAD is 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. It also provides a set of Rake tasks for automating the compilation and upload process.
3
+ RAD is 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. It also provides a set of Rake tasks for automating the compilation and upload process.
4
4
 
5
5
  For a full introduction see http://rad.rubyforge.org
6
6
 
@@ -12,22 +12,26 @@ See also the Arduino Software reference: http://www.arduino.cc/en/Reference/Home
12
12
 
13
13
  ==Examples
14
14
 
15
- See the examples directory for lots of examples of RAD in action: http://rad.rubyforge.org/examples
16
- Madrona Fork Screencast is here: http://www.vimeo.com/1272402
17
- Occasional commentary here: http://senplicity.wordpress.com/
15
+ See the examples directory for lots of examples of RAD in action:
16
+ http://github.com/atduskgreg/rad/tree/master/lib/examples
17
+
18
+ The atduskgreg/rad wiki also contains a growing library of examples and hardware tutorials:
19
+ http://github.com/atduskgreg/rad/wikis
18
20
 
19
21
  ==Getting Started
20
22
 
21
- To install the madrona fork gem:
23
+ To install the edge gem:
22
24
 
23
- $ Update to RubyGems 1.2.0 before proceeding!!
25
+ # Update to RubyGems 1.2.0 before proceeding!
24
26
  $ gem sources -a http://gems.github.com (you only have to do this once)
25
27
  $ sudo gem install madrona-rad
26
28
 
27
- To install the original rad:
29
+ A very old and feature poor (though slightly more 'stable' RAD) is available from RubyGems:
28
30
 
29
31
  $ sudo gem install rad
30
32
 
33
+ We plan to push tagged releases to RubyGems at key points. The 0.3 release should be coming up soon.
34
+
31
35
  Run the rad command to create a new project:
32
36
 
33
37
  $ rad my_project
@@ -46,6 +50,14 @@ Attach your Arduino and use rake to complile and upload your sketch:
46
50
 
47
51
  $ rake make:upload
48
52
 
53
+ ==Installing the Arduino Software
54
+
55
+ Installing RAD and the Arduino software on Linux can be a little more difficult than on OS X. Thankfully, the RAD command line tool can help. Run:
56
+
57
+ $ rad install arduino
58
+
59
+ And RAD will do its best to get the Arduino software installed on your system.
60
+
49
61
  ==Get Involved
50
62
 
51
63
  Cheers? Jeers? Wanna help out? Contact Greg Borenstein: greg [dot] borenstein [at] gmail [dot] com
data/Rakefile CHANGED
@@ -9,9 +9,10 @@ require 'rake/contrib/rubyforgepublisher'
9
9
  require 'fileutils'
10
10
  require 'hoe'
11
11
 
12
- RAD_ROOT = File.expand_path(File.dirname(__FILE__))
12
+ $: << "../lib/" # HACK while I work out r2c/rad incompatibilities
13
+ # gem "RubyToC" # HACK to deal with rubygems beta version activation bug
13
14
 
14
- load "#{RAD_ROOT}/project_dev.rake"
15
+ RAD_ROOT = File.expand_path(File.dirname(__FILE__))
15
16
 
16
17
  begin
17
18
  require 'spec/rake/spectask'
@@ -84,7 +85,7 @@ hoe = Hoe.new(GEM_NAME, VERS) do |p|
84
85
 
85
86
  # == Optional
86
87
  p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
87
- p.extra_deps = [ ['RubyToC', '>= 1.0.0'] ]
88
+ p.extra_deps = [ ['ruby2c', '>= 1.0.0.6'] ]
88
89
  #p.spec_extras = {} # A hash of extra values to set in the gemspec.
89
90
  end
90
91
 
data/bin/rad CHANGED
@@ -9,8 +9,13 @@ end
9
9
  require 'optparse'
10
10
  require 'fileutils'
11
11
  require 'yaml'
12
+ require 'open-uri'
13
+ require 'readline'
12
14
 
13
-
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"
14
19
 
15
20
  class OptionParser #:nodoc:
16
21
 
@@ -23,7 +28,7 @@ class OptionParser #:nodoc:
23
28
  "physical_reset" => false
24
29
  },
25
30
  "software" => {
26
- "arduino_root" => "/Applications/arduino-0011"
31
+ "arduino_root" => "/Applications/arduino-0012"
27
32
  }
28
33
  }
29
34
 
@@ -60,6 +65,13 @@ Usage: #{File.basename($0)} <sketch_dir_name> <options for config>
60
65
  " (default: #{options['software']['arduino_root']})") do |arduino|
61
66
  options["software"]["arduino_root"] = arduino if arduino
62
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
63
75
 
64
76
  opts.on_tail("-h", "--help", "Show this message") do
65
77
  puts opts
@@ -83,136 +95,208 @@ end
83
95
  #
84
96
 
85
97
 
86
- # Handle options:
87
- options, parser = OptionParser.parse(ARGV)
88
- sketch_name = ARGV[0]
89
- parser.parse!(["-h"]) unless sketch_name
98
+ if ARGV[0] == "install"
90
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
91
108
 
92
- # Build vendor/rad:
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('')
93
119
 
94
- FileUtils.mkdir_p "#{sketch_name}/vendor/rad"
95
- puts "Successfully created your sketch directory."
96
-
97
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/rad/.", "#{sketch_name}/vendor/rad"
98
- puts "Installed RAD into #{sketch_name}/vendor/rad"
99
- puts
100
-
101
- # Build vendor/libraries:
102
-
103
- FileUtils.mkdir_p "#{sketch_name}/vendor/libraries"
104
- puts "Successfully created your libraries directory."
105
-
106
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/DS1307/.", "#{sketch_name}/vendor/libraries/DS1307"
107
- puts "Installed DS1307 into #{sketch_name}/vendor/libraries"
108
- puts
109
-
110
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/FrequencyTimer2/.", "#{sketch_name}/vendor/libraries/FrequencyTimer2"
111
- puts "Installed FrequencyTimer2 into #{sketch_name}/vendor/libraries"
112
- puts
113
-
114
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/OneWire/.", "#{sketch_name}/vendor/libraries/OneWire"
115
- puts "Installed OneWire into #{sketch_name}/vendor/libraries"
116
- puts
117
-
118
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/Servo/.", "#{sketch_name}/vendor/libraries/Servo"
119
- puts "Installed Servo into #{sketch_name}/vendor/libraries"
120
- puts
121
-
122
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/Stepper/.", "#{sketch_name}/vendor/libraries/Stepper"
123
- puts "Installed Stepper into #{sketch_name}/vendor/libraries"
124
- puts
125
-
126
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/SWSerLCDpa/.", "#{sketch_name}/vendor/libraries/SWSerLCDpa"
127
- puts "Installed SWSerLCDpa into #{sketch_name}/vendor/libraries"
128
- puts
129
-
130
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/SWSerLCDsf/.", "#{sketch_name}/vendor/libraries/SWSerLCDsf"
131
- puts "Installed SWSerLCDsf into #{sketch_name}/vendor/libraries"
132
- puts
133
-
134
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/Stepper/.", "#{sketch_name}/vendor/libraries/Stepper"
135
- puts "Installed Stepper into #{sketch_name}/vendor/libraries"
136
- puts
137
-
138
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/libraries/Wire/.", "#{sketch_name}/vendor/libraries/Wire"
139
- puts "Installed Wire into #{sketch_name}/vendor/libraries"
140
- puts
141
-
142
- # Build examples -- used for basic testing
143
-
144
- FileUtils.mkdir_p "#{sketch_name}/vendor/libraries"
145
- puts "Successfully created your examples directory."
146
-
147
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/examples/.", "#{sketch_name}/examples"
148
- puts "Installed examples into #{sketch_name}/examples"
149
- puts
150
-
151
- # Build test -- used testing
152
-
153
- # FIXME: this should put the tests into the vendor/tests directory instead.
154
-
155
- # FileUtils.mkdir_p "#{sketch_name}/test"
156
- # puts "Successfully created your test directory."
157
- #
158
- # FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/test/.", "#{sketch_name}/test"
159
- # puts "Installed tests into #{sketch_name}/test"
160
- # puts
161
-
162
- # Build vendor/plugins:
163
-
164
- FileUtils.mkdir_p "#{sketch_name}/vendor/plugins"
165
- puts "Successfully created your plugins directory."
166
-
167
- FileUtils.cp_r "#{File.dirname(__FILE__)}/../lib/plugins/.", "#{sketch_name}/vendor/plugins"
168
- puts "Installed Default plugins into #{sketch_name}/vendor/plugins"
169
- puts
170
-
171
- # Add an default sketch directory # needed to run test:compile
172
-
173
- FileUtils.mkdir_p "#{sketch_name}/#{sketch_name}"
174
- puts "Successfully created your default sketch directory."
175
-
176
- # Build sketch files, etc.:
177
-
178
- FileUtils.touch "#{sketch_name}/#{sketch_name}.rb"
179
- File.open("#{sketch_name}/#{sketch_name}.rb", "w") do |file|
180
- file << <<-EOS
181
- class #{sketch_name.split("_").collect{|c| c.capitalize}.join("")} < ArduinoSketch
182
-
183
- # looking for hints? check out the examples directory
184
- # example sketches can be uploaded to your arduino with
185
- # rake make:upload sketch=examples/hello_world
186
- # just replace hello_world with other examples
187
-
188
- def loop
189
- # your code here
190
- end
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
191
155
 
192
- end
193
- EOS
194
- end
195
- puts "Added #{sketch_name}/#{sketch_name}.rb"
196
-
197
- File.open("#{sketch_name}/Rakefile", 'w') do |file|
198
- file << <<-EOS
199
- require 'vendor/rad/init.rb'
200
- EOS
201
- end
202
- puts "Added #{sketch_name}/Rakefile"
203
-
204
- FileUtils.mkdir_p "#{sketch_name}/config"
205
- puts "Added #{sketch_name}/config"
206
-
207
- File.open("#{sketch_name}/config/hardware.yml", 'w') do |file|
208
- file << options["hardware"].to_yaml
209
- end
210
- puts "Added #{sketch_name}/config/hardware.yml"
211
-
212
- File.open("#{sketch_name}/config/software.yml", 'w') do |file|
213
- file << options["software"].to_yaml
214
- end
215
- puts "Added #{sketch_name}/config/software.yml"
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
216
174
 
217
- puts
218
- puts "Run 'rake -T' inside your sketch dir to learn how to compile and upload it."
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