atduskgreg-rad 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- 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,59 @@
|
|
1
|
+
class HelloPaLcd < ArduinoSketch
|
2
|
+
|
3
|
+
|
4
|
+
# demonstrate 4 x 20 pa_lcd toggle between normal and Bignum mode
|
5
|
+
# with @toggle external variable thrown in for fun
|
6
|
+
|
7
|
+
# change your pins to suit your setup
|
8
|
+
|
9
|
+
@toggle = false
|
10
|
+
|
11
|
+
input_pin 6, :as => :button_one, :device => :button
|
12
|
+
input_pin 7, :as => :button_two, :device => :button
|
13
|
+
input_pin 8, :as => :button_three, :device => :button
|
14
|
+
|
15
|
+
output_pin 5, :as => :my_lcd, :device => :pa_lcd, :rate => 19200, :clear_screen => :true
|
16
|
+
|
17
|
+
def setup
|
18
|
+
delay 3000
|
19
|
+
my_lcd.setxy 0,0
|
20
|
+
my_lcd.print "Press button"
|
21
|
+
my_lcd.setxy 0,1
|
22
|
+
my_lcd.print "One, two or three...."
|
23
|
+
end
|
24
|
+
|
25
|
+
def loop
|
26
|
+
say_hello if button_one.read_input
|
27
|
+
say_more if button_two.read_input
|
28
|
+
say_it_large if button_three.read_input
|
29
|
+
end
|
30
|
+
|
31
|
+
def say_hello
|
32
|
+
@toggle = true
|
33
|
+
my_lcd.clearscr "Any sufficiently advanced technology"
|
34
|
+
my_lcd.setxy 0,2
|
35
|
+
my_lcd.setxy 0,3, "toggle state: "
|
36
|
+
my_lcd.print @toggle
|
37
|
+
end
|
38
|
+
|
39
|
+
def say_more # passing print strings to home and setxy (also works on clearscr)
|
40
|
+
@toggle = false
|
41
|
+
my_lcd.clearscr "is indistinguishablefrom magic"
|
42
|
+
my_lcd.setxy 0,3, "toggle state: "
|
43
|
+
my_lcd.print @toggle
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
def say_it_large
|
48
|
+
|
49
|
+
my_lcd.intoBignum
|
50
|
+
my_lcd.clearscr # line 0, col 0
|
51
|
+
1.upto(32) do |i|
|
52
|
+
my_lcd.setxy 0,1
|
53
|
+
my_lcd.print i * i
|
54
|
+
delay 200
|
55
|
+
end
|
56
|
+
my_lcd.outofBignum
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
class HelloServos < ArduinoSketch
|
2
|
+
|
3
|
+
output_pin 2, :as => :servo_1, :max => 2400, :min => 800
|
4
|
+
output_pin 3, :as => :servo_2, :max => 2400, :min => 800
|
5
|
+
output_pin 4, :as => :servo_3, :max => 2400, :min => 800
|
6
|
+
|
7
|
+
|
8
|
+
# time to go old school
|
9
|
+
def loop
|
10
|
+
song_sheet_two
|
11
|
+
end
|
12
|
+
|
13
|
+
def song_sheet_two
|
14
|
+
e
|
15
|
+
d
|
16
|
+
e
|
17
|
+
d
|
18
|
+
c
|
19
|
+
d
|
20
|
+
d
|
21
|
+
c
|
22
|
+
b
|
23
|
+
c
|
24
|
+
b
|
25
|
+
a
|
26
|
+
e
|
27
|
+
a
|
28
|
+
e
|
29
|
+
a
|
30
|
+
e
|
31
|
+
a
|
32
|
+
b
|
33
|
+
c
|
34
|
+
b
|
35
|
+
c
|
36
|
+
d
|
37
|
+
d
|
38
|
+
c
|
39
|
+
d
|
40
|
+
e
|
41
|
+
d
|
42
|
+
e
|
43
|
+
end
|
44
|
+
|
45
|
+
def a
|
46
|
+
pulse_servo servo_1, 1450
|
47
|
+
delay 100
|
48
|
+
home servo_1
|
49
|
+
delay 20
|
50
|
+
end
|
51
|
+
|
52
|
+
def b
|
53
|
+
pulse_servo servo_1, 1350
|
54
|
+
delay 100
|
55
|
+
home servo_1
|
56
|
+
delay 20
|
57
|
+
end
|
58
|
+
|
59
|
+
def c
|
60
|
+
pulse_servo servo_2, 1450
|
61
|
+
delay 100
|
62
|
+
home servo_2
|
63
|
+
delay 20
|
64
|
+
end
|
65
|
+
|
66
|
+
def d
|
67
|
+
pulse_servo servo_2, 1350
|
68
|
+
delay 100
|
69
|
+
home servo_2
|
70
|
+
delay 20
|
71
|
+
end
|
72
|
+
|
73
|
+
def e
|
74
|
+
pulse_servo servo_3, 1500
|
75
|
+
delay 100
|
76
|
+
home servo_3
|
77
|
+
delay 20
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
# center servos
|
82
|
+
|
83
|
+
def home(s)
|
84
|
+
pulse_servo s, 1400
|
85
|
+
f = s + 0
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class HelloSpectraSound < ArduinoSketch
|
2
|
+
|
3
|
+
# demonstrate capability to use soft pot as traditional pot
|
4
|
+
# the last pot reading remains "locked" to the last touch point
|
5
|
+
# similar same behavior as ipod
|
6
|
+
#
|
7
|
+
# this sketch assumes a pa_lcd operating at 19200 and one
|
8
|
+
# spectra symbol softpot connected to analog pin 3
|
9
|
+
#
|
10
|
+
@reading = int
|
11
|
+
output_pin 14, :as => :my_lcd, :device => :pa_lcd, :rate => 9600, :clear_screen => :true
|
12
|
+
output_pin 11, :as => :sound, :device => :freq_out, :frequency => 100, :enable => :true
|
13
|
+
input_pin 3, :as => :sensor_one, :device => :spectra
|
14
|
+
|
15
|
+
|
16
|
+
def setup
|
17
|
+
delay 1000
|
18
|
+
my_lcd.setxy 0,0, "spectra symbol"
|
19
|
+
my_lcd.setxy 0,1, "soft pot sound"
|
20
|
+
delay 3000
|
21
|
+
my_lcd.clearscr
|
22
|
+
end
|
23
|
+
|
24
|
+
def loop
|
25
|
+
my_lcd.setxy 0,1
|
26
|
+
# since lcd's have issues clearing tens and hundreds digits when reading ones,
|
27
|
+
# we use pad_int_to_str, which is a hack to display these cleanly
|
28
|
+
# pad_int_to_str takes two arguments: an integer and the final string length
|
29
|
+
#
|
30
|
+
# my_lcd.print pad_int_to_str analogRead(sensor_one), 5
|
31
|
+
@reading = sensor_one.soft_lock
|
32
|
+
sound.set_frequency @reading * 10
|
33
|
+
my_lcd.print pad_int_to_str @reading, 3
|
34
|
+
delay 30
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class HysteresisDuel < ArduinoSketch
|
2
|
+
|
3
|
+
# purpose
|
4
|
+
# side by side demo of affect of hysteresis on two different sensor readings
|
5
|
+
#
|
6
|
+
#
|
7
|
+
|
8
|
+
# requires one pa_lcd
|
9
|
+
# two sensors or potentiometers
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
output_pin 5, :as => :my_lcd, :device => :pa_lcd, :rate => 19200, :clear_screen => :true
|
14
|
+
input_pin 1, :as => :sensor_one, :device => :sensor
|
15
|
+
input_pin 2, :as => :sensor_two, :device => :sensor
|
16
|
+
|
17
|
+
def setup
|
18
|
+
delay 1000
|
19
|
+
my_lcd.setxy 0,0, "hysteresis duel"
|
20
|
+
delay 5000
|
21
|
+
my_lcd.clearscr
|
22
|
+
end
|
23
|
+
|
24
|
+
def loop
|
25
|
+
my_lcd.setxy 0,0, "direct"
|
26
|
+
my_lcd.setxy 0,1, "one: "
|
27
|
+
my_lcd.print analogRead sensor_one
|
28
|
+
my_lcd.print " two: "
|
29
|
+
my_lcd.print analogRead sensor_two
|
30
|
+
my_lcd.setxy 0,2, "with hysteresis"
|
31
|
+
my_lcd.setxy 0,3, "one: "
|
32
|
+
my_lcd.print sensor_one.with_hyst 4
|
33
|
+
my_lcd.print " two: "
|
34
|
+
my_lcd.print sensor_two.with_hyst 4
|
35
|
+
delay 230
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
class I2cWithClockChip < ArduinoSketch
|
2
|
+
|
3
|
+
# ----------------------------------------------------------------------------------
|
4
|
+
# <b>Time and Temp (20 July 2008)</b>
|
5
|
+
# Example #1 - Brian Riley, Underhill Center, VT USA <brianbr@wulden.org>
|
6
|
+
#
|
7
|
+
# Connections
|
8
|
+
# I2C bus - DS1307 Real Time Clock chip
|
9
|
+
# Analog 0 (a.k.a Digital 14) - Wulfden K107 seria LCD Controller
|
10
|
+
# Peter Anderson chip
|
11
|
+
# Digital 8 - Dallas SemiConductor DS18B20 One-Wire temperature Sensor (12 bit)
|
12
|
+
#
|
13
|
+
# Comment
|
14
|
+
# - This is a straight forward, program with minimal error checking and brute force
|
15
|
+
# delay() calls waiting for temperature conversion readings
|
16
|
+
#
|
17
|
+
# - for the external data busses make sure you have 4.7K pullup resistors on the
|
18
|
+
# data line (OnewWire) and the SDA/SCL (I2C)
|
19
|
+
|
20
|
+
# ----------------------------------------------------------------------------------
|
21
|
+
|
22
|
+
@hi_byte = int
|
23
|
+
@lo_byte = int
|
24
|
+
@t_reading = int
|
25
|
+
@device_crc = int
|
26
|
+
@sign_bit = int
|
27
|
+
@tc_100 = int
|
28
|
+
# implicit in :device => Z:ds1307 is that this i i2c
|
29
|
+
# :enable => true issues the Wire.begin to ick over i2c
|
30
|
+
output_pin 19, :as => :rtc, :device => :i2c_ds1307, :enable => :true
|
31
|
+
# software serial tx drives LCD display, screen cleared at startup
|
32
|
+
# defines the softare protocol for controller as Peter Anderson
|
33
|
+
output_pin 14, :as => :myLCD, :device => :pa_lcd, :rate => 19200, :clear_screen => :true
|
34
|
+
# defines this pin as being connected to a DalSemi 1-Wire device
|
35
|
+
# no specific device drivers yet, the specific device code is on you
|
36
|
+
output_pin 8, :as => :myTemp, :device => :onewire
|
37
|
+
|
38
|
+
|
39
|
+
def loop
|
40
|
+
until myTemp.reset do # reset bus, verify its clear and high
|
41
|
+
clear_bottom_line
|
42
|
+
myLCD.print " <1Wire Buss Error>"
|
43
|
+
delay 2000
|
44
|
+
end
|
45
|
+
|
46
|
+
myTemp.skip # "listen up - everybody!"
|
47
|
+
myTemp.write 0x44, 1 # temperature sensors, strta conversion
|
48
|
+
|
49
|
+
myLCD.setxy 6,0 # while they do that, lets print date/time
|
50
|
+
myLCD.print rtc.get(5, 1)
|
51
|
+
myLCD.print "/"
|
52
|
+
myLCD.print rtc.get(4, 0)
|
53
|
+
myLCD.print "/"
|
54
|
+
myLCD.print rtc.get(6, 0)
|
55
|
+
myLCD.setxy 6,1
|
56
|
+
printlz rtc.get(2, 0)
|
57
|
+
myLCD.print ":"
|
58
|
+
printlz rtc.get(1, 0)
|
59
|
+
myLCD.print ":"
|
60
|
+
printlz rtc.get(0, 0)
|
61
|
+
|
62
|
+
delay 800 # conversion takes about 750 msecs
|
63
|
+
|
64
|
+
until myTemp.reset do # reset bus, verify its clear and high
|
65
|
+
clear_bottom_line
|
66
|
+
myLCD.print " <1Wire Buss Error>"
|
67
|
+
delay 2000
|
68
|
+
end
|
69
|
+
myTemp.skip # listen up!
|
70
|
+
myTemp.write 0xBE, 1 # send me your data conversions
|
71
|
+
|
72
|
+
@lo_byte = myTemp.read # get irst byte
|
73
|
+
@hi_byte = myTemp.read # get second byte
|
74
|
+
|
75
|
+
# -------------------------------------------------------------
|
76
|
+
clear_bottom_line # this code is debug - not necessary
|
77
|
+
myLCD.setxy 4,3 # raw hex display of temp value
|
78
|
+
myLCD.print "raw = 0x"
|
79
|
+
print_hexbyte @hi_byte # prints 2 digit hex w/lead 0
|
80
|
+
print_hexbyte @lo_byte
|
81
|
+
# -------------------------------------------------------------
|
82
|
+
|
83
|
+
7.times { @device_crc = myTemp.read } # get next 6 bytes, drop them on floor
|
84
|
+
# next byte the ninth byte is the CRC
|
85
|
+
|
86
|
+
# DS18B20 brings data temperature back as 12 bits
|
87
|
+
# in degrees centigrade with 4 bits fractional, that is
|
88
|
+
# each bit s 1/16 of a degreeC
|
89
|
+
|
90
|
+
@t_reading = build_int @hi_byte, @lo_byte
|
91
|
+
@sign_bit = bit_and @t_reading, 0x8000
|
92
|
+
@t_reading = twos_comp @t_reading if @sign_bit # negative
|
93
|
+
|
94
|
+
@tc_100 = (6 * @t_reading) + (@t_reading / 4) #multiply by (100 * 0.0625) or 6.25
|
95
|
+
|
96
|
+
myLCD.setxy 2,2
|
97
|
+
if @sign_bit
|
98
|
+
myLCD.print "-"
|
99
|
+
else
|
100
|
+
myLCD.print " "
|
101
|
+
end
|
102
|
+
myLCD.print(@tc_100 / 100) # separate off the whole
|
103
|
+
myLCD.print "."
|
104
|
+
printlz(@tc_100 % 100) # and fractional portions
|
105
|
+
myLCD.print " degrees C"
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
def printlz(w)
|
110
|
+
myLCD.print "0" if w < 10
|
111
|
+
myLCD.print w
|
112
|
+
end
|
113
|
+
|
114
|
+
def print_hexbyte(w)
|
115
|
+
myLCD.print "0" if w < 0x10
|
116
|
+
myLCD.print w, 0x10
|
117
|
+
end
|
118
|
+
|
119
|
+
def clear_bottom_line
|
120
|
+
myLCD.setxy 0,3
|
121
|
+
myLCD.print "?l"
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
class MidiBeatBox < ArduinoSketch
|
2
|
+
|
3
|
+
# midi synthesiser output on channel 2
|
4
|
+
# with speed controlled by spectra soft pot
|
5
|
+
|
6
|
+
@channel = 2
|
7
|
+
input_pin 1, :as => :sensor_one, :device => :spectra
|
8
|
+
output_pin 13, :as => :led
|
9
|
+
|
10
|
+
serial_begin :rate => 31250
|
11
|
+
|
12
|
+
def setup
|
13
|
+
delay 3000
|
14
|
+
end
|
15
|
+
|
16
|
+
def loop
|
17
|
+
8.times {first}
|
18
|
+
2.times do
|
19
|
+
second
|
20
|
+
third
|
21
|
+
end
|
22
|
+
4.times {first}
|
23
|
+
2.times {second}
|
24
|
+
end
|
25
|
+
|
26
|
+
def first
|
27
|
+
play 39, 52, 37
|
28
|
+
play 0, 0, 0
|
29
|
+
play 36, 52, 0
|
30
|
+
play 37, 52, 39
|
31
|
+
|
32
|
+
play 37, 0, 0
|
33
|
+
play 36, 0, 0
|
34
|
+
play 39, 50, 0
|
35
|
+
play 0, 0, 0
|
36
|
+
|
37
|
+
play 52, 36, 37
|
38
|
+
play 0, 0, 0
|
39
|
+
play 39, 0, 0
|
40
|
+
play 36, 37, 0
|
41
|
+
|
42
|
+
play 36, 37, 39
|
43
|
+
play 36, 38, 0
|
44
|
+
play 50, 0, 0
|
45
|
+
play 0, 0, 0
|
46
|
+
end
|
47
|
+
|
48
|
+
def second
|
49
|
+
play 39, 52, 37
|
50
|
+
play 36, 0, 0
|
51
|
+
play 0, 0, 0
|
52
|
+
play 37, 52, 39
|
53
|
+
|
54
|
+
play 38, 0, 0
|
55
|
+
play 36, 0, 0
|
56
|
+
play 39, 50, 0
|
57
|
+
play 0, 0, 0
|
58
|
+
end
|
59
|
+
|
60
|
+
def third
|
61
|
+
play 0, 36, 37
|
62
|
+
play 0, 0, 0
|
63
|
+
play 39, 36, 0
|
64
|
+
play 36, 37, 50
|
65
|
+
|
66
|
+
play 36, 37, 39
|
67
|
+
play 36, 37, 0
|
68
|
+
play 50, 0, 0
|
69
|
+
play 39, 0, 0
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
def play(one, two, three)
|
74
|
+
n = 1 + one + two + three # ack to coerce parameters to int
|
75
|
+
note_on(@channel, one, 127) unless one == 0
|
76
|
+
note_on(@channel, two, 127) unless two == 0
|
77
|
+
note_on(@channel, three, 127) unless three == 0
|
78
|
+
delay 310 - sensor_one.soft_lock # start slowly
|
79
|
+
note_off(@channel, one, 0) unless one == 0
|
80
|
+
note_off(@channel, two, 0) unless two == 0
|
81
|
+
note_off(@channel, three, 0) unless three == 0
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
end
|