rpi_lcd16x2 0.1.1 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fd9357de00963d299db3a43c0c77808abebd140b
4
- data.tar.gz: 291f2801ed8b545adf7e5906380601eaba474359
3
+ metadata.gz: c42a54f9093e60f9d28777f8d97f3a11fcdd05d2
4
+ data.tar.gz: f7b0d6555f0f94972257bf9a45292bf35a7a4363
5
5
  SHA512:
6
- metadata.gz: 3d501ee3ac3f43015262be97beb474963a947dbdf997c7d7431b2c5d7a0ac55d6a5326cccc7fc2a84f7096c57a81d4cd97e4751ae97158b9ff0fa83addae398a
7
- data.tar.gz: bbdaee3bbbdb1128be17bce440ab13b20f2fd2f976398924ccba31d63ba060ed52f6a2a1980dc96ec1a30b111282a83e04ca7e6faefacbb151083718c713a59f
6
+ metadata.gz: e2e66aa61980af0dc958efa218d06f18789dcd300630667d28a25906e6848191c8e4f120652be37bf4634740d7033cba6187e18aae52b344965215298395a1ee
7
+ data.tar.gz: fcf61fcfc4582de9dc606921a5c076273098a1e9eaf43b72fc02ec218dc7475e1a11692903f0913945f98678a6e942e0a1ff360e0625d3a956c8bf5c3644ad64
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -3,89 +3,47 @@
3
3
  # file: rpi_lcd16x2.rb
4
4
 
5
5
  # code originally copied from https://github.com/RobvanB/Ruby-RaspberryPi-LCD
6
+ # instruction set reference https://en.wikipedia.org/wiki/HD44780_Character_LCD
6
7
 
7
8
  require 'wiringpi'
8
9
 
9
- T_MS = 1.0000000/1000000
10
- ON = 1
11
- OFF = 0
10
+ T_MS = 0.000001
11
+
12
12
 
13
13
  class RpiLcd16x2
14
14
 
15
- def initialize(string='hello world', p_rs: 11, p_en: 10, d4: 6, d5: 5, d6: 4, d7: 1)
15
+ def initialize(string='', p_rs: 11, p_en: 10, d4: 6, d5: 5, d6: 4, d7: 1)
16
16
 
17
17
  @p_rs, @p_en, @d4, @d5, @d6, @d7 = p_rs, p_en, d4, d5, d6, d7
18
18
 
19
- @char_count = 0
20
-
21
19
  Wiringpi.wiringPiSetup
22
20
 
23
21
  # Set all pins to output mode
24
22
  [p_rs, p_en, d7, d6, d5, d4].each {|pin,val| Wiringpi.pinMode(pin, 1)}
25
23
 
26
- init_display()
27
- sleep T_MS * 10
28
- lcd_display(ON, ON, OFF)
29
- set_entry_mode()
30
- cls
31
- text string
32
-
24
+ function_set # sets the display to use 4-bit instructions
25
+ cursor_off
26
+ print string unless string.empty?
33
27
  end
34
28
 
35
29
  # Clear all data from screen
36
30
  #
37
- def cls()
38
- [0,1].each {|x| write_command d4: x}
39
- end
40
-
41
- def text(s)
42
- # If the string is longer than 16 char - split it.
43
- if (s.length > 16)
44
- s.split(" ").each do |x|
45
- print_text(x)
46
- next_line()
47
- sleep 1
48
- end
49
- else
50
- print_text(s)
51
- end
52
- next_line()
53
- end
54
-
55
- private
56
-
57
- # Indicate to LCD that command should be 'executed'
58
- #
59
- def pulse_enable()
60
- [0,1,0].each {|x| Wiringpi.digitalWrite(@p_en, x); sleep T_MS * 10}
61
- end
62
-
63
- # Turn on display and cursor
64
- #
65
- # 1 = 0n
66
- # 1 = Cursor on, 0 = Cursor off
67
- # 1 = Block, 0 = Underline cursor
68
- #
69
- def lcd_display(display, cursor, block)
70
-
71
- write_command
72
- write_command d7: 1, d6: display, d5: cursor, d4: block
73
- end
74
-
75
- def write_command(rs: 0, d7: 0, d6: 0, d5: 0, d4: 0)
76
-
77
- [@p_rs, @d7, @d6, @d5, @d4,].zip([rs,d7,d6,d5,d4])\
78
- .each {|pin,val| Wiringpi.digitalWrite(pin, val)}
79
- pulse_enable()
80
- end
81
-
82
- # Entry mode set: move cursor to right after each DD/CGRAM write
31
+ def cls() cmd d4: 1 end
32
+
33
+ def cursor(direction=1) cmd d7: 1, d6: direction, d5: nil, d4: nil end
34
+ def cursor_off() cmd d7: 1, d6: 1, d5: 0 end
35
+ def cursor_on() cmd d7: 1, d6: 1, d5: 1 end
36
+ def display_off() cmd d7: 1 end
37
+ def display_on() cmd d7: 1, d6: 1 end
38
+
39
+ # Sets cursor move direction (I/D); specifies to shift the display (S).
40
+ # I/D - increment = 1 or decrement = 0
41
+ # S - 0 = no display shift, 1 = display shift
42
+ # e.g. 0 0 0 0 1 D C B
83
43
  #
