rad 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,14 @@
1
+ == 0.2.0 2008-03-15
2
+ * 8ish updates, some major:
3
+ * fixed regular serial support
4
+ * class method for writing functions in assembler
5
+ * applied Scott Windsor's patch for software serial support
6
+ * added support for HIGH/LOW/ON/OFF constants
7
+ * add an option for skipping the reset prompt on rake make:upload
8
+ * changed default arduino location to be more realistic
9
+ * put screencasts #1 and #2 on rad.rubyforge.org
10
+ * put google analytics on rad.rubyforge.org
11
+
1
12
  == 0.1.1 2007-10-29
2
13
  * 2 major fixes:
3
14
  * explicitly specify path to arduino avr tools (this was broken on systems that didn't have the avr toolchain installed, oops)
data/bin/rad CHANGED
@@ -54,13 +54,14 @@ File.open("#{sketch_name}/config/hardware.yml", 'w') do |file|
54
54
  file << <<-EOS
55
55
  serial_port: /dev/tty.usbserial*
56
56
  mcu: atmega168
57
+ physical_reset: false
57
58
  EOS
58
59
  end
59
60
  puts "Added #{sketch_name}/config/hardware.yml"
60
61
 
61
62
  File.open("#{sketch_name}/config/software.yml", 'w') do |file|
62
63
  file << <<-EOS
63
- arduino_root: /Applications/arduino/arduino-0010
64
+ arduino_root: /Applications/arduino-0010
64
65
  EOS
65
66
  end
66
67
  puts "Added #{sketch_name}/config/software.yml"
@@ -1,13 +1,10 @@
1
- # TOOD:
2
- # ON and OFF
3
- # HIGH and LOW
4
-
5
1
  class ArduinoSketch
6
2
  def initialize
7
3
  @declarations = []
8
4
  @pin_modes = {:output => [], :input => []}
9
5
  @pullups = []
10
6
  @other_setup = [] # specifically, Serial.begin
7
+ @assembler_declarations = []
11
8
  @accessors = []
12
9
  @signatures = ["void blink();", "int main();"]
13
10
 
@@ -21,6 +18,37 @@ class ArduinoSketch
21
18
  @helper_methods = helper_methods.join( "\n" )
22
19
  end
23
20
 
21
+ def vars(opts={})
22
+ opts.each do |k,v|
23
+ if v.class == Symbol
24
+ @declarations << "#{v} _#{k};"
25
+ @accessors << <<-CODE
26
+ #{v} #{k}(){
27
+ \treturn _#{k};
28
+ }
29
+ CODE
30
+ else
31
+ type = case v
32
+ when Integer
33
+ "int"
34
+ when String
35
+ "char*"
36
+ when TrueClass
37
+ "bool"
38
+ when FalseClass
39
+ "bool"
40
+ end
41
+ #vars need to be underscored...accessors not
42
+ @declarations << "#{type} _#{k} = #{v};"
43
+ @accessors << <<-CODE
44
+ #{type} #{k}(){
45
+ \treturn _#{k};
46
+ }
47
+ CODE
48
+ end
49
+ end
50
+ end
51
+
24
52
  def output_pin(num, opts={})
25
53
  raise ArgumentError, "can only define pin from Fixnum, got #{num.class}" unless num.is_a?(Fixnum)
26
54
  @pin_modes[:output] << num
@@ -73,6 +101,39 @@ class ArduinoSketch
73
101
  @other_setup << "Serial.begin(#{rate});"
74
102
  end
75
103
 
