wiringpi-ruby 2.0.0 → 2.1.3

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 (168) hide show
  1. checksums.yaml +4 -4
  2. data/ext/wiringpi/WiringPi/devLib/ds1302.c +240 -0
  3. data/ext/wiringpi/WiringPi/devLib/ds1302.h +44 -0
  4. data/ext/wiringpi/WiringPi/devLib/font.h +2577 -0
  5. data/ext/wiringpi/WiringPi/devLib/gertboard.c +164 -0
  6. data/ext/wiringpi/WiringPi/devLib/gertboard.h +45 -0
  7. data/ext/wiringpi/WiringPi/devLib/lcd.c +495 -0
  8. data/ext/wiringpi/WiringPi/devLib/lcd.h +52 -0
  9. data/ext/wiringpi/WiringPi/devLib/lcd128x64.c +673 -0
  10. data/ext/wiringpi/WiringPi/devLib/lcd128x64.h +39 -0
  11. data/ext/wiringpi/WiringPi/devLib/maxdetect.c +238 -0
  12. data/ext/wiringpi/WiringPi/devLib/maxdetect.h +40 -0
  13. data/ext/wiringpi/WiringPi/devLib/piFace.c +112 -0
  14. data/ext/wiringpi/WiringPi/devLib/piFace.h +32 -0
  15. data/ext/wiringpi/WiringPi/devLib/piFaceOld.c +177 -0
  16. data/ext/wiringpi/WiringPi/devLib/piGlow.c +118 -0
  17. data/ext/wiringpi/WiringPi/devLib/piGlow.h +45 -0
  18. data/ext/wiringpi/WiringPi/devLib/piNes.c +113 -0
  19. data/ext/wiringpi/WiringPi/devLib/piNes.h +45 -0
  20. data/ext/wiringpi/WiringPi/devLib/scrollPhat.c +430 -0
  21. data/ext/wiringpi/WiringPi/devLib/scrollPhat.h +39 -0
  22. data/ext/wiringpi/WiringPi/devLib/scrollPhatFont.h +544 -0
  23. data/ext/wiringpi/WiringPi/examples/Gertboard/7segments.c +221 -0
  24. data/ext/wiringpi/WiringPi/examples/Gertboard/buttons.c +83 -0
  25. data/ext/wiringpi/WiringPi/examples/Gertboard/gertboard.c +96 -0
  26. data/ext/wiringpi/WiringPi/examples/Gertboard/record.c +60 -0
  27. data/ext/wiringpi/WiringPi/examples/Gertboard/temperature.c +78 -0
  28. data/ext/wiringpi/WiringPi/examples/Gertboard/voltmeter.c +73 -0
  29. data/ext/wiringpi/WiringPi/examples/Gertboard/vumeter.c +152 -0
  30. data/ext/wiringpi/WiringPi/examples/PiFace/blink.c +59 -0
  31. data/ext/wiringpi/WiringPi/examples/PiFace/buttons.c +103 -0
  32. data/ext/wiringpi/WiringPi/examples/PiFace/ladder.c +337 -0
  33. data/ext/wiringpi/WiringPi/examples/PiFace/metro.c +111 -0
  34. data/ext/wiringpi/WiringPi/examples/PiFace/motor.c +120 -0
  35. data/ext/wiringpi/WiringPi/examples/PiFace/reaction.c +194 -0
  36. data/ext/wiringpi/WiringPi/examples/PiGlow/piGlow0.c +51 -0
  37. data/ext/wiringpi/WiringPi/examples/PiGlow/piGlow1.c +258 -0
  38. data/ext/wiringpi/WiringPi/examples/PiGlow/piglow.c +176 -0
  39. data/ext/wiringpi/WiringPi/examples/blink-thread.c +61 -0
  40. data/ext/wiringpi/WiringPi/examples/blink.c +48 -0
  41. data/ext/wiringpi/WiringPi/examples/blink12.c +111 -0
  42. data/ext/wiringpi/WiringPi/examples/blink12drcs.c +125 -0
  43. data/ext/wiringpi/WiringPi/examples/blink6drcs.c +115 -0
  44. data/ext/wiringpi/WiringPi/examples/blink8-drcn.c +61 -0
  45. data/ext/wiringpi/WiringPi/examples/blink8.c +57 -0
  46. data/ext/wiringpi/WiringPi/examples/clock.c +201 -0
  47. data/ext/wiringpi/WiringPi/examples/delayTest.c +102 -0
  48. data/ext/wiringpi/WiringPi/examples/ds1302.c +238 -0
  49. data/ext/wiringpi/WiringPi/examples/header.h +23 -0
  50. data/ext/wiringpi/WiringPi/examples/isr-osc.c +118 -0
  51. data/ext/wiringpi/WiringPi/examples/isr.c +110 -0
  52. data/ext/wiringpi/WiringPi/examples/lcd-adafruit.c +347 -0
  53. data/ext/wiringpi/WiringPi/examples/lcd.c +286 -0
  54. data/ext/wiringpi/WiringPi/examples/lowPower.c +68 -0
  55. data/ext/wiringpi/WiringPi/examples/max31855.c +60 -0
  56. data/ext/wiringpi/WiringPi/examples/nes.c +67 -0
  57. data/ext/wiringpi/WiringPi/examples/okLed.c +82 -0
  58. data/ext/wiringpi/WiringPi/examples/pwm.c +58 -0
  59. data/ext/wiringpi/WiringPi/examples/q2w/binary.c +79 -0
  60. data/ext/wiringpi/WiringPi/examples/q2w/blink-io.c +61 -0
  61. data/ext/wiringpi/WiringPi/examples/q2w/blink.c +50 -0
  62. data/ext/wiringpi/WiringPi/examples/q2w/bright.c +59 -0
  63. data/ext/wiringpi/WiringPi/examples/q2w/button.c +63 -0
  64. data/ext/wiringpi/WiringPi/examples/q2w/volts.c +62 -0
  65. data/ext/wiringpi/WiringPi/examples/rht03.c +86 -0
  66. data/ext/wiringpi/WiringPi/examples/scrollPhat/scphat.c +230 -0
  67. data/ext/wiringpi/WiringPi/examples/scrollPhat/test.c +115 -0
  68. data/ext/wiringpi/WiringPi/examples/serialRead.c +48 -0
  69. data/ext/wiringpi/WiringPi/examples/serialTest.c +75 -0
  70. data/ext/wiringpi/WiringPi/examples/servo.c +57 -0
  71. data/ext/wiringpi/WiringPi/examples/softPwm.c +89 -0
  72. data/ext/wiringpi/WiringPi/examples/softTone.c +54 -0
  73. data/ext/wiringpi/WiringPi/examples/speed.c +95 -0
  74. data/ext/wiringpi/WiringPi/examples/spiSpeed.c +118 -0
  75. data/ext/wiringpi/WiringPi/examples/wfi.c +161 -0
  76. data/ext/wiringpi/WiringPi/gpio/gpio.c +1538 -0
  77. data/ext/wiringpi/WiringPi/gpio/readall.c +403 -0
  78. data/ext/wiringpi/WiringPi/version.h +3 -0
  79. data/ext/wiringpi/WiringPi/wiringPi/ads1115.c +293 -0
  80. data/ext/wiringpi/WiringPi/wiringPi/ads1115.h +55 -0
  81. data/ext/wiringpi/WiringPi/wiringPi/bmp180.c +237 -0
  82. data/ext/wiringpi/WiringPi/wiringPi/bmp180.h +34 -0
  83. data/ext/wiringpi/WiringPi/wiringPi/drcNet.c +405 -0
  84. data/ext/wiringpi/WiringPi/wiringPi/drcNet.h +42 -0
  85. data/ext/wiringpi/WiringPi/wiringPi/drcSerial.c +196 -0
  86. data/ext/wiringpi/WiringPi/wiringPi/drcSerial.h +33 -0
  87. data/ext/wiringpi/WiringPi/wiringPi/ds18b20.c +146 -0
  88. data/ext/wiringpi/WiringPi/wiringPi/ds18b20.h +34 -0
  89. data/ext/wiringpi/WiringPi/wiringPi/htu21d.c +150 -0
  90. data/ext/wiringpi/WiringPi/wiringPi/htu21d.h +34 -0
  91. data/ext/wiringpi/WiringPi/wiringPi/max31855.c +99 -0
  92. data/ext/wiringpi/WiringPi/wiringPi/max31855.h +33 -0
  93. data/ext/wiringpi/WiringPi/wiringPi/max5322.c +84 -0
  94. data/ext/wiringpi/WiringPi/wiringPi/max5322.h +33 -0
  95. data/ext/wiringpi/WiringPi/wiringPi/mcp23008.c +149 -0
  96. data/ext/wiringpi/WiringPi/wiringPi/mcp23008.h +33 -0
  97. data/ext/wiringpi/WiringPi/wiringPi/mcp23016.c +164 -0
  98. data/ext/wiringpi/WiringPi/wiringPi/mcp23016.h +33 -0
  99. data/ext/wiringpi/WiringPi/wiringPi/mcp23016reg.h +48 -0
  100. data/ext/wiringpi/WiringPi/wiringPi/mcp23017.c +195 -0
  101. data/ext/wiringpi/WiringPi/wiringPi/mcp23017.h +33 -0
  102. data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.c +188 -0
  103. data/ext/wiringpi/WiringPi/wiringPi/mcp23s08.h +33 -0
  104. data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.c +235 -0
  105. data/ext/wiringpi/WiringPi/wiringPi/mcp23s17.h +33 -0
  106. data/ext/wiringpi/WiringPi/wiringPi/mcp23x08.h +73 -0
  107. data/ext/wiringpi/WiringPi/wiringPi/mcp23x0817.h +87 -0
  108. data/ext/wiringpi/WiringPi/wiringPi/mcp3002.c +76 -0
  109. data/ext/wiringpi/WiringPi/wiringPi/mcp3002.h +33 -0
  110. data/ext/wiringpi/WiringPi/wiringPi/mcp3004.c +76 -0
  111. data/ext/wiringpi/WiringPi/wiringPi/mcp3004.h +33 -0
  112. data/ext/wiringpi/WiringPi/wiringPi/mcp3422.c +125 -0
  113. data/ext/wiringpi/WiringPi/wiringPi/mcp3422.h +43 -0
  114. data/ext/wiringpi/WiringPi/wiringPi/mcp4802.c +76 -0
  115. data/ext/wiringpi/WiringPi/wiringPi/mcp4802.h +33 -0
  116. data/ext/wiringpi/WiringPi/wiringPi/pcf8574.c +126 -0
  117. data/ext/wiringpi/WiringPi/wiringPi/pcf8574.h +33 -0
  118. data/ext/wiringpi/WiringPi/wiringPi/pcf8591.c +90 -0
  119. data/ext/wiringpi/WiringPi/wiringPi/pcf8591.h +33 -0
  120. data/ext/wiringpi/WiringPi/wiringPi/piHiPri.c +51 -0
  121. data/ext/wiringpi/WiringPi/wiringPi/piThread.c +63 -0
  122. data/ext/wiringpi/WiringPi/wiringPi/pseudoPins.c +95 -0
  123. data/ext/wiringpi/WiringPi/wiringPi/pseudoPins.h +26 -0
  124. data/ext/wiringpi/WiringPi/wiringPi/rht03.c +252 -0
  125. data/ext/wiringpi/WiringPi/wiringPi/rht03.h +25 -0
  126. data/ext/wiringpi/WiringPi/wiringPi/sn3218.c +75 -0
  127. data/ext/wiringpi/WiringPi/wiringPi/sn3218.h +33 -0
  128. data/ext/wiringpi/WiringPi/wiringPi/softPwm.c +186 -0
  129. data/ext/wiringpi/WiringPi/wiringPi/softPwm.h +35 -0
  130. data/ext/wiringpi/WiringPi/wiringPi/softServo.c +211 -0
  131. data/ext/wiringpi/WiringPi/wiringPi/softServo.h +35 -0
  132. data/ext/wiringpi/WiringPi/wiringPi/softTone.c +150 -0
  133. data/ext/wiringpi/WiringPi/wiringPi/softTone.h +39 -0
  134. data/ext/wiringpi/WiringPi/wiringPi/sr595.c +109 -0
  135. data/ext/wiringpi/WiringPi/wiringPi/sr595.h +34 -0
  136. data/ext/wiringpi/WiringPi/wiringPi/wiringPi.c +2507 -0
  137. data/ext/wiringpi/WiringPi/wiringPi/wiringPi.h +269 -0
  138. data/ext/wiringpi/WiringPi/wiringPi/wiringPiI2C.c +233 -0
  139. data/ext/wiringpi/WiringPi/wiringPi/wiringPiI2C.h +42 -0
  140. data/ext/wiringpi/WiringPi/wiringPi/wiringPiSPI.c +144 -0
  141. data/ext/wiringpi/WiringPi/wiringPi/wiringPiSPI.h +36 -0
  142. data/ext/wiringpi/WiringPi/wiringPi/wiringSerial.c +225 -0
  143. data/ext/wiringpi/WiringPi/wiringPi/wiringSerial.h +38 -0
  144. data/ext/wiringpi/WiringPi/wiringPi/wiringShift.c +83 -0
  145. data/ext/wiringpi/WiringPi/wiringPi/wiringShift.h +41 -0
  146. data/ext/wiringpi/WiringPi/wiringPi/wpiExtensions.c +928 -0
  147. data/ext/wiringpi/WiringPi/wiringPi/wpiExtensions.h +26 -0
  148. data/ext/wiringpi/WiringPi/wiringPiD/daemonise.c +82 -0
  149. data/ext/wiringpi/WiringPi/wiringPiD/daemonise.h +9 -0
  150. data/ext/wiringpi/WiringPi/wiringPiD/drcNetCmd.h +43 -0
  151. data/ext/wiringpi/WiringPi/wiringPiD/network.c +330 -0
  152. data/ext/wiringpi/WiringPi/wiringPiD/network.h +31 -0
  153. data/ext/wiringpi/WiringPi/wiringPiD/runRemote.c +126 -0
  154. data/ext/wiringpi/WiringPi/wiringPiD/runRemote.h +29 -0
  155. data/ext/wiringpi/WiringPi/wiringPiD/wiringpid.c +382 -0
  156. data/ext/wiringpi/wiringpi_wrap.c +636 -219
  157. data/lib/wiringpi.rb +25 -12
  158. data/lib/wiringpi/gpio.rb +90 -83
  159. data/lib/wiringpi/i2c.rb +29 -22
  160. data/lib/wiringpi/modules/mcp23017.rb +15 -0
  161. data/lib/wiringpi/modules/mcp23s17.rb +16 -0
  162. data/lib/wiringpi/scrollphat.rb +14 -14
  163. data/lib/wiringpi/serial.rb +8 -18
  164. data/lib/wiringpi/spi.rb +14 -11
  165. data/lib/wiringpi/watch.rb +24 -0
  166. metadata +160 -4
  167. data/lib/wiringpi/event.rb +0 -21
  168. data/lib/wiringpi/mcp23x17.rb +0 -31
