rad 0.2.2 → 0.2.9
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 +34 -0
- data/Manifest.txt +113 -7
- data/{README.txt → README.rdoc} +17 -5
- data/Rakefile +3 -0
- data/bin/rad +106 -1
- 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/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/{SWSerLCDpa → DS1307}/keywords.txt +1 -1
- 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 +93 -47
- data/lib/libraries/SWSerLCDpa/SWSerLCDpa.h +16 -9
- 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 +351 -257
- data/lib/rad/generators/makefile/makefile.erb +1 -1
- data/lib/rad/generators/makefile/makefile.rb +9 -10
- data/lib/rad/hardware_library.rb +813 -0
- data/lib/rad/init.rb +3 -1
- 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 +146 -24
- data/lib/rad/variable_processing.rb +153 -0
- data/lib/rad/version.rb +1 -1
- data/spec/examples/hello_world.rb +11 -0
- data/spec/examples/serial_motor.rb +12 -0
- data/spec/models/sketch_compiler_spec.rb +96 -0
- data/spec/sim/hello_world_spec.rb +42 -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/index.html +22 -7
- data/website/stylesheets/screen.css +32 -1
- metadata +130 -13
|
@@ -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
|