104
+ def software_serial(rx, tx, opts={})
105
+ raise ArgumentError, "can only define rx from Fixnum, got #{rx.class}" unless rx.is_a?(Fixnum)
106
+ raise ArgumentError, "can only define tx from Fixnum, got #{tx.class}" unless tx.is_a?(Fixnum)
107
+
108
+ rate = opts[:rate] ? opts[:rate] : 9600
109
+ if opts[:as]
110
+ @declarations << "SoftwareSerial _#{opts[ :as ]} = SoftwareSerial(#{rx}, #{tx});"
111
+ accessor = []
112
+ accessor << "SoftwareSerial& #{opts[ :as ]}() {"
113
+ accessor << "\treturn _#{opts[ :as ]};"
114
+ accessor << "}"
115
+ accessor << "int read(SoftwareSerial& s) {"
116
+ accessor << "\treturn s.read();"
117
+ accessor << "}"
118
+ accessor << "void println( SoftwareSerial& s, char* str ) {"
119
+ accessor << "\treturn s.println( str );"
120
+ accessor << "}"
121
+ accessor << "void print( SoftwareSerial& s, char* str ) {"
122
+ accessor << "\treturn s.print( str );"
123
+ accessor << "}"
124
+ accessor << "void println( SoftwareSerial& s, int i ) {"
125
+ accessor << "\treturn s.println( i );"
126
+ accessor << "}"
127
+ accessor << "void print( SoftwareSerial& s, int i ) {"
128
+ accessor << "\treturn s.print( i );"
129
+ accessor << "}"
130
+ @accessors << accessor.join( "\n" )
131
+
132
+ @signatures << "SoftwareSerial& #{opts[ :as ]}();"
133
+
134
+ @other_setup << "_#{opts[ :as ]}.begin(#{rate});"
135
+ end
136
+ end
76
137
 
77
138
  def compose_setup # also composes headers and signatures
78
139
  result = []
@@ -80,6 +141,7 @@ class ArduinoSketch
80
141
  result << comment_box( "Auto-generated by RAD" )
81
142
 
82
143
  result << "#include <WProgram.h>\n"
144
+ result << "#include <SoftwareSerial.h>\n"
83
145
 
84
146
  result << comment_box( 'method signatures' )
85
147
  result << "void loop();"
@@ -91,6 +153,15 @@ class ArduinoSketch
91
153
  result << "" # blank line
92
154
  @accessors.each {|ac| result << ac}
93
155
 
156
+ result << "\n" + comment_box( "assembler declarations" )
157
+ unless @assembler_declarations.empty?
158
+ result << <<-CODE
159
+ extern "C" {
160
+ #{@assembler_declarations.join("\n")}
161
+ }
162
+ CODE
163
+ end
164
+
94
165
  result << "\n" + comment_box( "setup" )
95
166
  result << "void setup() {"
96
167
  result << "\t// pin modes"
@@ -102,7 +173,7 @@ class ArduinoSketch
102
173
  end
103
174
 
104
175
  @pullups.each do |pin|
105
- result << "\tdigitalWrite( #{pin}, HIGH ); // enable pull-up resistor for input"
176
+ result << "\tdigitalWrite( #{pin}, HIGH ); // enable pull-up resistor for input"
106
177
  end
107
178
 
108
179
  unless @other_setup.empty?
@@ -132,32 +203,71 @@ class ArduinoSketch
132
203
  return result.join( "\n" )
133
204
  end
134
205
 
206
+ def assembler(name, declaration, code)
207
+ @assembler_declarations << declaration
208
+ assembler_code = <<-CODE
209
+ .file "#{name}.S"
210
+ .arch #{Makefile.hardware_params['mcu']}
211
+ .global __do_copy_data
212
+ .global __do_clear_bss
213
+ .text
214
+ .global #{name}
215
+ .type #{name}, @function
216
+ #{code}
217
+ CODE
218
+
219
+ File.open(File.expand_path("#{RAD_ROOT}") + "/#{PROJECT_DIR_NAME}/#{name}.S", "w"){|f| f << assembler_code}
220
+ end
221
+
222
+ def self.pre_process(sketch_string)
223
+ result = sketch_string
224
+ result.gsub!("HIGH", "1")
225
+ result.gsub!("LOW", "0")
226
+ result.gsub!("ON", "1")
227
+ result.gsub!("OFF", "0")
228
+ result
229
+ end
230
+
135
231
  private
136
232
 