84
- def set_entry_mode()
85
-
86
- write_command
87
- write_command d6: 1, d5: 1
88
- sleep T_MS
44
+ def entry(direction=1)
45
+ write_command rs: 1, d7: 0, d6: 0, d5: 0, d4: 1
46
+ write_command rs: 1, d7: 0, d6: direction, d5: nil, d4: nil
89
47
  end
90
48
 
91
49
  # Write data to CGRAM/DDRAM
@@ -94,80 +52,56 @@ class RpiLcd16x2
94
52
 
95
53
  write_command rs: 1, d7: a[0], d6: a[1], d5: a[2], d4: a[3]
96
54
  write_command rs: 1, d7: a[4], d6: a[5], d5: a[6], d4: a[7]
97
- @char_count += 1
98
55
  end
99
56
 
100
- # Set function to 4 bit operation
101
- #
102
- def init_display()
103
-
104
- 3.times { sleep 42 * T_MS; write_command d5: 1, d4: 1 }
105
-
106
- # Function set to 4 bit
107
- 2.times { write_command d5: 1}
108
-
109
- # Set number of display lines
57
+ def home() cmd d5: 1 end
110
58
 
111
- # D7: N = 0 = 1 line display
112
- # D6: F = 0 = 5x8 character font
113
59
 
114
- write_command d7: 1; sleep T_MS
115
-
116
- # Display Off (2 blocks)
117
- write_command; sleep T_MS
118
- write_command d7: 1; sleep T_MS
119
-
120
- # Display clear (2 blocks)
121
- write_command; sleep T_MS
122
- write_command d4: 1; sleep T_MS
60
+ def print(raw_s)
61
+ cls
62
+ s = raw_s.split(/\n/).map {|x| x.ljust(40)}.join
63
+ print_text s
64
+ end
123
65
 
124
- # Entry mode set"
125
- write_command; sleep T_MS
66
+ alias text print
126
67
 
127
- # D5: 1 = Increment by 1
128
- # D4: 0 = no shift
68
+ def print_text(s)
129
69
 
130
- write_command d6: 1, d5: 1, d4: 1
70
+ s.each_byte.to_a.each do |x|
71
+ lcd_write ("%08b" % x).each_char.to_a.map(&:to_i)
72
+ end
131
73
  end
132
74
 
133
- def print_text(s)
75
+ protected
134
76
 
135
- # Loop through each character in the string, convert it to binary,
136
- # and print it to the LCD
137
-
138
- s.split(//).each do | c |
77
+ def cmd(h) write_command; write_command h; sleep 0.01 end
139
78
 
140
- bc = c.bytes.first.to_s(2)
141
- while bc.length < 8
142
- bc = "0" + bc
143
- end
79
+ # Sets interface data length (DL), number of display line (N),
80
+ # and character font (F).
81
+ # DL - 0 = 4-bit interface, 1 = 8-bit interface
82
+ # N - 0 = 1/8 or 1/11 duty (1 line), 1 = 1/16 duty (2 lines)
83
+ # F - 0 = 5×8 dots, 1 = 5×10 dots
84
+ # e.g. 0 0 1 DL N F * *
85
+ # d7 d6 d5 d4 d7 d6 d5 d4
86
+ def function_set()
87
+ write_command rs: 1, d7: 0, d6: 0, d5: 1, d4: 0
88
+ write_command rs: 1, d7: 1, d6: 0, d5: nil, d4: nil
89
+ end
144
90
 
145
- bina = []
146
- bc.split().each {}
147
- bc.split(//).each{ |x| bina << x.to_i }
91
+ def write_command(rs: 0, d7: 0, d6: 0, d5: 0, d4: 0)
148
92
 
149
- if (bc)
150
- lcd_write(bina)
151
- bc = nil
152
- end
93
+ [@p_rs, @d7, @d6, @d5, @d4,].zip([rs,d7,d6,d5,d4]).each do |pin,val|
94
+ Wiringpi.digitalWrite(pin, val) if val
153
95
  end
96
+ pulse_enable()
154
97
  end
155
98
 
156
- # Display automatically goes to next line when we hit 40 chars
157
- #
158
- def next_line()
159
-
160
- fill_str = " "
161
- fill_cntr = 1
162
-
163
- while (@char_count + fill_cntr < 40)
164
- fill_str += " "
165
- fill_cntr += 1
166
- end
167
-
168
- print_text(fill_str)
99
+ private
169
100
 
170
- @char_count = 0
101
+ # Indicate to LCD that command should be 'executed'
102
+ #
103
+ def pulse_enable()
104
+ [0,1,0].each {|x| Wiringpi.digitalWrite(@p_en, x); sleep T_MS * 10}
171
105
  end
172
106
 
173
- end
107
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rpi_lcd16x2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -31,7 +31,7 @@ cert_chain:
31
31
  ZwpzKBOmi7OYBuBy3q1GGg3t+VgVp9Z4Eg2TyGWFT+vrpKHB/+jeP4Rv8827/KDs
32
32
  tlNQqZyiZthqbQ==
33
33
  -----END CERTIFICATE-----
34
- date: 2014-08-11 00:00:00.000000000 Z
34
+ date: 2014-08-12 00:00:00.000000000 Z
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: wiringpi
metadata.gz.sig CHANGED
Binary file