neo_rad 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/History.txt +112 -0
- data/License.txt +282 -0
- data/Manifest.txt +144 -0
- data/README.rdoc +1 -0
- data/Rakefile +142 -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 +112 -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/README.rdoc +5 -0
- data/lib/rad/arduino_plugin.rb +246 -0
- data/lib/rad/arduino_sketch.rb +628 -0
- data/lib/rad/darwin_installer.rb +23 -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 +15 -0
- data/lib/rad/linux_installer.rb +132 -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/lib/rad.rb +5 -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/hello_world_test/Makefile +436 -0
- data/test/hello_world_test/hello_world.cpp +23 -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 +222 -0
@@ -0,0 +1,12 @@
|
|
1
|
+
# Hardware: motor control circuit (i.e. TIP-120 control pin)
|
2
|
+
# connected at pin 7.
|
3
|
+
# Demo: http://www.youtube.com/watch?v=7OguEBfdTe0
|
4
|
+
|
5
|
+
class SerialMotor < ArduinoSketch
|
6
|
+
output_pin 7, :as => :motor
|
7
|
+
serial_begin
|
8
|
+
|
9
|
+
def loop
|
10
|
+
digitalWrite(motor, serial_read) if serial_available
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../lib/rad/arduino_sketch.rb")
|
3
|
+
|
4
|
+
context "Arduino#serial_begin" do
|
5
|
+
setup do
|
6
|
+
@as = ArduinoSketch.new
|
7
|
+
end
|
8
|
+
|
9
|
+
specify "should default baud_rate to 9600" do
|
10
|
+
@as.serial_begin
|
11
|
+
@as.instance_variable_get("@other_setup").should include("Serial.begin(9600);")
|
12
|
+
end
|
13
|
+
specify "should set an alternate baud_rate if told" do
|
14
|
+
@as.serial_begin :rate => 2400
|
15
|
+
@as.instance_variable_get("@other_setup").should include("Serial.begin(2400);")
|
16
|
+
end
|
17
|
+
specify "should add the correct function call to the composed_setup" do
|
18
|
+
@as.serial_begin
|
19
|
+
@as.compose_setup.should match(Regexp.new(Regexp.escape("Serial.begin(9600);")))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
context "Arduino Base" do
|
25
|
+
setup do
|
26
|
+
@as = ArduinoSketch.new
|
27
|
+
end
|
28
|
+
|
29
|
+
specify "output_pin method without :as arg. should add the pin to the pin_mode hash's output list and leave the declarations alone" do
|
30
|
+
@as.output_pin 1
|
31
|
+
@as.instance_variable_get("@declarations").first.should == nil
|
32
|
+
@as.instance_variable_get("@pin_modes")[:output].should include(1)
|
33
|
+
end
|
34
|
+
|
35
|
+
specify "output_pin method with :as arg. should add the pin to the pin_mode hash's output list write the appropriate declaration and accessor" do
|
36
|
+
@as.output_pin 3, :as => :led
|
37
|
+
@as.instance_variable_get("@declarations").first.should == "int _led = 3;"
|
38
|
+
@as.instance_variable_get("@accessors").first.should == "int led(){\nreturn _led;\n}"
|
39
|
+
@as.instance_variable_get("@pin_modes")[:output].should include(3)
|
40
|
+
end
|
41
|
+
|
42
|
+
specify "output_pins method should add the pin to the pin_mode hash's output list and leave the declarations and accessors alone" do
|
43
|
+
@as.output_pins [5,4,3,2]
|
44
|
+
@as.instance_variable_get("@pin_modes")[:output].should include(5)
|
45
|
+
@as.instance_variable_get("@pin_modes")[:output].should include(4)
|
46
|
+
@as.instance_variable_get("@pin_modes")[:output].should include(3)
|
47
|
+
@as.instance_variable_get("@pin_modes")[:output].should include(2)
|
48
|
+
@as.instance_variable_get("@declarations").first.should == nil
|
49
|
+
@as.instance_variable_get("@accessors").first.should == nil
|
50
|
+
end
|
51
|
+
|
52
|
+
specify "input_pin method with :as arg. should add the pin to the pin_mode hash's input list write the appropriate declaration and accessor" do
|
53
|
+
@as.input_pin 1, :as => :knob
|
54
|
+
@as.instance_variable_get("@declarations").first.should == "int _knob = 1;"
|
55
|
+
@as.instance_variable_get("@accessors").first.should == "int knob(){\nreturn _knob;\n}"
|
56
|
+
@as.instance_variable_get("@pin_modes")[:input].should include(1)
|
57
|
+
end
|
58
|
+
|
59
|
+
specify "input_pins method should add the pins to the pin_mode hash's input list and leave the declarations and accessors alone" do
|
60
|
+
@as.input_pins [5,4,3,2]
|
61
|
+
@as.instance_variable_get("@pin_modes")[:input].should include(5)
|
62
|
+
@as.instance_variable_get("@pin_modes")[:input].should include(4)
|
63
|
+
@as.instance_variable_get("@pin_modes")[:input].should include(3)
|
64
|
+
@as.instance_variable_get("@pin_modes")[:input].should include(2)
|
65
|
+
@as.instance_variable_get("@declarations").first.should == nil
|
66
|
+
@as.instance_variable_get("@accessors").first.should == nil
|
67
|
+
end
|
68
|
+
|
69
|
+
specify "compose_setup should append each appropriate pinMode statement and :as accessor to the setup_function string with a newline" do
|
70
|
+
@as.output_pins [1, 2]
|
71
|
+
@as.input_pin 3, :as => :button
|
72
|
+
|
73
|
+
result = @as.send :compose_setup
|
74
|
+
|
75
|
+
result.should match(Regexp.new(Regexp.escape("pinMode(1, OUTPUT);\n")))
|
76
|
+
result.should match(Regexp.new(Regexp.escape("pinMode(2, OUTPUT);\n")))
|
77
|
+
result.should match(Regexp.new(Regexp.escape("pinMode(3, INPUT);\n")))
|
78
|
+
result.should match(Regexp.new(Regexp.escape("int _button = 3;\n")))
|
79
|
+
result.should match(Regexp.new(Regexp.escape("int button(){\nreturn _button;\n}")))
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../lib/rad/sketch_compiler.rb")
|
3
|
+
|
4
|
+
context "SketchCompiler#sketch_methods" do
|
5
|
+
before do
|
6
|
+
@as = File.expand_path(File.dirname(__FILE__)) + "/../../lib/examples/i2c_with_clock_chip.rb"
|
7
|
+
@sc = SketchCompiler.new @as
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should locate all the methods defined in the sketch" do
|
11
|
+
@sc.sketch_methods.should include( "loop")
|
12
|
+
@sc.sketch_methods.should include( "printlz")
|
13
|
+
@sc.sketch_methods.should include( "print_hexbyte")
|
14
|
+
@sc.sketch_methods.should include( "clear_bottom_line")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "SketchCompiler#process_constants" do
|
19
|
+
before do
|
20
|
+
@as = File.expand_path(File.dirname(__FILE__)) + "/../../lib/examples/external_variable_fu.rb"
|
21
|
+
@sc = SketchCompiler.new @as
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should correctly process constants" do
|
25
|
+
@sc.process_constants
|
26
|
+
@sc.body.should_not match(/HIGH/)
|
27
|
+
@sc.body.should_not match(/LOW/)
|
28
|
+
@sc.body.should_not match(/ON/)
|
29
|
+
@sc.body.should_not match(/OFF/)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "SketchCompiler.new" do
|
34
|
+
before do
|
35
|
+
@as = File.expand_path(File.dirname(__FILE__)) + "/../../lib/examples/add_hysteresis.rb"
|
36
|
+
end
|
37
|
+
it "should correctly absolutize a path with /../ that starts at /" do
|
38
|
+
SketchCompiler.new(@as).path.should == "/Users/greg/code/rad/lib/examples/add_hysteresis.rb"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should correct absolutize a relative path" do
|
42
|
+
SketchCompiler.new("lib/examples/add_hysteresis.rb").path.should == "/Users/greg/code/rad/lib/examples/add_hysteresis.rb"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should load the body of the sketch" do
|
46
|
+
sc = SketchCompiler.new @as
|
47
|
+
sc.body.should == open(@as).read
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
context "SketchCompiler#sketch_class" do
|
53
|
+
before do
|
54
|
+
@sc = SketchCompiler.new File.expand_path(File.dirname(__FILE__)) + "/../../lib/examples/add_hysteresis.rb"
|
55
|
+
end
|
56
|
+
it "should calculate correctly from the path" do
|
57
|
+
@sc.klass.should == "AddHysteresis"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "SketchCompiler#create_build_dir! without a path prefix" do
|
62
|
+
before do
|
63
|
+
@sc = SketchCompiler.new("lib/examples/add_hysteresis.rb")
|
64
|
+
end
|
65
|
+
it "should create the sketch dir in the correct place" do
|
66
|
+
@sc.should_receive( :mkdir_p ).with( "/Users/greg/code/rad/lib/examples/add_hysteresis" )
|
67
|
+
@sc.create_build_dir!
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "SketchCompiler#create_build_dir! with a path prefix" do
|
72
|
+
before do
|
73
|
+
@sc = SketchCompiler.new("lib/examples/add_hysteresis.rb")
|
74
|
+
end
|
75
|
+
it "should create the sketch dir in the correct place" do
|
76
|
+
@sc.should_receive( :mkdir_p ).with( "prefix/add_hysteresis" )
|
77
|
+
@sc.create_build_dir! "prefix"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "SketchCompiler#build_dir" do
|
82
|
+
before do
|
83
|
+
@sc = SketchCompiler.new("lib/examples/add_hysteresis.rb")
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
it "should be correct with a default target_dir" do
|
88
|
+
@sc.build_dir.should == "/Users/greg/code/rad/lib/examples/add_hysteresis"
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should be correct with an altered target_dir" do
|
92
|
+
@sc.target_dir = "examples"
|
93
|
+
@sc.build_dir.should == "examples/add_hysteresis"
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.dirname(__FILE__) + './models/spec_helper.rb'
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../lib/rad/sim/arduino_sketch.rb")
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + "/../examples/hello_world.rb" )
|
4
|
+
|
5
|
+
context "ArduinoSketch running HelloWorld example" do
|
6
|
+
it "should successfully make an instance" do
|
7
|
+
lambda{HelloWorld.new}.should_not raise_error
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context "HelloWorld#led" do
|
12
|
+
it "should return a correctly configured Pin" do
|
13
|
+
p = HelloWorld.new.led
|
14
|
+
p.type.should == :output
|
15
|
+
p.num.should == 7
|
16
|
+
p.value.should == false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "HelloWorld#digitalWrite" do
|
21
|
+
setup do
|
22
|
+
@h = HelloWorld.new
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should set the value of the pin to true if told to" do
|
26
|
+
@h.digitalWrite(@h.led, ON)
|
27
|
+
@h.led.value.should == true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should set the value of the pin to false if told to" do
|
31
|
+
@h.digitalWrite(@h.led, OFF)
|
32
|
+
@h.led.value.should == false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "HelloWorld#delay" do
|
37
|
+
it "should maybe keep track of the time in some way?"
|
38
|
+
end
|
39
|
+
|
40
|
+
context "HelloWorld#loop" do
|
41
|
+
it "should execute the loop in the context of the instance"
|
42
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|