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.
Files changed (123) hide show
  1. data/History.txt +34 -0
  2. data/Manifest.txt +113 -7
  3. data/{README.txt → README.rdoc} +17 -5
  4. data/Rakefile +3 -0
  5. data/bin/rad +106 -1
  6. data/lib/examples/add_hysteresis.rb +13 -0
  7. data/lib/examples/basic_blink.rb +10 -0
  8. data/lib/examples/blink_m_address_assignment.rb +104 -0
  9. data/lib/examples/blink_m_hello.rb +14 -0
  10. data/lib/examples/blink_m_multi.rb +61 -0
  11. data/lib/examples/blink_with_serial.rb +16 -0
  12. data/lib/examples/configure_pa_lcd_boot.rb +91 -0
  13. data/lib/examples/debounce_methods.rb +49 -0
  14. data/lib/examples/external_variable_fu.rb +26 -0
  15. data/lib/examples/external_variables.rb +32 -0
  16. data/lib/examples/first_sound.rb +23 -0
  17. data/lib/examples/frequency_generator.rb +30 -0
  18. data/lib/examples/hello_array.rb +48 -0
  19. data/lib/examples/hello_array2.rb +79 -0
  20. data/lib/examples/hello_array_eeprom.rb +59 -0
  21. data/lib/examples/hello_clock.rb +84 -0
  22. data/lib/examples/hello_eeprom.rb +51 -0
  23. data/lib/examples/hello_eeprom_lcdpa.rb +81 -0
  24. data/lib/examples/hello_format_print.rb +94 -0
  25. data/lib/examples/hello_lcd_charset.rb +75 -0
  26. data/lib/examples/hello_pa_lcd.rb +59 -0
  27. data/lib/examples/hello_servos.rb +88 -0
  28. data/lib/examples/hello_spectra_sound.rb +38 -0
  29. data/lib/examples/hello_world.rb +11 -0
  30. data/lib/examples/hello_xbee.rb +12 -0
  31. data/lib/examples/hysteresis_duel.rb +39 -0
  32. data/lib/examples/i2c_with_clock_chip.rb +124 -0
  33. data/lib/examples/midi_beat_box.rb +86 -0
  34. data/lib/examples/midi_scales.rb +94 -0
  35. data/lib/examples/motor_knob.rb +30 -0
  36. data/lib/examples/servo_buttons.rb +23 -0
  37. data/lib/examples/servo_calibrate_continuous.rb +92 -0
  38. data/lib/examples/servo_throttle.rb +40 -0
  39. data/lib/examples/sparkfun_lcd.rb +48 -0
  40. data/lib/examples/spectra_soft_pot.rb +34 -0
  41. data/lib/examples/times_method.rb +8 -0
  42. data/lib/examples/toggle.rb +10 -0
  43. data/lib/examples/twitter.rb +57 -0
  44. data/lib/examples/two_wire.rb +14 -0
  45. data/lib/libraries/AFSoftSerial/AFSoftSerial.cpp +321 -0
  46. data/lib/libraries/AFSoftSerial/AFSoftSerial.h +61 -0
  47. data/lib/libraries/AFSoftSerial/keywords.txt +18 -0
  48. data/lib/libraries/AF_XPort/AF_XPort.cpp +166 -0
  49. data/lib/libraries/AF_XPort/AF_XPort.h +48 -0
  50. data/lib/libraries/DS1307/DS1307.cpp +162 -0
  51. data/lib/libraries/DS1307/DS1307.h +66 -0
  52. data/lib/libraries/{SWSerLCDpa → DS1307}/keywords.txt +1 -1
  53. data/lib/libraries/FrequencyTimer2/FrequencyTimer2.cpp +144 -0
  54. data/lib/libraries/FrequencyTimer2/FrequencyTimer2.h +42 -0
  55. data/lib/libraries/FrequencyTimer2/keywords.txt +22 -0
  56. data/lib/libraries/I2CEEPROM/I2CEEPROM.cpp +120 -0
  57. data/lib/libraries/I2CEEPROM/I2CEEPROM.h +70 -0
  58. data/lib/libraries/I2CEEPROM/keywords.txt +21 -0
  59. data/lib/libraries/LoopTimer/LoopTimer.cpp +35 -0
  60. data/lib/libraries/LoopTimer/LoopTimer.h +34 -0
  61. data/lib/libraries/LoopTimer/keywords.txt +27 -0
  62. data/lib/libraries/OneWire/OneWire.cpp +194 -0
  63. data/lib/libraries/OneWire/OneWire.h +63 -0
  64. data/lib/libraries/OneWire/keywords.txt +35 -0
  65. data/lib/libraries/OneWire/readme.txt +13 -0
  66. data/lib/libraries/SWSerLCDpa/SWSerLCDpa.cpp +93 -47
  67. data/lib/libraries/SWSerLCDpa/SWSerLCDpa.h +16 -9
  68. data/lib/libraries/SWSerLCDsf/SWSerLCDsf.cpp +311 -0
  69. data/lib/libraries/SWSerLCDsf/SWSerLCDsf.h +67 -0
  70. data/lib/libraries/Servo/Servo.cpp +192 -0
  71. data/lib/libraries/Servo/Servo.h +61 -0
  72. data/lib/libraries/Stepper/Stepper.cpp +220 -0
  73. data/lib/libraries/Stepper/Stepper.h +86 -0
  74. data/lib/libraries/Stepper/keywords.txt +28 -0
  75. data/lib/libraries/Wire/Wire.cpp +262 -0
  76. data/lib/libraries/Wire/Wire.h +67 -0
  77. data/lib/libraries/Wire/keywords.txt +31 -0
  78. data/lib/libraries/Wire/twi.h +57 -0
  79. data/lib/libraries/Wire/utility/twi.c +449 -0
  80. data/lib/libraries/Wire/utility/twi.h +57 -0
  81. data/lib/plugins/bitwise_ops.rb +54 -0
  82. data/lib/plugins/blink.rb +25 -0
  83. data/lib/plugins/blink_m.rb +356 -0
  84. data/lib/plugins/debounce.rb +138 -0
  85. data/lib/plugins/debug_output_to_lcd.rb +71 -0
  86. data/lib/plugins/hysteresis.rb +52 -0
  87. data/lib/plugins/input_output_state.rb +84 -0
  88. data/lib/plugins/lcd_padding.rb +58 -0
  89. data/lib/plugins/mem_test.rb +37 -0
  90. data/lib/plugins/midi.rb +60 -0
  91. data/lib/plugins/parallax_ping.rb +50 -0
  92. data/lib/plugins/servo_pulse.rb +31 -0
  93. data/lib/plugins/servo_setup.rb +86 -0
  94. data/lib/plugins/smoother.rb +54 -0
  95. data/lib/plugins/spark_fun_serial_lcd.rb +100 -0
  96. data/lib/plugins/spectra_symbol.rb +79 -0
  97. data/lib/plugins/twitter_connect.rb +145 -0
  98. data/lib/rad/README.rdoc +5 -0
  99. data/lib/rad/arduino_plugin.rb +246 -0
  100. data/lib/rad/arduino_sketch.rb +351 -257
  101. data/lib/rad/generators/makefile/makefile.erb +1 -1
  102. data/lib/rad/generators/makefile/makefile.rb +9 -10
  103. data/lib/rad/hardware_library.rb +813 -0
  104. data/lib/rad/init.rb +3 -1
  105. data/lib/rad/rad_processor.rb +128 -0
  106. data/lib/rad/rad_rewriter.rb +94 -0
  107. data/lib/rad/rad_type_checker.rb +26 -0
  108. data/lib/rad/sim/arduino_sketch.rb +57 -0
  109. data/lib/rad/sketch_compiler.rb +47 -0
  110. data/lib/rad/tasks/build_and_make.rake +146 -24
  111. data/lib/rad/variable_processing.rb +153 -0
  112. data/lib/rad/version.rb +1 -1
  113. data/spec/examples/hello_world.rb +11 -0
  114. data/spec/examples/serial_motor.rb +12 -0
  115. data/spec/models/sketch_compiler_spec.rb +96 -0
  116. data/spec/sim/hello_world_spec.rb +42 -0
  117. data/test/test_array_processing.rb +179 -0
  118. data/test/test_plugin_loading.rb +151 -0
  119. data/test/test_translation_post_processing.rb +185 -0
  120. data/test/test_variable_processing.rb +238 -0
  121. data/website/index.html +22 -7
  122. data/website/stylesheets/screen.css +32 -1
  123. metadata +130 -13
