rpi_lcd16x2 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5833e45304faebe96d020d38da2d916cf83df6e2
4
+ data.tar.gz: 8ee10fc1802f83bc5658e85ad19e7cd0646a3a41
5
+ SHA512:
6
+ metadata.gz: 73ec222e574557b8119e83fa71d89d8a5c179a66be3d6a7889b43286f027b13be416bd5d9ac4d22808a36c10c0f442cdcebd29ca7e4761fb6079a470306405ce
7
+ data.tar.gz: 20c2bc9f07f1813565d27b10791a4d536deb70ed7a8169a05e6b6a9b6e143bc6a4883e04deccd7b549f47c8466c0e7e5aab9f2dc00ec1dc7ec37b285c289e675
Binary file
@@ -0,0 +1 @@
1
+ o�;�����?�� dbn?+�s��U��z�R;�dN�OUl#��d�����Ԁ��tF�^�s��5�(�����/�#�C0Aw{m�P�4���W�&�+�Ȝ��b�':ۚU#x��H;Uq��T��"*C� �u�u7]��Uz]��<�4��k�Ҟ������vl�<�DY�vn�zH-���ϋ����}4 'C�<׃�s��O���a�> ߺ���'�] F��%�Y��q|�lG�M��vZz��a_���SѢ
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: rpi_lcd16x2.rb
4
+
5
+ # code originally copied from https://github.com/RobvanB/Ruby-RaspberryPi-LCD
6
+
7
+ require 'wiringpi'
8
+
9
+ T_MS = 1.0000000/1000000
10
+ ON = 1
11
+ OFF = 0
12
+
13
+ class RpiLcd16x2
14
+
15
+ def initialize(string='hello world', p_rs: 11, p_en: 10, d4: 6, d5: 5, d6: 4, d7: 1)
16
+
17
+ @p_rs, @p_en, @d4, @d5, @d6, @d7 = p_rs, p_en, d4, d5, d6, d7
18
+
19
+ @char_count = 0
20
+
21
+ Wiringpi.wiringPiSetup
22
+
23
+ # Set all pins to output mode
24
+ [p_rs, p_en, d7, d6, d5, d4].each {|pin,val| Wiringpi.pinMode(pin, 1)}
25
+
26
+ init_display()
27
+ sleep T_MS * 10
28
+ lcd_display(ON, ON, OFF)
29
+ set_entry_mode()
30
+ cls
31
+ text string
32
+
33
+ end
34
+
35
+ # Clear all data from screen
36
+ #
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
83
+ #
84
+ def set_entry_mode()
85
+
86
+ write_command
87
+ write_command d6: 1, d5: 1
88
+ sleep T_MS
89
+ end
90
+
91
+ # Write data to CGRAM/DDRAM
92
+ #
93
+ def lcd_write(a)
94
+
95
+ write_command rs: 1, d7: a[0], d6: a[1], d5: a[2], d4: a[3]
96
+ write_command rs: 1, d7: a[4], d6: a[5], d5: a[6], d4: a[7]
97
+ @char_count += 1
98
+ end
99
+
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
110
+
111
+ # D7: N = 0 = 1 line display
112
+ # D6: F = 0 = 5x8 character font
113
+
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
123
+
124
+ # Entry mode set"
125
+ write_command; sleep T_MS
126
+
127
+ # D5: 1 = Increment by 1
128
+ # D4: 0 = no shift
129
+
130
+ write_command d6: 1, d5: 1, d4: 1
131
+ end
132
+
133
+ def print_text(s)
134
+
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 |
139
+
140
+ bc = c.bytes.first.to_s(2)
141
+ while bc.length < 8
142
+ bc = "0" + bc
143
+ end
144
+
145
+ bina = []
146
+ bc.split().each {}
147
+ bc.split(//).each{ |x| bina << x.to_i }
148
+
149
+ if (bc)
150
+ lcd_write(bina)
151
+ bc = nil
152
+ end
153
+ end
154
+ end
155
+
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)
169
+
170
+ @char_count = 0
171
+ end
172
+
173
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rpi_lcd16x2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
+ YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
+ 8ixkARkWAmV1MB4XDTE0MDgxMTAzMTEyOFoXDTE1MDgxMTAzMTEyOFowSDESMBAG
16
+ A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
+ ggEBAMC6kL8TmOFzvUOUsScovGwH+/Dn6hmT4y6P5VEH3Yp97ItOG8PVYduVkunl
19
+ k9l5sh62G3opuF+d1i2BYwmcGDYURNbAQqoxuvY+FT91Aa125vqa7oaxNFlOTTj4
20
+ 7Q8YvbhRIjv8xnjcByXNaDNu5uO/VxQRJVXCxHUIlim6hf8Ujyd4i9zFYpTG50zy
21
+ ju3r4wJnwsBrCCovA7WaviBn3f5pywZCvLn25Kj1mDdxjauhJ/Wc51AzzLVF7EnY
22
+ IC/qxiVFsCi8kTpUgUTxLdNHaVZwaEujbSKDbt0SA4BnZVL7+C7oRof6e+910UHp
23
+ P9HNSg1iHg1yy8vk+4IK0J2sus0CAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
+ DwQEAwIEsDAdBgNVHQ4EFgQUHTa1t0YUhDxgwmBosRiBHbyL1DAwJgYDVR0RBB8w
25
+ HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
+ c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAKZCvXUTH
27
+ eWIhYNB2OF+A3Bw89BNVbO9ZaclhVe+82JZtycBVurJTlEiNxCkzWvU0zOlpEC8d
28
+ 1t6uT1zUwZZMwUM05VywxOI6g5HJNouwWv3Np+g+br7GZoNGBNOx2GJ4dsbdVsaF
29
+ PLR7/QRfwaFHHu60I3OxcfAbYoe/Ej+uSK5iNL8nWVVavfbBFYHTEVHtsULRpFvJ
30
+ hTrXUYI3FNofnfeYBrK7qXkjpKMJv8UbOvU1mfSB/QiNED4vC+g71RKnNDjhVlrW
31
+ ZwpzKBOmi7OYBuBy3q1GGg3t+VgVp9Z4Eg2TyGWFT+vrpKHB/+jeP4Rv8827/KDs
32
+ tlNQqZyiZthqbQ==
33
+ -----END CERTIFICATE-----
34
+ date: 2014-08-11 00:00:00.000000000 Z
35
+ dependencies: []
36
+ description:
37
+ email: james@r0bertson.co.uk
38
+ executables: []
39
+ extensions: []
40
+ extra_rdoc_files: []
41
+ files:
42
+ - lib/rpi_lcd16x2.rb
43
+ homepage: https://github.com/jrobertson/rpi_lcd16x2
44
+ licenses:
45
+ - MIT
46
+ metadata: {}
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 2.1.0
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubyforge_project:
63
+ rubygems_version: 2.2.2
64
+ signing_key:
65
+ specification_version: 4
66
+ summary: Display text on a 16x2 LCD connected to a Raspberry Pi
67
+ test_files: []
68
+ has_rdoc:
Binary file