neo_rad 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. checksums.yaml +7 -0
  2. data/History.txt +112 -0
  3. data/License.txt +282 -0
  4. data/Manifest.txt +144 -0
  5. data/README.rdoc +1 -0
  6. data/Rakefile +142 -0
  7. data/bin/rad +302 -0
  8. data/lib/examples/add_hysteresis.rb +13 -0
  9. data/lib/examples/basic_blink.rb +10 -0
  10. data/lib/examples/blink_m_address_assignment.rb +104 -0
  11. data/lib/examples/blink_m_hello.rb +14 -0
  12. data/lib/examples/blink_m_multi.rb +61 -0
  13. data/lib/examples/blink_with_serial.rb +16 -0
  14. data/lib/examples/configure_pa_lcd_boot.rb +91 -0
  15. data/lib/examples/debounce_methods.rb +49 -0
  16. data/lib/examples/external_variable_fu.rb +26 -0
  17. data/lib/examples/external_variables.rb +32 -0
  18. data/lib/examples/first_sound.rb +23 -0
  19. data/lib/examples/frequency_generator.rb +30 -0
  20. data/lib/examples/hello_array.rb +48 -0
  21. data/lib/examples/hello_array2.rb +112 -0
  22. data/lib/examples/hello_array_eeprom.rb +59 -0
  23. data/lib/examples/hello_clock.rb +84 -0
  24. data/lib/examples/hello_eeprom.rb +51 -0
  25. data/lib/examples/hello_eeprom_lcdpa.rb +81 -0
  26. data/lib/examples/hello_format_print.rb +94 -0
  27. data/lib/examples/hello_lcd_charset.rb +75 -0
  28. data/lib/examples/hello_pa_lcd.rb +59 -0
  29. data/lib/examples/hello_servos.rb +88 -0
  30. data/lib/examples/hello_spectra_sound.rb +38 -0
  31. data/lib/examples/hello_world.rb +11 -0
  32. data/lib/examples/hello_xbee.rb +12 -0
  33. data/lib/examples/hysteresis_duel.rb +39 -0
  34. data/lib/examples/i2c_with_clock_chip.rb +124 -0
  35. data/lib/examples/midi_beat_box.rb +86 -0
  36. data/lib/examples/midi_scales.rb +94 -0
  37. data/lib/examples/motor_knob.rb +30 -0
  38. data/lib/examples/servo_buttons.rb +23 -0
  39. data/lib/examples/servo_calibrate_continuous.rb +92 -0
  40. data/lib/examples/servo_throttle.rb +40 -0
  41. data/lib/examples/software_serial.rb +10 -0
  42. data/lib/examples/sparkfun_lcd.rb +48 -0
  43. data/lib/examples/spectra_soft_pot.rb +34 -0
  44. data/lib/examples/times_method.rb +8 -0
  45. data/lib/examples/toggle.rb +10 -0
  46. data/lib/examples/twitter.rb +57 -0
  47. data/lib/examples/two_wire.rb +14 -0
  48. data/lib/libraries/AFSoftSerial/AFSoftSerial.cpp +321 -0
  49. data/lib/libraries/AFSoftSerial/AFSoftSerial.h +61 -0
  50. data/lib/libraries/AFSoftSerial/keywords.txt +18 -0
  51. data/lib/libraries/AF_XPort/AF_XPort.cpp +166 -0
  52. data/lib/libraries/AF_XPort/AF_XPort.h +48 -0
  53. data/lib/libraries/DS1307/DS1307.cpp +162 -0
  54. data/lib/libraries/DS1307/DS1307.h +66 -0
  55. data/lib/libraries/DS1307/keywords.txt +18 -0
  56. data/lib/libraries/FrequencyTimer2/FrequencyTimer2.cpp +144 -0
  57. data/lib/libraries/FrequencyTimer2/FrequencyTimer2.h +42 -0
  58. data/lib/libraries/FrequencyTimer2/keywords.txt +22 -0
  59. data/lib/libraries/I2CEEPROM/I2CEEPROM.cpp +120 -0
  60. data/lib/libraries/I2CEEPROM/I2CEEPROM.h +70 -0
  61. data/lib/libraries/I2CEEPROM/keywords.txt +21 -0
  62. data/lib/libraries/LoopTimer/LoopTimer.cpp +35 -0
  63. data/lib/libraries/LoopTimer/LoopTimer.h +34 -0
  64. data/lib/libraries/LoopTimer/keywords.txt +27 -0
  65. data/lib/libraries/OneWire/OneWire.cpp +194 -0
  66. data/lib/libraries/OneWire/OneWire.h +63 -0
  67. data/lib/libraries/OneWire/keywords.txt +35 -0
  68. data/lib/libraries/OneWire/readme.txt +13 -0
  69. data/lib/libraries/SWSerLCDpa/SWSerLCDpa.cpp +296 -0
  70. data/lib/libraries/SWSerLCDpa/SWSerLCDpa.h +69 -0
  71. data/lib/libraries/SWSerLCDsf/SWSerLCDsf.cpp +311 -0
  72. data/lib/libraries/SWSerLCDsf/SWSerLCDsf.h +67 -0
  73. data/lib/libraries/Servo/Servo.cpp +192 -0
  74. data/lib/libraries/Servo/Servo.h +61 -0
  75. data/lib/libraries/Stepper/Stepper.cpp +220 -0
  76. data/lib/libraries/Stepper/Stepper.h +86 -0
  77. data/lib/libraries/Stepper/keywords.txt +28 -0
  78. data/lib/libraries/Wire/Wire.cpp +262 -0
  79. data/lib/libraries/Wire/Wire.h +67 -0
  80. data/lib/libraries/Wire/keywords.txt +31 -0
  81. data/lib/libraries/Wire/twi.h +57 -0
  82. data/lib/libraries/Wire/utility/twi.c +449 -0
  83. data/lib/libraries/Wire/utility/twi.h +57 -0
  84. data/lib/plugins/bitwise_ops.rb +54 -0
  85. data/lib/plugins/blink.rb +25 -0
  86. data/lib/plugins/blink_m.rb +356 -0
  87. data/lib/plugins/debounce.rb +138 -0
  88. data/lib/plugins/debug_output_to_lcd.rb +71 -0
  89. data/lib/plugins/hysteresis.rb +52 -0
  90. data/lib/plugins/input_output_state.rb +84 -0
  91. data/lib/plugins/lcd_padding.rb +58 -0
  92. data/lib/plugins/mem_test.rb +37 -0
  93. data/lib/plugins/midi.rb +60 -0
  94. data/lib/plugins/parallax_ping.rb +50 -0
  95. data/lib/plugins/servo_pulse.rb +31 -0
  96. data/lib/plugins/servo_setup.rb +86 -0
  97. data/lib/plugins/smoother.rb +54 -0
  98. data/lib/plugins/spark_fun_serial_lcd.rb +100 -0
  99. data/lib/plugins/spectra_symbol.rb +79 -0
  100. data/lib/plugins/twitter_connect.rb +145 -0
  101. data/lib/rad/README.rdoc +5 -0
  102. data/lib/rad/arduino_plugin.rb +246 -0
  103. data/lib/rad/arduino_sketch.rb +628 -0
  104. data/lib/rad/darwin_installer.rb +23 -0
  105. data/lib/rad/generators/makefile/makefile.erb +243 -0
  106. data/lib/rad/generators/makefile/makefile.rb +38 -0
  107. data/lib/rad/hardware_library.rb +813 -0
  108. data/lib/rad/init.rb +15 -0
  109. data/lib/rad/linux_installer.rb +132 -0
  110. data/lib/rad/progressbar.rb +236 -0
  111. data/lib/rad/rad_processor.rb +128 -0
  112. data/lib/rad/rad_rewriter.rb +94 -0
  113. data/lib/rad/rad_type_checker.rb +26 -0
  114. data/lib/rad/sim/arduino_sketch.rb +57 -0
  115. data/lib/rad/sketch_compiler.rb +47 -0
  116. data/lib/rad/tasks/build_and_make.rake +210 -0
  117. data/lib/rad/tasks/rad.rb +2 -0
  118. data/lib/rad/todo.txt +13 -0
  119. data/lib/rad/variable_processing.rb +153 -0
  120. data/lib/rad/version.rb +9 -0
  121. data/lib/rad.rb +5 -0
  122. data/scripts/txt2html +67 -0
  123. data/setup.rb +1585 -0
  124. data/spec/examples/hello_world.rb +11 -0
  125. data/spec/examples/serial_motor.rb +12 -0
  126. data/spec/models/arduino_sketch_spec.rb +82 -0
  127. data/spec/models/sketch_compiler_spec.rb +96 -0
  128. data/spec/models/spec_helper.rb +2 -0
  129. data/spec/sim/hello_world_spec.rb +42 -0
  130. data/spec/spec.opts +1 -0
  131. data/test/hello_world_test/Makefile +436 -0
  132. data/test/hello_world_test/hello_world.cpp +23 -0
  133. data/test/test_array_processing.rb +179 -0
  134. data/test/test_plugin_loading.rb +151 -0
  135. data/test/test_translation_post_processing.rb +185 -0
  136. data/test/test_variable_processing.rb +238 -0
  137. data/website/examples/assembler_test.rb.html +73 -0
  138. data/website/examples/gps_reader.rb.html +39 -0
  139. data/website/examples/hello_world.rb.html +38 -0
  140. data/website/examples/serial_motor.rb.html +41 -0
  141. data/website/index.html +178 -0
  142. data/website/index.txt +64 -0
  143. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  144. data/website/stylesheets/screen.css +169 -0
  145. data/website/template.rhtml +48 -0
  146. metadata +222 -0