@@ -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
@@ -0,0 +1,94 @@
1
+ class HelloFormatPrint < ArduinoSketch
2
+
3
+ # ----------------------------------------------------------------------
4
+ # Demonstrattion of Crude Adaptaion of C Function sprintf()
5
+ # to do formatted printing. For now there are some absolutes:
6
+ # The write_line method atkes as arguemnst the formatting string
7
+ # and the appropriate arguments. It format them to an internal
8
+ # buffer sepcified and created when you invoke formatted printing
9
+ # formatted_print :as => :line_buf, :buffer_size => 80
10
+ # now, to actual do it you use write_line
11
+ # write_line "Pies $%02d.%02d", pie_cents/100, pie_cents%100
12
+ # then print the string pointed at by string_line
13
+ # my_lcd.setxy 3, 2, line_buf
14
+ #
15
+ # Brian Riley - Underhill Center, VT, USA Aug 2008
16
+ # <brianbr@wulfden.org>
17
+ #
18
+ # ----------------------------------------------------------------------
19
+
20
+ # demonstrate 4 x 20 pa_lcd toggle between normal and Bignum mode
21
+ # with @toggle external variable thrown in for fun
22
+
23
+ # change your pins to suit your setup
24
+
25
+ @toggle = "0, int"
26
+ @pie_cents = "403, int"
27
+ @pie_price = "7.08"
28
+
29
+
30
+ input_pin 8, :as => :button_one, :device => :button
31
+ input_pin 9, :as => :button_two, :device => :button
32
+ input_pin 10, :as => :button_three, :device => :button
33
+
34
+ formatted_print :as => :string_line, :buffer_size => 65 # generally this statement should precede any serial_begin or
35
+ # LCD display directive
36
+
37
+ output_pin 14, :as => :my_lcd, :device => :pa_lcd, :rate => 19200, :clear_screen => :true
38
+
39
+
40
+ def setup
41
+ my_lcd.clearscr " --<Press Button>--?nOne, Two, or Three"
42
+ end
43
+
44
+ def loop
45
+ if millis % 500 == 0
46
+ write_line "millis()= %ld", millis
47
+ my_lcd.setxy 1, 2, string_line
48
+ end
49
+ say_hello if button_one.read_input
50
+ say_more if button_two.read_input
51
+ say_it_large if button_three.read_input
52
+ end
53
+
54
+ def say_hello
55
+ @toggle = true
56
+ my_lcd.clearscr "This sketch has?nbeen running for?n "
57
+ write_line "%ld mins and %d secs?n", millis/60000, (millis/1000)%60
58
+ my_lcd.print string_line
59
+ delay 3000
60
+ my_lcd.clearscr " --<Press Button>--?nOne, Two, or Three"
61
+ end
62
+
63
+ def say_more # passing print strings to home and setxy (also works on clearscr)
64
+ @toggle = false
65
+ my_lcd.clearscr "Food Store Prices"
66
+ write_line "Pies $%2d.%02d", @pie_cents/100, @pie_cents%100
67
+ # write_line "Pies $%6.2f", @pie_price # float doessn't seem to work .....
68
+ my_lcd.setxy 2, 1, string_line
69
+ # write_line "toggle state is [%s]", @toggle ? "ON" : "OFF" # RubyToC screws this construct up and RAD mistajekl put 1 ad 0
70
+ # in place of "ON" and "OFF"
71
+ write_line "toggle state is [%d]", @toggle
72
+ my_lcd.setxy 2, 3, string_line
73
+ delay 3000
74
+ my_lcd.clearscr " --<Press Button>--?nOne, Two, or Three"
75
+ end
76
+
77
+
78
+ def say_it_large
79
+
80
+ my_lcd.intoBignum
81
+ my_lcd.clearscr # line 0, col 0
82
+ 1.upto(32) do |i|
83
+ my_lcd.setxy 0,1
84
+ my_lcd.print i * i
85
+ delay 200
86
+ end
87
+ my_lcd.outofBignum
88
+ delay 3000
89
+ my_lcd.clearscr " --<Press Button>--?nOne, Two, or Three"
90
+ end
91
+
92
+
93
+
94
+ end
@@ -0,0 +1,75 @@
1
+ class HelloLcdCharset < ArduinoSketch
2
+
3
+ # -------------------------------------------------------------------------
4
+ # Program to Display the entire lower half (under 0x80) character set
5
+ #
6
+ # The class variable @a defined as byte is needed to make RubyToC put
7
+ # the value to be 'printed' as a byte and thus give us the character
8
+ # that value represents.
9
+ #
10
+ # Brian Riley - Underhill Center, VT, USA July 2008
11
+ # <brianbr@wulfden.org>
12
+ #
13
+ # ----------------------------------------------------------------------
14
+
15
+
16
+ @a = byte
17
+
18
+ output_pin 14, :as => :myLCD, :device => :pa_lcd, :rate => 19200
19
+ output_pin 13, :as => :led
20
+
21
+ def loop
22
+
23
+ myLCD.clearscr "Alphabet Chars?n"
24
+ 0x41.upto(0x5a) do |i| # A to Z
25
+ @a = i # forces 'byte' typing to variable
26
+ myLCD.print @a # so print rouien prints character represented
27
+ delay 50 # by the index value
28
+ end
29
+ 0x61.upto(0x7a) do |i| # a to z
30
+ @a = i
31
+ myLCD.print @a
32
+ delay 50
33
+ end
34
+
35
+ delay 3000
36
+ myLCD.clearscr "Numeric Chars?n"
37
+ 0x30.upto(0x39) do |i| # 0 to 9
38
+ @a = i
39
+ myLCD.print @a
40
+ delay 50
41
+ end
42
+
43
+ delay 3000
44
+
45
+ myLCD.clearscr "Other Chars?n"
46
+ 0x21.upto(0x2f) do |i| # punctuation et al
47
+ @a = i
48
+ myLCD.print @a
49
+ delay 50
50
+ end
51
+ 0x3a.upto(0x40) do |i|
52
+ @a = i
53
+ myLCD.print @a
54
+ delay 50
55
+ end
56
+ 0x5b.upto(0x60) do |i|
57
+ @a = i
58
+ myLCD.print @a
59
+ delay 50
60
+ end
61
+ 0x7b.upto(0x7f) do |i|
62
+ @a = i
63
+ myLCD.print @a
64
+ delay 50
65
+ end
66
+
67
+ delay 3000
68
+
69
+
70
+
71
+ end
72
+
73
+
74
+
75
+ end