@@ -0,0 +1,347 @@
1
+ /*
2
+ * lcd-adafruit.c:
3
+ * Text-based LCD driver test code
4
+ * This is designed to drive the Adafruit RGB LCD Plate
5
+ * with the additional 5 buttons for the Raspberry Pi
6
+ *
7
+ * Copyright (c) 2012-2013 Gordon Henderson.
8
+ ***********************************************************************
9
+ * This file is part of wiringPi:
10
+ * https://projects.drogon.net/raspberry-pi/wiringpi/
11
+ *
12
+ * wiringPi is free software: you can redistribute it and/or modify
13
+ * it under the terms of the GNU Lesser General Public License as published by
14
+ * the Free Software Foundation, either version 3 of the License, or
15
+ * (at your option) any later version.
16
+ *
17
+ * wiringPi is distributed in the hope that it will be useful,
18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ * GNU Lesser General Public License for more details.
21
+ *
22
+ * You should have received a copy of the GNU Lesser General Public License
23
+ * along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
24
+ ***********************************************************************
25
+ */
26
+
27
+ #include <stdio.h>
28
+ #include <stdlib.h>
29
+ #include <unistd.h>
30
+ #include <string.h>
31
+ #include <time.h>
32
+
33
+ #include <wiringPi.h>
34
+ #include <mcp23017.h>
35
+ #include <lcd.h>
36
+
37
+ #ifndef TRUE
38
+ # define TRUE (1==1)
39
+ # define FALSE (1==2)
40
+ #endif
41
+
42
+
43
+ // Defines for the Adafruit Pi LCD interface board
44
+
45
+ #define AF_BASE 100
46
+ #define AF_RED (AF_BASE + 6)
47
+ #define AF_GREEN (AF_BASE + 7)
48
+ #define AF_BLUE (AF_BASE + 8)
49
+
50
+ #define AF_E (AF_BASE + 13)
51
+ #define AF_RW (AF_BASE + 14)
52
+ #define AF_RS (AF_BASE + 15)
53
+
54
+ #define AF_DB4 (AF_BASE + 12)
55
+ #define AF_DB5 (AF_BASE + 11)
56
+ #define AF_DB6 (AF_BASE + 10)
57
+ #define AF_DB7 (AF_BASE + 9)
58
+
59
+ #define AF_SELECT (AF_BASE + 0)
60
+ #define AF_RIGHT (AF_BASE + 1)
61
+ #define AF_DOWN (AF_BASE + 2)
62
+ #define AF_UP (AF_BASE + 3)
63
+ #define AF_LEFT (AF_BASE + 4)
64
+
65
+
66
+ // User-Defined character test
67
+
68
+ static unsigned char newChar [8] =
69
+ {
70
+ 0b00100,
71
+ 0b00100,
72
+ 0b00000,
73
+ 0b00100,
74
+ 0b01110,
75
+ 0b11011,
76
+ 0b11011,
77
+ 0b10001,
78
+ } ;
79
+
80
+ // Global lcd handle:
81
+
82
+ static int lcdHandle ;
83
+
84
+ /*
85
+ * usage:
86
+ *********************************************************************************
87
+ */
88
+
89
+ int usage (const char *progName)
90
+ {
91
+ fprintf (stderr, "Usage: %s colour\n", progName) ;
92
+ return EXIT_FAILURE ;
93
+ }
94
+
95
+
96
+ /*
97
+ * scrollMessage:
98
+ *********************************************************************************
99
+ */
100
+
101
+ static const char *message =
102
+ " "
103
+ "Wiring Pi by Gordon Henderson. HTTP://WIRINGPI.COM/"
104
+ " " ;
105
+
106
+ void scrollMessage (int line, int width)
107
+ {
108
+ char buf [32] ;
109
+ static int position = 0 ;
110
+ static int timer = 0 ;
111
+
112
+ if (millis () < timer)
113
+ return ;
114
+
115
+ timer = millis () + 200 ;
116
+
117
+ strncpy (buf, &message [position], width) ;
118
+ buf [width] = 0 ;
119
+ lcdPosition (lcdHandle, 0, line) ;
120
+ lcdPuts (lcdHandle, buf) ;
121
+
122
+ if (++position == (strlen (message) - width))
123
+ position = 0 ;
124
+ }
125
+
126
+
127
+ /*
128
+ * setBacklightColour:
129
+ * The colour outputs are inverted.
130
+ *********************************************************************************
131
+ */
132
+
133
+ static void setBacklightColour (int colour)
134
+ {
135
+ colour &= 7 ;
136
+
137
+ digitalWrite (AF_RED, !(colour & 1)) ;
138
+ digitalWrite (AF_GREEN, !(colour & 2)) ;
139
+ digitalWrite (AF_BLUE, !(colour & 4)) ;
140
+ }
141
+
142
+
143
+ /*
144
+ * adafruitLCDSetup:
145
+ * Setup the Adafruit board by making sure the additional pins are
146
+ * set to the correct modes, etc.
147
+ *********************************************************************************
148
+ */
149
+
150
+ static void adafruitLCDSetup (int colour)
151
+ {
152
+ int i ;
153
+
154
+ // Backlight LEDs
155
+
156
+ pinMode (AF_RED, OUTPUT) ;
157
+ pinMode (AF_GREEN, OUTPUT) ;
158
+ pinMode (AF_BLUE, OUTPUT) ;
159
+ setBacklightColour (colour) ;
160
+
161
+ // Input buttons
162
+
163
+ for (i = 0 ; i <= 4 ; ++i)
164
+ {
165
+ pinMode (AF_BASE + i, INPUT) ;
166
+ pullUpDnControl (AF_BASE + i, PUD_UP) ; // Enable pull-ups, switches close to 0v
167
+ }
168
+
169
+ // Control signals
170
+
171
+ pinMode (AF_RW, OUTPUT) ; digitalWrite (AF_RW, LOW) ; // Not used with wiringPi - always in write mode
172
+
173
+ // The other control pins are initialised with lcdInit ()
174
+
175
+ lcdHandle = lcdInit (2, 16, 4, AF_RS, AF_E, AF_DB4,AF_DB5,AF_DB6,AF_DB7, 0,0,0,0) ;
176
+
177
+ if (lcdHandle < 0)
178
+ {
179
+ fprintf (stderr, "lcdInit failed\n") ;
180
+ exit (EXIT_FAILURE) ;
181
+ }
182
+ }
183
+
184
+
185
+ /*
186
+ * waitForEnter:
187
+ * On the Adafruit display, wait for the select button
188
+ *********************************************************************************
189
+ */
190
+
191
+ static void waitForEnter (void)
192
+ {
193
+ printf ("Press SELECT to continue: ") ; fflush (stdout) ;
194
+
195
+ while (digitalRead (AF_SELECT) == HIGH) // Wait for push
196
+ delay (1) ;
197
+
198
+ while (digitalRead (AF_SELECT) == LOW) // Wait for release
199
+ delay (1) ;
200
+
201
+ printf ("OK\n") ;
202
+ }
203
+
204
+
205
+ /*
206
+ * speedTest:
207
+ * Test the update speed of the display
208
+ *********************************************************************************
209
+ */
210
+
211
+ static void speedTest (void)
212
+ {
213
+ unsigned int start, end, taken ;
214
+ int times ;
215
+
216
+ lcdClear (lcdHandle) ;
217
+ start = millis () ;
218
+ for (times = 0 ; times < 10 ; ++times)
219
+ {
220
+ lcdPuts (lcdHandle, "0123456789ABCDEF") ;
221
+ lcdPuts (lcdHandle, "0123456789ABCDEF") ;
222
+ }
223
+ end = millis () ;
224
+ taken = (end - start) / 10;
225
+
226
+ lcdClear (lcdHandle) ;
227
+ lcdPosition (lcdHandle, 0, 0) ; lcdPrintf (lcdHandle, "Speed: %dmS", taken) ;
228
+ lcdPosition (lcdHandle, 0, 1) ; lcdPrintf (lcdHandle, "For full update") ;
229
+
230
+ waitForEnter () ;
231
+
232
+ lcdClear (lcdHandle) ;
233
+ lcdPosition (lcdHandle, 0, 0) ; lcdPrintf (lcdHandle, "Time: %dmS", taken / 32) ;
234
+ lcdPosition (lcdHandle, 0, 1) ; lcdPrintf (lcdHandle, "Per character") ;
235
+
236
+ waitForEnter () ;
237
+
238
+ lcdClear (lcdHandle) ;
239
+ lcdPosition (lcdHandle, 0, 0) ; lcdPrintf (lcdHandle, "%d cps...", 32000 / taken) ;
240
+
241
+ waitForEnter () ;
242
+ }
243
+
244
+
245
+ /*
246
+ * The works
247
+ *********************************************************************************
248
+ */
249
+
250
+ int main (int argc, char *argv[])
251
+ {
252
+ int colour ;
253
+ int cols = 16 ;
254
+ int waitForRelease = FALSE ;
255
+
256
+ struct tm *t ;
257
+ time_t tim ;
258
+
259
+ char buf [32] ;
260
+
261
+ if (argc != 2)
262
+ return usage (argv [0]) ;
263
+
264
+ printf ("Raspberry Pi Adafruit LCD test\n") ;
265
+ printf ("==============================\n") ;
266
+
267
+ colour = atoi (argv [1]) ;
268
+
269
+ wiringPiSetupSys () ;
270
+ mcp23017Setup (AF_BASE, 0x20) ;
271
+
272
+ adafruitLCDSetup (colour) ;
273
+
274
+ lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "Gordon Henderson") ;
275
+ lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ;
276
+
277
+ waitForEnter () ;
278
+
279
+ lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, "Adafruit RGB LCD") ;
280
+
281
+ waitForEnter () ;
282
+
283
+ lcdCharDef (lcdHandle, 2, newChar) ;
284
+
285
+ lcdClear (lcdHandle) ;
286
+ lcdPosition (lcdHandle, 0, 0) ;
287
+ lcdPuts (lcdHandle, "User Char: ") ;
288
+ lcdPutchar (lcdHandle, 2) ;
289
+
290
+ lcdCursor (lcdHandle, TRUE) ;
291
+ lcdCursorBlink (lcdHandle, TRUE) ;
292
+
293
+ waitForEnter () ;
294
+
295
+ lcdCursor (lcdHandle, FALSE) ;
296
+ lcdCursorBlink (lcdHandle, FALSE) ;
297
+
298
+ speedTest () ;
299
+
300
+ lcdClear (lcdHandle) ;
301
+
302
+ for (;;)
303
+ {
304
+ scrollMessage (0, cols) ;
305
+
306
+ tim = time (NULL) ;
307
+ t = localtime (&tim) ;
308
+
309
+ sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ;
310
+
311
+ lcdPosition (lcdHandle, (cols - 8) / 2, 1) ;
312
+ lcdPuts (lcdHandle, buf) ;
313
+
314
+ // Check buttons to cycle colour
315
+
316
+ // If Up or Down are still pushed, then skip
317
+
318
+ if (waitForRelease)
319
+ {
320
+ if ((digitalRead (AF_UP) == LOW) || (digitalRead (AF_DOWN) == LOW))
321
+ continue ;
322
+ else
323
+ waitForRelease = FALSE ;
324
+ }
325
+
326
+ if (digitalRead (AF_UP) == LOW) // Pushed
327
+ {
328
+ colour = colour + 1 ;
329
+ if (colour == 8)
330
+ colour = 0 ;
331
+ setBacklightColour (colour) ;
332
+ waitForRelease = TRUE ;
333
+ }
334
+
335
+ if (digitalRead (AF_DOWN) == LOW) // Pushed
336
+ {
337
+ colour = colour - 1 ;
338
+ if (colour == -1)
339
+ colour = 7 ;
340
+ setBacklightColour (colour) ;
341
+ waitForRelease = TRUE ;
342
+ }
343
+
344
+ }
345
+
346
+ return 0 ;
347
+ }
@@ -0,0 +1,286 @@
1
+ /*
2
+ * lcd.c:
3
+ * Text-based LCD driver.
4
+ * This is designed to drive the parallel interface LCD drivers
5
+ * based in the Hitachi HD44780U controller and compatables.
6
+ *
7
+ * This test program assumes the following:
8
+ *
9
+ * 8-bit displays:
10
+ * GPIO 0-7 is connected to display data pins 0-7.
11
+ * GPIO 11 is the RS pin.
12
+ * GPIO 10 is the Strobe/E pin.
13
+ *
14
+ * For 4-bit interface:
15
+ * GPIO 4-7 is connected to display data pins 4-7.
16
+ * GPIO 11 is the RS pin.
17
+ * GPIO 10 is the Strobe/E pin.
18
+ *
19
+ * Copyright (c) 2012-2013 Gordon Henderson.
20
+ ***********************************************************************
21
+ * This file is part of wiringPi:
22
+ * https://projects.drogon.net/raspberry-pi/wiringpi/
23
+ *
24
+ * wiringPi is free software: you can redistribute it and/or modify
25
+ * it under the terms of the GNU Lesser General Public License as published by
26
+ * the Free Software Foundation, either version 3 of the License, or
27
+ * (at your option) any later version.
28
+ *
29
+ * wiringPi is distributed in the hope that it will be useful,
30
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
31
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32
+ * GNU Lesser General Public License for more details.
33
+ *
34
+ * You should have received a copy of the GNU Lesser General Public License
35
+ * along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
36
+ ***********************************************************************
37
+ */
38
+
39
+ #include <stdio.h>
40
+ #include <stdlib.h>
41
+ #include <stdint.h>
42
+
43
+ #include <unistd.h>
44
+ #include <string.h>
45
+ #include <time.h>
46
+
47
+ #include <wiringPi.h>
48
+ #include <lcd.h>
49
+
50
+ #ifndef TRUE
51
+ # define TRUE (1==1)
52
+ # define FALSE (1==2)
53
+ #endif
54
+
55
+ static unsigned char newChar [8] =
56
+ {
57
+ 0b11111,
58
+ 0b10001,
59
+ 0b10001,
60
+ 0b10101,
61
+ 0b11111,
62
+ 0b10001,
63
+ 0b10001,
64
+ 0b11111,
65
+ } ;
66
+
67
+
68
+ // Global lcd handle:
69
+
70
+ static int lcdHandle ;
71
+
72
+ /*
73
+ * usage:
74
+ *********************************************************************************
75
+ */
76
+
77
+ int usage (const char *progName)
78
+ {
79
+ fprintf (stderr, "Usage: %s bits cols rows\n", progName) ;
80
+ return EXIT_FAILURE ;
81
+ }
82
+
83
+
84
+ /*
85
+ * scrollMessage:
86
+ *********************************************************************************
87
+ */
88
+
89
+ static const char *message =
90
+ " "
91
+ "Wiring Pi by Gordon Henderson. HTTP://WIRINGPI.COM/"
92
+ " " ;
93
+
94
+ void scrollMessage (int line, int width)
95
+ {
96
+ char buf [32] ;
97
+ static int position = 0 ;
98
+ static int timer = 0 ;
99
+
100
+ if (millis () < timer)
101
+ return ;
102
+
103
+ timer = millis () + 200 ;
104
+
105
+ strncpy (buf, &message [position], width) ;
106
+ buf [width] = 0 ;
107
+ lcdPosition (lcdHandle, 0, line) ;
108
+ lcdPuts (lcdHandle, buf) ;
109
+
110
+ if (++position == (strlen (message) - width))
111
+ position = 0 ;
112
+ }
113
+
114
+
115
+ /*
116
+ * pingPong:
117
+ * Bounce a character - only on 4-line displays
118
+ *********************************************************************************
119
+ */
120
+
121
+ static void pingPong (int lcd, int cols)
122
+ {
123
+ static int position = 0 ;
124
+ static int dir = 0 ;
125
+
126
+ if (dir == 0) // Setup
127
+ {
128
+ dir = 1 ;
129
+ lcdPosition (lcdHandle, 0, 3) ;
130
+ lcdPutchar (lcdHandle, '*') ;
131
+ return ;
132
+ }
133
+
134
+ lcdPosition (lcdHandle, position, 3) ;
135
+ lcdPutchar (lcdHandle, ' ') ;
136
+ position += dir ;
137
+
138
+ if (position == cols)
139
+ {
140
+ dir = -1 ;
141
+ --position ;
142
+ }
143
+
144
+ if (position < 0)
145
+ {
146
+ dir = 1 ;
147
+ ++position ;
148
+ }
149
+
150
+ lcdPosition (lcdHandle, position, 3) ;
151
+ lcdPutchar (lcdHandle, '#') ;
152
+ }
153
+
154
+
155
+ /*
156
+ * waitForEnter:
157
+ *********************************************************************************
158
+ */
159
+
160
+ static void waitForEnter (void)
161
+ {
162
+ printf ("Press ENTER to continue: ") ;
163
+ (void)fgetc (stdin) ;
164
+ }
165
+
166
+
167
+ /*
168
+ * The works
169
+ *********************************************************************************
170
+ */
171
+
172
+ int main (int argc, char *argv[])
173
+ {
174
+ int i ;
175
+ int lcd ;
176
+ int bits, rows, cols ;
177
+
178
+ struct tm *t ;
179
+ time_t tim ;
180
+
181
+ char buf [32] ;
182
+
183
+ if (argc != 4)
184
+ return usage (argv [0]) ;
185
+
186
+ printf ("Raspberry Pi LCD test\n") ;
187
+ printf ("=====================\n") ;
188
+
189
+ bits = atoi (argv [1]) ;
190
+ cols = atoi (argv [2]) ;
191
+ rows = atoi (argv [3]) ;
192
+
193
+ if (!((rows == 1) || (rows == 2) || (rows == 4)))
194
+ {
195
+ fprintf (stderr, "%s: rows must be 1, 2 or 4\n", argv [0]) ;
196
+ return EXIT_FAILURE ;
197
+ }
198
+
199
+ if (!((cols == 16) || (cols == 20)))
200
+ {
201
+ fprintf (stderr, "%s: cols must be 16 or 20\n", argv [0]) ;
202
+ return EXIT_FAILURE ;
203
+ }
204
+
205
+ wiringPiSetup () ;
206
+
207
+ if (bits == 4)
208
+ lcdHandle = lcdInit (rows, cols, 4, 11,10, 4,5,6,7,0,0,0,0) ;
209
+ else
210
+ lcdHandle = lcdInit (rows, cols, 8, 11,10, 0,1,2,3,4,5,6,7) ;
211
+
212
+ if (lcdHandle < 0)
213
+ {
214
+ fprintf (stderr, "%s: lcdInit failed\n", argv [0]) ;
215
+ return -1 ;
216
+ }
217
+
218
+ lcdPosition (lcdHandle, 0, 0) ; lcdPuts (lcdHandle, "Gordon Henderson") ;
219
+ lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ;
220
+
221
+ waitForEnter () ;
222
+
223
+ if (rows > 1)
224
+ {
225
+ lcdPosition (lcdHandle, 0, 1) ; lcdPuts (lcdHandle, " wiringpi.com ") ;
226
+
227
+ if (rows == 4)
228
+ {
229
+ lcdPosition (lcdHandle, 0, 2) ;
230
+ for (i = 0 ; i < ((cols - 1) / 2) ; ++i)
231
+ lcdPuts (lcdHandle, "=-") ;
232
+ lcdPuts (lcdHandle, "=3") ;
233
+
234
+ lcdPosition (lcdHandle, 0, 3) ;
235
+ for (i = 0 ; i < ((cols - 1) / 2) ; ++i)
236
+ lcdPuts (lcdHandle, "-=") ;
237
+ lcdPuts (lcdHandle, "-4") ;
238
+ }
239
+ }
240
+
241
+ waitForEnter () ;
242
+
243
+ lcdCharDef (lcdHandle, 2, newChar) ;
244
+
245
+ lcdClear (lcdHandle) ;
246
+ lcdPosition (lcdHandle, 0, 0) ;
247
+ lcdPuts (lcdHandle, "User Char: ") ;
248
+ lcdPutchar (lcdHandle, 2) ;
249
+
250
+ lcdCursor (lcdHandle, TRUE) ;
251
+ lcdCursorBlink (lcdHandle, TRUE) ;
252
+
253
+ waitForEnter () ;
254
+
255
+ lcdCursor (lcdHandle, FALSE) ;
256
+ lcdCursorBlink (lcdHandle, FALSE) ;
257
+ lcdClear (lcdHandle) ;
258
+
259
+ for (;;)
260
+ {
261
+ scrollMessage (0, cols) ;
262
+
263
+ if (rows == 1)
264
+ continue ;
265
+
266
+ tim = time (NULL) ;
267
+ t = localtime (&tim) ;
268
+
269
+ sprintf (buf, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec) ;
270
+
271
+ lcdPosition (lcdHandle, (cols - 8) / 2, 1) ;
272
+ lcdPuts (lcdHandle, buf) ;
273
+
274
+ if (rows == 2)
275
+ continue ;
276
+
277
+ sprintf (buf, "%02d/%02d/%04d", t->tm_mday, t->tm_mon + 1, t->tm_year+1900) ;
278
+
279
+ lcdPosition (lcdHandle, (cols - 10) / 2, 2) ;
280
+ lcdPuts (lcdHandle, buf) ;
281
+
282
+ pingPong (lcd, cols) ;
283
+ }
284
+
285
+ return 0 ;
286
+ }