137
233
  def serial_boilerplate
138
- # TODO:
139
- # serial_print and serial_println need signatures for every combination of argument options
140
234
  out = []
141
235
  out << "int serial_available() {"
142
236
  out << "\treturn (Serial.available() > 0);"
143
237
  out << "}"
144
238
 
145
- out << "int serial_read() {"
146
- out << "\treturn Serial.read();"
239
+ out << "char serial_read() {"
240
+ out << "\treturn (char) Serial.read();"
147
241
  out << "}"
148
242
 
149
243
  out << "void serial_flush() {"
150
244
  out << "\treturn Serial.flush();"
151
245
  out << "}"
152
246
 
153
- out << "void serial_print_str( char* str ) {"
247
+ out << "void serial_print( char str ) {"
248
+ out << "\treturn Serial.print( str );"
249
+ out << "}"
250
+
251
+ out << "void serial_print( char* str ) {"
154
252
  out << "\treturn Serial.print( str );"
155
253
  out << "}"
254
+
255
+ out << "void serial_print( int i ) {"
256
+ out << "\treturn Serial.print( i );"
257
+ out << "}"
258
+
259
+ out << "void serial_println( char* str ) {"
260
+ out << "\treturn Serial.println( str );"
261
+ out << "}"
262
+
263
+ out << "void serial_println( char str ) {"
264
+ out << "\treturn Serial.println( str );"
265
+ out << "}"
266
+
267
+ out << "void serial_println( int i ) {"
268
+ out << "\treturn Serial.println( i );"
269
+ out << "}"
156
270
 
157
- # void serial_print()
158
- # void serial_println()
159
- # Serial.print(data)
160
- # Serial.println(data)
161
271
  return out.join( "\n" )
162
272
  end
163
273
 
@@ -63,12 +63,14 @@
63
63
  PORT = <%= params['serial_port'] %>
64
64
  TARGET = <%= params['target'] %>
65
65
  ARDUINO = <%= params['arduino_root'] %>/hardware/cores/arduino
66
+ SOFTWARE_SERIAL = <%= params['arduino_root'] %>/hardware/libraries/SoftwareSerial
66
67
  SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