@@ -0,0 +1,91 @@
1
+ class ConfigurePaLcdBoot < ArduinoSketch
2
+
3
+ ## important!
4
+ ## most pa_lcd rates are set to 9200, but there are some newer at 19200
5
+ ## if you have a 19200, uncomment the end of line 38
6
+
7
+ ## purpose:
8
+ ## change cursor to none
9
+ ## and add custom boot screen
10
+ ##
11
+ ## jd's preferred setup for pa_lcd
12
+ ##
13
+ ## assumes 4 x 20 pa_lcd
14
+ ##
15
+ ## no blinking cursor press button 1
16
+ ## configure custom start up screen - press button 2
17
+ ## configure lcd to use custom startup screen - press button 3
18
+ ##
19
+ ## press buttons one, two and three
20
+ ## or season to taste
21
+ ##
22
+ ## refernce
23
+ ## K107 LCD Controller Board Manual
24
+ ## page 11 for cursors
25
+ ## page 13 for custom boot
26
+ ## http://wulfden.org/downloads/manuals/K107manual.pdf
27
+ ##
28
+ ##
29
+
30
+ ## set pins to your setup
31
+
32
+
33
+ input_pin 8, :as => :button_one, :device => :button
34
+ input_pin 9, :as => :button_two, :device => :button
35
+ input_pin 10, :as => :button_three, :device => :button
36
+
37
+ ## note, most of these controllers are set to 9200
38
+ output_pin 14, :as => :my_lcd, :device => :pa_lcd #, :rate => 19200
39
+
40
+
41
+ def loop
42
+ set_cursor if button_one.read_input
43
+ set_custom_screen if button_two.read_input
44
+ change_boot_to_custom if button_three.read_input
45
+ end
46
+
47
+ ## assumes 4 x 20 screen
48
+ ## maintain 20 characters after ?Cn
49
+ ## wny delays? the controller needs them to give it
50
+ ## enough time to write 20 bytes to internl EEPROM
51
+ def set_custom_screen
52
+ my_lcd.clearscr
53
+ my_lcd.print "?C0 RAD & Arduino "
54
+ delay 400
55
+ my_lcd.print "?C1 Development "
56
+ delay 400
57
+ my_lcd.print "?C2 "
58
+ delay 400
59
+ my_lcd.print "?C3 v0.3.0 "
60
+ end
61
+
62
+
63
+ ## ?c0 for no cursor
64
+ ## ?c2 for non blinking cursor
65
+ ## ?c3 for blinking cursor
66
+ def set_cursor
67
+ my_lcd.clearscr
68
+ my_lcd.print "Changing to "
69
+ my_lcd.setxy 0,1
70
+ my_lcd.print "no cursor. "
71
+ my_lcd.setxy 0,3
72
+ my_lcd.print "Reboot to view... "
73
+
74
+ my_lcd.print("?c0")
75
+ end
76
+
77
+ ## "?S0 for blank screen
78
+ ## ?S1 for configuration settings
79
+ ## ?S2 for custom text screen
80
+ def change_boot_to_custom
81
+ my_lcd.clearscr
82
+ my_lcd.print "Changing to "
83
+ my_lcd.setxy 0,1
84
+ my_lcd.print "custom boot screen. "
85
+ my_lcd.setxy 0,3
86
+ my_lcd.print "Reboot to view... "
87
+ my_lcd.print("?S2")
88
+ end
89
+
90
+
91
+ end
@@ -0,0 +1,49 @@
1
+ class DebounceMethods < ArduinoSketch
2
+
3
+ output_pin 13, :as => :led
4
+ input_pin 6, :as => :button_one, :device => :button # can also :adjust => 300
5
+ input_pin 7, :as => :button_two, :device => :button
6
+ input_pin 8, :as => :button_three, :device => :button
7
+ input_pin 9, :as => :button_four, :device => :button
8
+ input_pin 10, :as => :button_five, :device => :button
9
+
10
+ # depressing and releasing button_one, button_two or button_four do the same thing
11
+ # with a slightly different syntax and number of blinks
12
+ # button_three simply toggles the led with the read_and_toggle method
13
+ # button_five does it with a twist
14
+
15
+ def loop
16
+ blink_twice if read_input button_one
17
+ blink_three_times if read_input button_two
18
+ button_three.read_and_toggle led #
19
+ blink_three_times_basic if read_input button_four
20
+ blink_with_a_twist if read_input button_five
21
+ end
22
+
23
+ def blink_twice
24
+ 2.times do |i|
25
+ led.blink 200 + i
26
+ end
27
+ end
28
+
29
+ def blink_three_times
30
+ 3.times { led.blink 200 }
31
+ end
32
+
33
+ # no blink helper
34
+ def blink_three_times_basic
35
+ 4.times do
36
+ led.digitalWrite HIGH
37
+ delay 200
38
+ led.digitalWrite LOW
39
+ delay 200
40
+ end
41
+ end
42
+
43
+ def blink_with_a_twist
44
+ 20.times do |i|
45
+ led.blink i * 10
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,26 @@
1
+ class ExternalVariableFu < ArduinoSketch
2
+
3
+ @one = int
4
+ @two = long
5
+ @three = unsigned
6
+ @four = short
7
+ @five = byte
8
+ @six = 1
9
+ @seven = 1.2
10
+ @eight = "0x00"
11
+ @nine = "arduino"
12
+ @ten = true
13
+ @eleven = false
14
+ @twelve = "1, long"
15
+ @thirteen = "1, unsigned"
16
+ @fourteen = "1, byte"
17
+ @fifteen = HIGH
18
+ @sixteen = LOW
19
+ @seventeen = ON
20
+ @eighteen = OFF
21
+
22
+ def loop
23
+ delay @six
24
+ end
25
+
26
+ end
@@ -0,0 +1,32 @@
1
+ class ExternalVariables < ArduinoSketch
2
+
3
+ define "KOOL 10"
4
+ define "TRUE 1"
5
+ define "COMMENT true"
6
+ define "DS1307_CTRL 7"
7
+ define "DS1308_CTRL 7"
8
+ array "char buffer[32];"
9
+ array "char bufferz[32];"
10
+
11
+
12
+ @foo = 1
13
+ @bidda = "badda"
14
+ @boom = "1, int"
15
+ @rad = "1.00"
16
+
17
+ def loop
18
+ delay 1
19
+ @foo = 2
20
+ @foo = KOOL
21
+ end
22
+
23
+ def setup # special one time only method
24
+ delay 100
25
+ delay 100
26
+ @foo = 10
27
+ 5.times { delay 200 }
28
+
29
+ end
30
+
31
+
32
+ end
@@ -0,0 +1,23 @@
1
+ class FirstSound < ArduinoSketch
2
+
3
+
4
+
5
+ output_pin 11, :as => :myTone, :device => :freq_out, :frequency => 100 # frequency required
6
+
7
+ def loop
8
+ myTone.disable
9
+ 1.upto(400) { |x| tone_out x } # run up the scale to 4000 Hz in 10 Hz steps
10
+ 399.downto(1) { |x| tone_out x } # come back down in 10 Hz steps
11
+ delay 2000
12
+ end
13
+
14
+ def tone_out(n)
15
+ myTone.set_frequency 10*n
16
+ myTone.enable
17
+ delay 80
18
+ myTone.disable
19
+ delay 10
20
+ end
21
+
22
+
23
+ end
@@ -0,0 +1,30 @@
1
+ class FrequencyGenerator < ArduinoSketch
2
+
3
+ # need explaination
4
+
5
+ output_pin 11, :as => :myTone, :device => :freq_out, :frequency => 100
6
+
7
+ def loop
8
+ uh_oh 4
9
+ end
10
+
11
+ def uh_oh(n)
12
+
13
+
14
+ n.times do
15
+ myTone.enable
16
+ myTone.set_frequency 1800
17
+ delay 500
18
+ myTone.disable
19
+ delay 100
20
+ myTone.enable
21
+ myTone.set_frequency 1800
22
+ delay 800
23
+ myTone.enable
24
+ end
25
+ # hack to help translator guess that n is an int
26
+ f = n + 0
27
+ end
28
+
29
+
30
+ end
@@ -0,0 +1,48 @@
1
+ class HelloArray < ArduinoSketch
2
+
3
+ # still working this out...
4
+ # for example, new instance style array declaration naming
5
+ # is at odds with original style array naming
6
+
7
+ # for simple integer, string, float, and boolean arrays
8
+ @toppings = [1,2,3]
9
+ @names = ["ciero", "bianca", "antica"]
10
+
11
+ # when we just need to declare an array, or need more control, such as specific type requirements
12
+ array "int ingredients[10]"
13
+ array "int pizzas[] = {1,2,3,4}"
14
+
15
+ output_pin 5, :as => :my_lcd, :device => :pa_lcd, :rate => 19200, :clear_screen => :true
16
+
17
+
18
+ def loop
19
+
20
+ my_lcd.clearscr "toppings: "
21
+ delay 500
22
+
23
+ @toppings.each do |a|
24
+ my_lcd.print a
25
+ my_lcd.print " "
26
+ delay 500
27
+ end
28
+
29
+ my_lcd.setxy 0,1, "pizzas: "
30
+
31
+ pizzas.each do |p|
32
+ my_lcd.print p
33
+ my_lcd.print " "
34
+ delay 500
35
+ end
36
+
37
+ my_lcd.setxy 0,2, "names: "
38
+
39
+ @names.each do |p|
40
+ my_lcd.print p
41
+ my_lcd.print " "
42
+ delay 500
43
+ end
44
+
45
+
46
+ end
47
+
48
+ end
@@ -0,0 +1,112 @@
1
+ class HelloArray2 < ArduinoSketch
2
+
3
+ # ----------------------------------------------------------------------
4
+ # Checking out various array operations
5
+ #
6
+ # JD Barnhart - Seattle, WA July 2008
7
+ # Brian Riley - Underhill Center, VT, USA July 2008
8
+ # <brianbr@wulfden.org>
9
+ #
10
+ # ----------------------------------------------------------------------
11
+
12
+ # still working this out...
13
+ # for example, new instance style array declaration naming
14
+ # is at odds with original style array naming
15
+
16
+ define "THROWAWAY 0"
17
+
18
+ # for simple integer, string, float, and boolean arrays
19
+ @toppings = [1,2,3]
20
+ @names = ["ciero", "bianca", "zeus", "athena", "apollo"]
21
+
22
+ # when we just need to declare an array, or need more control, such as specific type requirements
23
+ array "int ingredients[10]"
24
+ array "int pizzas[] = {1,2,3,4}"
25
+ array "byte buffer[20] = {'A', 'B', 'Z', 'C', 'Y', 'D', 'W', 'E', '%', 'H', '*', '!', ')', '=', 'P', '-', '+', 'R', 'I', 'K'}"
26
+
27
+ ## multidimensional arrays
28
+ array 'int @my_numbers[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}'
29
+ array 'char* @pizzas[2][4] = {{"margherita","funghi","napoletana","prosciutto cotto"},{"veggie","pepperoni","cheese","kitchen sink"}}'
30
+
31
+
32
+ output_pin 5, :as => :my_lcd, :device => :pa_lcd, :rate => 19200, :clear_screen => :true
33
+
34
+
35
+ def setup
36
+
37
+ my_lcd.clearscr "toppings: "
38
+ delay 500
39
+
40
+ @toppings.each do |a|
41
+ my_lcd.print a
42
+ my_lcd.print " "
43
+ delay 500
44
+ end
45
+
46
+ my_lcd.setxy 0,1, "pizzas: "
47
+
48
+ pizzas.each do |p|
49
+ my_lcd.print p
50
+ my_lcd.print " "
51
+ delay 500
52
+ end
53
+
54
+ my_lcd.setxy 0,2, "names: "
55
+
56
+ @names.each do |p|
57
+ my_lcd.print p
58
+ my_lcd.print " "
59
+ delay 500
60
+ end
61
+
62
+ delay 3000
63
+
64
+
65
+
66
+ my_lcd.clearline 1, @names[2]
67
+ my_lcd.print " [ "
68
+ my_lcd.print pizzas[1]
69
+ my_lcd.print " ]"
70
+
71
+ delay 2000
72
+
73
+ my_lcd.clearscr "Multidimensional ?n"
74
+
75
+ 0.upto(2) do |f|
76
+ 0.upto(3) do |s|
77
+ my_lcd.print @my_numbers[f][s]
78
+ my_lcd.print ", "
79
+ delay 500
80
+ end
81
+ end
82
+
83
+ delay 1000
84
+
85
+ my_lcd.clearscr
86
+
87
+ 0.upto(1) do |f|
88
+ 0.upto(3) do |s|
89
+ my_lcd.print @pizzas[f][s]
90
+ my_lcd.print ", "
91
+ delay 500
92
+ end
93
+ end
94
+
95
+
96
+
97
+ delay 2000
98
+
99
+ my_lcd.clearscr "Array Load?n"
100
+ 1.upto(20) do |x|
101
+ # buffer[x] = 64 + x # we cannot set array elements yet except to initialize in declaration
102
+ my_lcd.print buffer[x-1]
103
+ my_lcd.print " "
104
+ end
105
+
106
+ end
107
+
108
+ def loop
109
+ x = THROWAWAY
110
+ end
111
+
112
+ end
@@ -0,0 +1,59 @@
1
+ class HelloArrayEeprom < ArduinoSketch
2
+
3
+ # ----------------------------------------------------------------------
4
+ # Checking out various array operations with I2C serial EEPROM
5
+ # doing block writes and bloack readbacks with byte arrays
6
+ #
7
+ # JD Barnhart - Seattle, WA July 2008
8
+ # Brian Riley - Underhill Center, VT, USA July 2008
9
+ # <brianbr@wulfden.org>
10
+ #
11
+ # ----------------------------------------------------------------------
12
+
13
+ # still working this out...
14
+ # for example, new instance style array declaration naming
15
+ # is at odds with original style array naming
16
+
17
+ define "THROWAWAY 0"
18
+
19
+ # when we just need to declare an array, or need more control, such as specific type requirements
20
+ array "byte page_data[20] = {'R', 'A', 'D', ' ', 'i', 's', ' ', 'B', 'A', 'D', '*', '!', ')', '=', 'P', '-', '+', 'R', 'I', 'K'}"
21
+ array "byte in_buffer[20]"
22
+
23
+ output_pin 19, :as => :mem0, :device => :i2c_eeprom, :address => 1 # w/o :address defaults to :address => 0 which is 0x50
24
+ output_pin 14, :as => :my_lcd, :device => :pa_lcd, :rate => 19200
25
+
26
+
27
+ def setup
28
+
29
+ my_lcd.clearscr " I2C EEPROM Demo"
30
+ my_lcd.setxy 0, 1, "block write and read"
31
+ my_lcd.setxy 0, 2, " back and display"
32
+ my_lcd.setxy 0, 3, " to the LCD"
33
+
34
+ delay 2000
35
+
36
+ my_lcd.clearscr " I2C EEPROM Demo?n block write"
37
+
38
+ mem0.write_page 0x0100, page_data, 20
39
+
40
+ delay 1000
41
+
42
+ my_lcd.clearline 1, " block readback"
43
+
44
+ mem0.read_buffer 0x0100, in_buffer, 20
45
+
46
+ my_lcd.setxy 0, 2
47
+
48
+ 1.upto(20) do |x|
49
+ my_lcd.print in_buffer[x-1]
50
+ my_lcd.print " "
51
+ end
52
+
53
+ end
54
+
55
+ def loop
56
+ x = THROWAWAY
57
+ end
58
+
59
+ end
@@ -0,0 +1,84 @@
1
+ class HelloClock < 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
+ #
12
+ # Comment
13
+ # - This is a straight forward program to read the Real Time Clock and Display
14
+ # delay() calls waiting for temperature conversion readings
15
+ #
16
+ # - for the external data busses make sure you have 4.7K pullup resistors on the
17
+ # the SDA/SCL (I2C)
18
+ #
19
+ # ----------------------------------------------------------------------------------
20
+
21
+ @flag = int
22
+
23
+ array "byte clock[8]"
24
+
25
+ @days = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]
26
+ @months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
27
+
28
+ # implicit in :device => :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
+ loop_timer :as => :mainloop
35
+
36
+
37
+ def setup
38
+ myLCD.clearscr " --<Date/Time>--"
39
+ myLCD.setxy 1,3, "looptime = "
40
+ rtc.get clock, 1
41
+ print_main
42
+ @flag = 1
43
+ end
44
+
45
+ def loop
46
+ mainloop.track
47
+ myLCD.setxy 12,3, mainloop.get_total
48
+ rtc.get clock, 1
49
+ if clock[0] == 0
50
+ if @flag == 0
51
+ print_main
52
+ @flag = 1
53
+ end
54
+ else
55
+ @flag = 0
56
+ end
57
+ myLCD.setxy 6,2
58
+ printlz clock[2]
59
+ myLCD.print ":"
60
+ printlz clock[1]
61
+ myLCD.print ":"
62
+ printlz clock[0]
63
+
64
+ delay 50
65
+
66
+ end
67
+
68
+ def printlz(w)
69
+ myLCD.print "0" if w < 10
70
+ myLCD.print w
71
+ end
72
+
73
+ def print_main
74
+ myLCD.setxy 1,1, @days[clock[3]-1]
75
+ myLCD.print ", "
76
+ myLCD.print @months[clock[5]-1]
77
+ myLCD.print " "
78
+ printlz clock[4]
79
+ myLCD.print ", "
80
+ printlz clock[6] + 2000
81
+
82
+ end
83
+
84
+ end
@@ -0,0 +1,51 @@
1
+ class HelloEeprom < ArduinoSketch
2
+
3
+ output_pin 19, :as => :rtc, :device => :i2c_ds1307, :enable => :true
4
+ output_pin 19, :as => :mem0, :device => :i2c_eeprom
5
+
6
+ output_pin 14, :as => :myLCD, :device => :pa_lcd, :rate => 19200
7
+
8
+ def loop
9
+ myLCD.setxy 0,0 # set to 0,0
10
+ myLCD.print rtc.get(5, 1) # refresh registers (=1) get month
11
+ myLCD.print "/"
12
+ myLCD.print rtc.get(4, 0) # no need to refresh (=0) get day
13
+ myLCD.print "/"
14
+ myLCD.print rtc.get(6, 0) # get year
15
+ myLCD.setxy(0,1) # set in 1 byte line 1 (second line)
16
+ printlz 2 # print hours with lead zero
17
+ myLCD.print ":"
18
+ printlz 1 # print minutes with lead zero
19
+ myLCD.print ":"
20
+ printlz 0 # print seconds with lead zero
21
+
22
+
23
+ myLCD.setxy 10,0
24
+ myLCD.print "write test"
25
+ myLCD.setxy 0,2
26
+ 32.upto(109) do # write address of byte to that b yte
27
+ |x| mem0.write_byte x, x
28
+ myLCD.print(".") if x%2
29
+ delay 10
30
+ end
31
+
32
+ delay 2000
33
+
34
+ myLCD.clearline 2 # clears bottom two lines
35
+ myLCD.clearline 3
36
+
37
+ myLCD.setxy 10,0, "read test "
38
+ myLCD.setxy 0,2
39
+ # read and print 39 addresses with printable numbers
40
+ 75.upto(113) { |x| myLCD.print(mem0.read_byte(x)) }
41
+ delay 10000
42
+ myLCD.clearscr
43
+ end
44
+
45
+ def printlz(w)
46
+ i = 0 + rtc.get(w,0) # the '0 +' is YARH (Yet Another RubyToc Hack)
47
+ myLCD.print "0" if i < 10
48
+ myLCD.print i
49
+ end
50
+
51
+ end
@@ -0,0 +1,81 @@
1
+ class HelloEepromLcdpa < ArduinoSketch
2
+ # -----------------------------------------------------------------------
3
+ # Simple Byte Write and Byte Read-back of I2C EEPROM
4
+ #
5
+ # Brian Riley - Underhill Center, VT, USA July 2008
6
+ # <brianbr@wulfden.org>
7
+ #
8
+ # I2C Routines are in a plugin not a library
9
+ # No block reads and write yet
10
+ # Displays to PH Anderson based serial LCD Display
11
+ #
12
+ # <b>I2C Serial EEPROM - Byte Read and Byte Write</b>
13
+ #
14
+ # i2c_eeprom_write_byte dev_addr, chip_addr, value
15
+ #
16
+ # dev_addr (byte) - range 0x50 to 0x57 determined by hardware wiring
17
+ # chip_addr (unsigned) - 0 to as much as 64K, depends on chip
18
+ # value (byte) - 0 to 255 (0x00 to 0xFF)
19
+ #
20
+ # returns - nothing
21
+ #
22
+ # i2c_eeprom_read_byte dev_addr, chip_addr
23
+ #
24
+ # dev_addr (byte) - range 0x50 to 0x57 determined by hardware wiring
25
+ # chip_addr (unsigned) - 0 to as much as 64K, depends on chip
26
+ #
27
+ # returns - byte value
28
+ #
29
+ #
30
+ # http://www.arduino.cc/playground/Code/I2CEEPROM
31
+ # ----------------------------------------------------------------------
32
+
33
+ output_pin 19, :as => :mem0, :device => :i2c_eeprom, :enable => :true
34
+ output_pin 14, :as => :myLCD, :device => :pa_lcd, :rate => 19200
35
+
36
+
37
+
38
+ def setup
39
+ delay 1500 # give startup screen time to finish and clear
40
+ myLCD.clearscr " I2C EEPROM Demo"
41
+ myLCD.setxy 0, 1, "byte write then read"
42
+ myLCD.setxy 0, 2, " back and display"
43
+ myLCD.setxy 0, 3, " to the LCD"
44
+
45
+ clear_off_test
46
+ myLCD.clearline 1, " byte write test"
47
+
48
+ myLCD.setxy 0, 2
49
+ 32.upto(109) do # write address of byte to that b yte
50
+ |x| mem0.write_byte x, x+7
51
+ myLCD.print(".") if x%2
52
+ delay 10 # EEPROM write _requires_ 3-10 ms pause
53
+ end
54
+
55
+ clear_off_test
56
+ myLCD.clearline 1, " byte read test "
57
+
58
+ myLCD.setxy 0, 2
59
+ # read and print 39 addresses with printable numbers
60
+ 70.upto(105) { |x| myLCD.print(mem0.read_byte(x)) }
61
+
62
+ delay 2000
63
+ clear_off_test
64
+ myLCD.clearline 1, "-< tests complete >- "
65
+
66
+
67
+ end
68
+
69
+ def loop
70
+ x = 4 # loop has to have _something_
71
+ end
72
+
73
+
74
+ def clear_off_test # clears bottom two lines
75
+ delay 2000
76
+ myLCD.clearline 3
77
+ myLCD.clearline 2 # leaves you at start of a
78
+ # cleared third line
79
+ end
80
+
81
+ end