atduskgreg-rad 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +104 -0
- data/License.txt +282 -0
- data/Manifest.txt +142 -0
- data/README.rdoc +55 -0
- data/Rakefile +142 -0
- data/bin/hello_world_test/Makefile +436 -0
- data/bin/hello_world_test/hello_world.cpp +23 -0
- data/bin/rad +302 -0
- data/lib/examples/add_hysteresis.rb +13 -0
- data/lib/examples/basic_blink.rb +10 -0
- data/lib/examples/blink_m_address_assignment.rb +104 -0
- data/lib/examples/blink_m_hello.rb +14 -0
- data/lib/examples/blink_m_multi.rb +61 -0
- data/lib/examples/blink_with_serial.rb +16 -0
- data/lib/examples/configure_pa_lcd_boot.rb +91 -0
- data/lib/examples/debounce_methods.rb +49 -0
- data/lib/examples/external_variable_fu.rb +26 -0
- data/lib/examples/external_variables.rb +32 -0
- data/lib/examples/first_sound.rb +23 -0
- data/lib/examples/frequency_generator.rb +30 -0
- data/lib/examples/hello_array.rb +48 -0
- data/lib/examples/hello_array2.rb +79 -0
- data/lib/examples/hello_array_eeprom.rb +59 -0
- data/lib/examples/hello_clock.rb +84 -0
- data/lib/examples/hello_eeprom.rb +51 -0
- data/lib/examples/hello_eeprom_lcdpa.rb +81 -0
- data/lib/examples/hello_format_print.rb +94 -0
- data/lib/examples/hello_lcd_charset.rb +75 -0
- data/lib/examples/hello_pa_lcd.rb +59 -0
- data/lib/examples/hello_servos.rb +88 -0
- data/lib/examples/hello_spectra_sound.rb +38 -0
- data/lib/examples/hello_world.rb +11 -0
- data/lib/examples/hello_xbee.rb +12 -0
- data/lib/examples/hysteresis_duel.rb +39 -0
- data/lib/examples/i2c_with_clock_chip.rb +124 -0
- data/lib/examples/midi_beat_box.rb +86 -0
- data/lib/examples/midi_scales.rb +94 -0
- data/lib/examples/motor_knob.rb +30 -0
- data/lib/examples/servo_buttons.rb +23 -0
- data/lib/examples/servo_calibrate_continuous.rb +92 -0
- data/lib/examples/servo_throttle.rb +40 -0
- data/lib/examples/software_serial.rb +10 -0
- data/lib/examples/sparkfun_lcd.rb +48 -0
- data/lib/examples/spectra_soft_pot.rb +34 -0
- data/lib/examples/times_method.rb +8 -0
- data/lib/examples/toggle.rb +10 -0
- data/lib/examples/twitter.rb +57 -0
- data/lib/examples/two_wire.rb +14 -0
- data/lib/libraries/AFSoftSerial/AFSoftSerial.cpp +321 -0
- data/lib/libraries/AFSoftSerial/AFSoftSerial.h +61 -0
- data/lib/libraries/AFSoftSerial/keywords.txt +18 -0
- data/lib/libraries/AF_XPort/AF_XPort.cpp +166 -0
- data/lib/libraries/AF_XPort/AF_XPort.h +48 -0
- data/lib/libraries/DS1307/DS1307.cpp +162 -0
- data/lib/libraries/DS1307/DS1307.h +66 -0
- data/lib/libraries/DS1307/keywords.txt +18 -0
- data/lib/libraries/FrequencyTimer2/FrequencyTimer2.cpp +144 -0
- data/lib/libraries/FrequencyTimer2/FrequencyTimer2.h +42 -0
- data/lib/libraries/FrequencyTimer2/keywords.txt +22 -0
- data/lib/libraries/I2CEEPROM/I2CEEPROM.cpp +120 -0
- data/lib/libraries/I2CEEPROM/I2CEEPROM.h +70 -0
- data/lib/libraries/I2CEEPROM/keywords.txt +21 -0
- data/lib/libraries/LoopTimer/LoopTimer.cpp +35 -0
- data/lib/libraries/LoopTimer/LoopTimer.h +34 -0
- data/lib/libraries/LoopTimer/keywords.txt +27 -0
- data/lib/libraries/OneWire/OneWire.cpp +194 -0
- data/lib/libraries/OneWire/OneWire.h +63 -0
- data/lib/libraries/OneWire/keywords.txt +35 -0
- data/lib/libraries/OneWire/readme.txt +13 -0
- data/lib/libraries/SWSerLCDpa/SWSerLCDpa.cpp +296 -0
- data/lib/libraries/SWSerLCDpa/SWSerLCDpa.h +69 -0
- data/lib/libraries/SWSerLCDsf/SWSerLCDsf.cpp +311 -0
- data/lib/libraries/SWSerLCDsf/SWSerLCDsf.h +67 -0
- data/lib/libraries/Servo/Servo.cpp +192 -0
- data/lib/libraries/Servo/Servo.h +61 -0
- data/lib/libraries/Stepper/Stepper.cpp +220 -0
- data/lib/libraries/Stepper/Stepper.h +86 -0
- data/lib/libraries/Stepper/keywords.txt +28 -0
- data/lib/libraries/Wire/Wire.cpp +262 -0
- data/lib/libraries/Wire/Wire.h +67 -0
- data/lib/libraries/Wire/keywords.txt +31 -0
- data/lib/libraries/Wire/twi.h +57 -0
- data/lib/libraries/Wire/utility/twi.c +449 -0
- data/lib/libraries/Wire/utility/twi.h +57 -0
- data/lib/plugins/bitwise_ops.rb +54 -0
- data/lib/plugins/blink.rb +25 -0
- data/lib/plugins/blink_m.rb +356 -0
- data/lib/plugins/debounce.rb +138 -0
- data/lib/plugins/debug_output_to_lcd.rb +71 -0
- data/lib/plugins/hysteresis.rb +52 -0
- data/lib/plugins/input_output_state.rb +84 -0
- data/lib/plugins/lcd_padding.rb +58 -0
- data/lib/plugins/mem_test.rb +37 -0
- data/lib/plugins/midi.rb +60 -0
- data/lib/plugins/parallax_ping.rb +50 -0
- data/lib/plugins/servo_pulse.rb +31 -0
- data/lib/plugins/servo_setup.rb +86 -0
- data/lib/plugins/smoother.rb +54 -0
- data/lib/plugins/spark_fun_serial_lcd.rb +100 -0
- data/lib/plugins/spectra_symbol.rb +79 -0
- data/lib/plugins/twitter_connect.rb +145 -0
- data/lib/rad.rb +5 -0
- data/lib/rad/README.rdoc +5 -0
- data/lib/rad/arduino_plugin.rb +246 -0
- data/lib/rad/arduino_sketch.rb +627 -0
- data/lib/rad/generators/makefile/makefile.erb +243 -0
- data/lib/rad/generators/makefile/makefile.rb +38 -0
- data/lib/rad/hardware_library.rb +813 -0
- data/lib/rad/init.rb +14 -0
- data/lib/rad/progressbar.rb +236 -0
- data/lib/rad/rad_processor.rb +128 -0
- data/lib/rad/rad_rewriter.rb +94 -0
- data/lib/rad/rad_type_checker.rb +26 -0
- data/lib/rad/sim/arduino_sketch.rb +57 -0
- data/lib/rad/sketch_compiler.rb +47 -0
- data/lib/rad/tasks/build_and_make.rake +210 -0
- data/lib/rad/tasks/rad.rb +2 -0
- data/lib/rad/todo.txt +13 -0
- data/lib/rad/variable_processing.rb +153 -0
- data/lib/rad/version.rb +9 -0
- data/scripts/txt2html +67 -0
- data/setup.rb +1585 -0
- data/spec/examples/hello_world.rb +11 -0
- data/spec/examples/serial_motor.rb +12 -0
- data/spec/models/arduino_sketch_spec.rb +82 -0
- data/spec/models/sketch_compiler_spec.rb +96 -0
- data/spec/models/spec_helper.rb +2 -0
- data/spec/sim/hello_world_spec.rb +42 -0
- data/spec/spec.opts +1 -0
- data/test/test_array_processing.rb +179 -0
- data/test/test_plugin_loading.rb +151 -0
- data/test/test_translation_post_processing.rb +185 -0
- data/test/test_variable_processing.rb +238 -0
- data/website/examples/assembler_test.rb.html +73 -0
- data/website/examples/gps_reader.rb.html +39 -0
- data/website/examples/hello_world.rb.html +38 -0
- data/website/examples/serial_motor.rb.html +41 -0
- data/website/index.html +178 -0
- data/website/index.txt +64 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +169 -0
- data/website/template.rhtml +48 -0
- 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,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
|