67
68
  $(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \
68
69
  $(ARDUINO)/wiring_pulse.c $(ARDUINO)/wiring_serial.c \
69
70
  $(ARDUINO)/wiring_shift.c $(ARDUINO)/WInterrupts.c
70
- CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(ARDUINO)/WRandom.cpp
71
+ CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(ARDUINO)/WRandom.cpp $(SOFTWARE_SERIAL)/SoftwareSerial.cpp
71
72
  MCU = <%= params['mcu'] %>
73
+ <% if params['asm_files'] %>ASRC = <%= params['asm_files'].join(' ') %><% end %>
72
74
  F_CPU = 16000000
73
75
  FORMAT = ihex
74
76
  UPLOAD_RATE = 19200
@@ -89,8 +91,8 @@ CDEFS = -DF_CPU=$(F_CPU)
89
91
  CXXDEFS = -DF_CPU=$(F_CPU)
90
92
 
91
93
  # Place -I options here
92
- CINCS = -I$(ARDUINO)
93
- CXXINCS = -I$(ARDUINO)
94
+ CINCS = -I$(ARDUINO) -I$(SOFTWARE_SERIAL)
95
+ +CXXINCS = -I$(ARDUINO) -I$(SOFTWARE_SERIAL)
94
96
 
95
97
  # Compiler flag to set the C Standard level.
96
98
  # c89 - "ANSI" C
@@ -8,6 +8,8 @@ class Makefile
8
8
  params = hardware_params.merge software_params
9
9
  params['target'] = sketch_name
10
10
 
11
+ params['asm_files'] = Dir.entries( File.expand_path(RAD_ROOT) + "/" + PROJECT_DIR_NAME ).select{|e| e =~ /\.S/}
12
+
11
13
  e = ERB.new File.read("#{File.dirname(__FILE__)}/makefile.erb")
12
14
 
13
15
  File.open("#{RAD_ROOT}/#{sketch_name}/Makefile", "w") do |f|
@@ -1,7 +1,12 @@
1
1
  RAD_ROOT = "#{File.dirname(__FILE__)}/../.." unless defined?(RAD_ROOT)
2
2
 
3
- %w(arduino_sketch.rb
4
- generators/makefile/makefile.rb tasks/rad.rb).each do |path|
3
+ unless defined?(PROJECT_DIR_NAME)
4
+ a = File.expand_path(File.expand_path("#{RAD_ROOT}")).split("/")
5
+ PROJECT_DIR_NAME = a[a.length-1]
6
+ end
7
+
8
+
9
+ %w(generators/makefile/makefile.rb arduino_sketch.rb tasks/rad.rb).each do |path|
5
10
  require File.expand_path("#{RAD_ROOT}/vendor/rad/#{path}")
6
11
  end
7
12
 
@@ -5,16 +5,18 @@ namespace :make do
5
5
 
6
6
  desc "compile the sketch and then upload it to your Arduino board"
7
7
  task :upload => :compile do
8
- puts "Reset the Arduino (unless yours has auto-reset!) and hit enter."
9
- STDIN.gets.chomp
10
- sh %{#{Makefile.software_params['arduino_root']}/hardware/tools/avr/bin/avrdude -F -p #{Makefile.hardware_params['mcu']} -P #{Makefile.hardware_params['serial_port']} -c stk500v1 -b 19200 -C #{Makefile.software_params['arduino_root']}/hardware/tools/avr/etc/avrdude.conf -U flash:w:#{[RAD_ROOT,@sketch_name,@sketch_name].join '/'}.hex}
8
+ if Makefile.hardware_params['physical_reset']
9
+ puts "Reset the Arduino and hit enter.\n==If your board doesn't need it, you can turn off this prompt in config/software.yml=="
10
+ STDIN.gets.chomp
11
+ end
12
+ sh %{cd #{RAD_ROOT}/#{@sketch_name}; make upload}
11
13
  end
12
14
 
13
15
  desc "generate a makefile and use it to compile the .cpp"
14
16
  task :compile => [:clean_sketch_dir, "build:sketch"] do # should also depend on "build:sketch"
15
17
  Makefile.compose_for_sketch( @sketch_name )
16
18
  # not allowed? sh %{export PATH=#{Makefile.software_params[:arduino_root]}/tools/avr/bin:$PATH}
17
- sh %{cd #{RAD_ROOT}/#{@sketch_name}; make}
19
+ sh %{cd #{RAD_ROOT}/#{@sketch_name}; make depend; make}
18
20
  end
19
21
 
20
22
  task :clean_sketch_dir => ["build:file_list", "build:sketch_dir"] do
@@ -31,7 +33,7 @@ namespace :build do
31
33
  desc "actually build the sketch"
32
34
  task :sketch => [:file_list, :sketch_dir, :setup] do
33
35
  klass = @file_names.first.split(".").first.split("_").collect{|c| c.capitalize}.join("")
34
- eval File.read(@file_names.first)
36
+ eval ArduinoSketch.pre_process(File.read(@file_names.first))
35
37
  @loop = RubyToAnsiC.translate(constantize(klass), "loop")
36
38
  result = "#{@setup}\n#{@loop}\n"
37
39
  name = @file_names.first.split(".").first
@@ -1,8 +1,8 @@
1
1
  module Rad #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 1
5
- TINY = 1
4
+ MINOR = 2
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -9,7 +9,7 @@
9
9
  </title>
10
10
  <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
11
  <style>
12
-
12
+ .movie {float: left; margin-right: 10px; margin-bottom: 10px;}
13
13
  </style>
14
14
  <script type="text/javascript">
15
15
  window.onload = function() {
@@ -33,7 +33,7 @@
33
33
  <h1>RAD</h1>
34
34
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/rad"; return false'>
35
35
  <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/rad" class="numbers">0.0.4</a>
36
+ <a href="http://rubyforge.org/projects/rad" class="numbers">0.2.0</a>
37
37
  </div>
38
38
  <h1>&#x2192; &#8216;Ruby Arduino Development&#8217;</h1>
39
39
 
@@ -43,7 +43,13 @@
43
43
 
44
44
  <p><span class="caps">RAD</span> is a framework for programming the Arduino physcial computing platform using Ruby. <span class="caps">RAD</span> 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.</p>
45
45
 
46
+ <h2>Demo: 'Hello World'</h2>
46
47
 
48
+ <p>Here's a basic demo of <span class="caps">RAD</span> in action. In this movie, we'll write, compile, and upload the universal physical computing 'Hello World': a single flashing LED.
49
+ <div class="movie"><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/AKbHcMaC_cA&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/AKbHcMaC_cA&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></div>
50
+ <em>Note: This movie was made using an old version of the Arduino board which required a hardware reset before being able to accept a new sketch. More recent versions of the board don't have this requirement and hence as of version 0.2.0, <span class="caps">RAD</span> no longer prompts for reset when running 'rake make:upload' (thought the option is still available for older boards.)</em>
51
+ </p>
52
+ <br style="clear:both" />
47
53
  <h2>Why?</h2>
48
54
 
49
55
 
@@ -53,17 +59,17 @@
53
59
  <h2>Installing</h2>
54
60
 
55
61
 
56
- <pre syntax="ruby">$ sudo gem install rad</pre>
62
+ <p><code>$ sudo gem install rad</code></p>
63
+
57
64
 
58
- <p><span class="caps">RAD</span> depends on <a href="http://rubyforge.org/projects/ruby2c/">Ruby2C</a>, which seems immune to the normal gem requirement techniques, so, if you don&#8217;t already have it, you&#8217;ll need to install that as well:</p>
65
+ <p>You&#8217;ll also need to have the Arduino environment installed, which you can get from <a href="http://www.arduino.cc/en/Main/Software">the Arduino website</a>. <span class="caps">RAD</span> currently requires Arduino 0010, but we try to keep it up-to-date with new Arduino releases.</p>
59
66
 
60
67
 
61
- <pre syntax="ruby">$ sudo gem install Ruby2C</pre>
68
+ <h2>The Basics</h2>
62
69
 
63
- <h2>The basics</h2>
64
70
 
71
+ <p><code>$ rad my_sketch</code></p>
65
72
 
66
- <code>$ rad my_sketch</code>
67
73
 
68
74
  <p>This command will create a new <span class="caps">RAD</span> project directory (my_sketch/) inside of the current directory that contains a blank script in which you can write your own <span class="caps">RAD</span> code, as well as a full install of the <span class="caps">RAD</span> support infrastructure (in vendor/). A sample &#8216;hello world&#8217; script in <span class="caps">RAD</span> will look like this:</p>
69
75
 
@@ -77,28 +83,38 @@ class MySketch &lt; ArduinoSketch
77
83
  end
78
84
  </pre>
79
85
 
80
- <p>Once your code is written, your relevant local configuration properly setup in config/hardware.rb and config/sofrware.rb, and an Arduino with the corresponding circuit (a 220ohm resistor and an <span class="caps">LED</span> wired in series between Arduino pin 7 and ground) is connected to your computer via serial, run:</p>
86
+ <p>Once your code is written, your relevant local configuration properly setup in <code>config/hardware.rb</code> and <code>config/software.rb</code>, and an Arduino with the corresponding circuit (a 220ohm resistor and an <span class="caps">LED</span> wired in series between Arduino pin 7 and ground) is connected to your computer via serial, run:</p>
87
+
81
88
 
89
+ <p><code>$ rake make:upload</code></p>
82
90
 
83
- <code>$ rake make:upload</code>
84
91
 
85
92
  <p>This will:</p>
86
93
 
87
94
 
88
- <ul>
89
- <li>generate the correct Arduino C/C++ code from your sketch </li>
90
- <li>dynamically prepare a localized version of the default Arduino makefile </li>
91
- <li>compile your script </li>
92
- <li>prompt you to hit the reset button on your Arduino </li>
93
- <li>upload your compiled binary onto your Arduino</li>
94
- </ul>
95
+ <ul>
96
+ <li>generate the correct Arduino C++ code from your sketch</li>
97
+ <li>dynamically prepare a localized version of the default Arduino Makefile</li>
98
+ <li>compile your sketch</li>
99
+ <li>prompt you to hit the reset button on your Arduino (if necessary!)</li>
100
+ <li>upload your compiled binary onto your Arduino</li>
101
+ </ul>
102
+
95
103
 
96
104
  <h2>The Arduino <span class="caps">API</span></h2>
97
105
 
98
106
 
99
- <p>With the exception of the still-experimental Serial interface, most of <a href="http://www.arduino.cc/en/Reference/HomePage">the Arduino software <span class="caps">API</span></a> should be working correctly at this point. Documentation for the Ruby versions of the methods is forthcoming, but it is mostly what you&#8217;d expect: methods with identical names and arguments to their Arduino counterparts with the exception of using &#8216;true&#8217; and &#8216;false&#8217; for <span class="caps">HIGH</span> and <span class="caps">LOW</span>.</p>
107
+ <p>Most of <a href="http://www.arduino.cc/en/Reference/HomePage">the Arduino software <span class="caps">API</span></a> should be working correctly at this point. Documentation for the Ruby versions of the methods is forthcoming, but it is mostly what you&#8217;d expect: methods with identical names and arguments to their Arduino counterparts with the exception of using &#8216;true&#8217; and &#8216;false&#8217; for <span class="caps">HIGH</span> and <span class="caps">LOW</span>.</p>
100
108
 
109
+ <h2>Demo: Serial Communication</h2>
110
+ <p>
111
+ To demonstrate some of the more advanced features of <span class="caps">RAD</span>, here's a movie showing how to program the Arduino to listen to serial communication from a computer.
112
+ <div class="movie">
113
+ <object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/7OguEBfdTe0&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/7OguEBfdTe0&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object> </div>
101
114
 
115
+ <em>Note: The same comment from above applies here about the hardware reset. Also, extra points are available if you recognize the logo on the flag in the video.</em>
116
+ </p>
117
+ <br style="clear:both" />
102
118
  <h2><span class="caps">RAD</span> Needs You!</h2>
103
119
 
104
120
 
@@ -114,7 +130,7 @@ end
114
130
  <h2>License</h2>
115
131
 
116
132
 
117
- <p>This code is free to use under the terms of the <span class="caps">GPL 2</span>.0 license, just like the Arduino software library itself.</p>
133
+ <p>This code is free to use under the terms of the <span class="caps">GPL</span> 2.0 license, just like the Arduino software library itself.</p>
118
134
 
119
135
 
120
136
  <h2>Contact</h2>
@@ -122,12 +138,20 @@ end
122
138
 
123
139
  <p>Comments, questions, heckles, attacks, praises, and, (most especially) patches and contributions are welcome! Send email to <a href="mailto:greg@grabb.it">Greg Borenstein</a>.</p>
124
140
  <p class="coda">
125
- <a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 23rd July 2007<br>
141
+ <a href="mailto:drnicwilliams@gmail.com">Dr Nic</a>, 18th November 2007<br>
126
142
  Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
127
143
  </p>
128
144
  </div>
129
145
 
130
146
  <!-- insert site tracking codes here, like Google Urchin -->
131
-
147
+ <script type="text/javascript">
148
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
149
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
150
+ </script>
151
+ <script type="text/javascript">
152
+ var pageTracker = _gat._getTracker("UA-3885443-1");
153
+ pageTracker._initData();
154
+ pageTracker._trackPageview();
155
+ </script>
132
156
  </body>
133
157
  </html>
@@ -2,7 +2,6 @@ h1. RAD
2
2
 
3
3
  h1. &#x2192; 'Ruby Arduino Development'
4
4
 
5
-
6
5
  h2. What?
7
6
 
8
7
  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.
@@ -13,15 +12,13 @@ While duplicating the functionality of the well-designed Arduino software interf
13
12
 
14
13
  h2. Installing
15
14
 
16
- <pre syntax="ruby">$ sudo gem install rad</pre>
17
-
18
- RAD depends on <a href="http://rubyforge.org/projects/ruby2c/">Ruby2C</a>, which seems immune to the normal gem requirement techniques, so, if you don't already have it, you'll need to install that as well:
15
+ @$ sudo gem install rad@
19
16
 
20
- <pre syntax="ruby">$ sudo gem install Ruby2C</pre>
17
+ You'll also need to have the Arduino environment installed, which you can get from "the Arduino website":http://www.arduino.cc/en/Main/Software. RAD currently requires Arduino 0010, but we try to keep it up-to-date with new Arduino releases.
21
18
 
22
- h2. The basics
19
+ h2. The Basics
23
20
 
24
- <code>$ rad my_sketch</code>
21
+ @$ rad my_sketch@
25
22
 
26
23
  This command will create a new RAD project directory (my_sketch/) inside of the current directory that contains a blank script in which you can write your own RAD code, as well as a full install of the RAD support infrastructure (in vendor/). A sample 'hello world' script in RAD will look like this:
27
24
 
@@ -34,19 +31,17 @@ class MySketch < ArduinoSketch
34
31
  end
35
32
  </pre>
36
33
 
37
- Once your code is written, your relevant local configuration properly setup in config/hardware.rb and config/sofrware.rb, and an Arduino with the corresponding circuit (a 220ohm resistor and an LED wired in series between Arduino pin 7 and ground) is connected to your computer via serial, run:
34
+ Once your code is written, your relevant local configuration properly setup in @config/hardware.rb@ and @config/software.rb@, and an Arduino with the corresponding circuit (a 220ohm resistor and an LED wired in series between Arduino pin 7 and ground) is connected to your computer via serial, run:
38
35
 
39
- <code>$ rake make:upload</code>
36
+ @$ rake make:upload@
40
37
 
41
38
  This will:
42
39
 
43
- <ul>
44
- <li>generate the correct Arduino C/C++ code from your sketch </li>
45
- <li>dynamically prepare a localized version of the default Arduino makefile </li>
46
- <li>compile your script </li>
47
- <li>prompt you to hit the reset button on your Arduino </li>
48
- <li>upload your compiled binary onto your Arduino</li>
49
- </ul>
40
+ * generate the correct Arduino C++ code from your sketch
41
+ * dynamically prepare a localized version of the default Arduino Makefile
42
+ * compile your sketch
43
+ * prompt you to hit the reset button on your Arduino (if necessary!)
44
+ * upload your compiled binary onto your Arduino
50
45
 
51
46
  h2. The Arduino API
52
47
 
@@ -58,7 +53,7 @@ All the many discipline-crossing skills required for a project like RAD make for
58
53
 
59
54
  There's lots to do.
60
55
 
61
- If you're looking for a place to dive in and don't know quite where, "email Greg":mailto:greg@grabb.it. If you want to start by taking a log at the code, the trunk repository is <code>svn://rubyforge.org/var/svn/rad/trunk</code> for anonymous access.
56
+ If you're looking for a place to dive in and don't know quite where, "email Greg":mailto:greg@grabb.it. If you want to start by taking a log at the code, the trunk repository is @svn://rubyforge.org/var/svn/rad/trunk@ for anonymous access.
62
57
 
63
58
  h2. License
64
59
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: rad
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.1
7
- date: 2007-10-29 00:00:00 -07:00
6
+ version: 0.2.0
7
+ date: 2008-03-16 00:00:00 -07:00
8
8
  summary: 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.
9
9
  require_paths:
10
10
  - lib