2 * seg_digit.scad : 7 segment and 16 segment digit generation library
4 * Author : Jose Ignacio Croce Busquets <jose.croce@gmail.com>
9 * The module contains the following public methods
11 * digit7_str(s, h, on)
12 * Writes a string from "0123456789ABCDEFabcdef" chars
13 * as a 7 digit display of the specified height.
14 * on = on-relief/low-relief flag
15 * digit7_int(v, h) Writes an integer value in decimal representation
16 * as a 7 digit display of the specified height.
17 * digit7_float(v, h) Writes a floating point value in decimal representation
18 * as a 7 digit display of the specified height.
21 /* Include general definitions */
25 * Creates a 7 segment display for the given string
26 * s String to display. Characters should be within "0"-"9", "A"-"F",
27 * "a"-"f" ranges. Otherwise nothing is shown.
29 * on on-relief/low-relief flag
31 module digit7_str(s, h, on = true)
33 for(i = [ 0 : len(s) ])
35 translate(v = [ i * digit_spacing(h), 0, 0 ])
36 put_digit7(s[i], h, on);
41 * Creates a 7 segment display for an integer value (decimal)
44 * on on-relief/low-relief flag
46 module digit7_int(v, h, on = true)
48 digit7_str(str(v), h, on);
52 * Creates a 7 segment display for a float value
55 * on on-relief/low-relief flag
57 module digit7_float(v, h, on = true)
60 if (search(".", s)[0] == undef) {
61 digit7_str(s, h, on); // integer value
63 for (i = [ 0 : search(".", s)[0] - 1 ]) {
64 translate(v = [ i * digit_spacing(h), 0, 0 ])
65 put_digit7(s[i], h, on);
67 translate(v = [ search(".", s)[0] * digit_spacing(h), 0, 0 ])
69 for (i = [ search(".", s)[0] : len(s) ]) {
70 translate(v = [ (i - 1) * digit_spacing(h) + segment_length(h) * 0.5
73 put_digit7(s[i], h, on);
79 * Creates a 7 segment display for the given character
80 * c Character to display. Should be within "0"-"9", "A"-"F", "a"-"f"
81 * ranges. Otherwise nothing is shown.
83 * on on-relief/low-relief flag
85 module put_digit7(c, h, on = true)
87 if (c == "0") digit7_0(h, on);
88 if (c == "1") digit7_1(h, on);
89 if (c == "2") digit7_2(h, on);
90 if (c == "3") digit7_3(h, on);
91 if (c == "4") digit7_4(h, on);
92 if (c == "5") digit7_5(h, on);
93 if (c == "6") digit7_6(h, on);
94 if (c == "7") digit7_7(h, on);
95 if (c == "8") digit7_8(h, on);
96 if (c == "9") digit7_9(h, on);
97 if (c == "A" || c == "a") digit7_A(h, on);
98 if (c == "B" || c == "b") digit7_B(h, on);
99 if (c == "C" || c == "c") digit7_C(h, on);
100 if (c == "D" || c == "d") digit7_D(h, on);
101 if (c == "E" || c == "e") digit7_E(h, on);
102 if (c == "F" || c == "f") digit7_F(h, on);
105 //---------------------------------------------------------------------------
106 // End of public modules - Just jump to the examples
107 //---------------------------------------------------------------------------
109 /* Draws 0 in a 7 segment digit
111 * on on-relief/low-relief flag
113 module digit7_0(h, on = true)
115 segment_a(segment_length(h), on);
116 segment_b(segment_length(h), on);
117 segment_c(segment_length(h), on);
118 segment_d(segment_length(h), on);
119 segment_e(segment_length(h), on);
120 segment_f(segment_length(h), on);
123 /* Draws 1 in a 7 segment digit
125 * on on-relief/low-relief flag
127 module digit7_1(h, on = true)
129 segment_b(segment_length(h), on);
130 segment_c(segment_length(h), on);
133 /* Draws 2 in a 7 segment digit
135 * on on-relief/low-relief flag
137 module digit7_2(h, on = true)
139 segment_a(segment_length(h), on);
140 segment_b(segment_length(h), on);
141 segment_d(segment_length(h), on);
142 segment_e(segment_length(h), on);
143 segment_g(segment_length(h), on);
146 /* Draws 3 in a 7 segment digit
148 * on on-relief/low-relief flag
150 module digit7_3(h, on = true)
152 segment_a(segment_length(h), on);
153 segment_b(segment_length(h), on);
154 segment_c(segment_length(h), on);
155 segment_d(segment_length(h), on);
156 segment_g(segment_length(h), on);
159 /* Draws 4 in a 7 segment digit
161 * on on-relief/low-relief flag
163 module digit7_4(h, on = true)
165 segment_b(segment_length(h), on);
166 segment_c(segment_length(h), on);
167 segment_f(segment_length(h), on);
168 segment_g(segment_length(h), on);
171 /* Draws 5 in a 7 segment digit
173 * on on-relief/low-relief flag
175 module digit7_5(h, on = true)
177 segment_a(segment_length(h), on);
178 segment_c(segment_length(h), on);
179 segment_d(segment_length(h), on);
180 segment_f(segment_length(h), on);
181 segment_g(segment_length(h), on);
184 /* Draws 6 in a 7 segment digit
186 * on on-relief/low-relief flag
188 module digit7_6(h, on = true)
190 segment_a(segment_length(h), on);
191 segment_c(segment_length(h), on);
192 segment_d(segment_length(h), on);
193 segment_e(segment_length(h), on);
194 segment_f(segment_length(h), on);
195 segment_g(segment_length(h), on);
198 /* Draws 7 in a 7 segment digit
200 * on on-relief/low-relief flag
202 module digit7_7(h, on = true)
204 segment_a(segment_length(h), on);
205 segment_b(segment_length(h), on);
206 segment_c(segment_length(h), on);
209 /* Draws 8 in a 7 segment digit
211 * on on-relief/low-relief flag
213 module digit7_8(h, on = true)
215 segment_a(segment_length(h), on);
216 segment_b(segment_length(h), on);
217 segment_c(segment_length(h), on);
218 segment_d(segment_length(h), on);
219 segment_e(segment_length(h), on);
220 segment_f(segment_length(h), on);
221 segment_g(segment_length(h), on);
224 /* Draws 9 in a 7 segment digit
226 * on on-relief/low-relief flag
228 module digit7_9(h, on = true)
230 segment_a(segment_length(h), on);
231 segment_b(segment_length(h), on);
232 segment_c(segment_length(h), on);
233 segment_f(segment_length(h), on);
234 segment_g(segment_length(h), on);
237 /* Draws A in a 7 segment digit
239 * on on-relief/low-relief flag
241 module digit7_A(h, on = true)
243 segment_a(segment_length(h), on);
244 segment_b(segment_length(h), on);
245 segment_c(segment_length(h), on);
246 segment_e(segment_length(h), on);
247 segment_f(segment_length(h), on);
248 segment_g(segment_length(h), on);
251 /* Draws b in a 7 segment digit
253 * on on-relief/low-relief flag
255 module digit7_B(h, on = true)
257 segment_c(segment_length(h), on);
258 segment_d(segment_length(h), on);
259 segment_e(segment_length(h), on);
260 segment_f(segment_length(h), on);
261 segment_g(segment_length(h), on);
264 /* Draws C in a 7 segment digit
266 * on on-relief/low-relief flag
268 module digit7_C(h, on = true)
270 segment_a(segment_length(h), on);
271 segment_d(segment_length(h), on);
272 segment_e(segment_length(h), on);
273 segment_f(segment_length(h), on);
276 /* Draws d in a 7 segment digit
278 * on on-relief/low-relief flag
280 module digit7_D(h, on = true)
282 segment_b(segment_length(h), on);
283 segment_c(segment_length(h), on);
284 segment_d(segment_length(h), on);
285 segment_e(segment_length(h), on);
286 segment_g(segment_length(h), on);
289 /* Draws E in a 7 segment digit
291 * on on-relief/low-relief flag
293 module digit7_E(h, on = true)
295 segment_a(segment_length(h), on);
296 segment_d(segment_length(h), on);
297 segment_e(segment_length(h), on);
298 segment_f(segment_length(h), on);
299 segment_g(segment_length(h), on);
302 /* Draws F in a 7 segment digit
304 * on on-relief/low-relief flag
306 module digit7_F(h, on = true)
308 segment_a(segment_length(h), on);
309 segment_e(segment_length(h), on);
310 segment_f(segment_length(h), on);
311 segment_g(segment_length(h), on);
314 //---------------------------------------------------------------------------
316 //---------------------------------------------------------------------------
318 ex_height = 100; // Digit height for all examples
320 // Base for on-relief examples
321 translate(v = [ 0, 0, -2 * segment_radius(ex_height) ])
322 cube(size = [ (len("0123456789ABCDEF") + 2) * digit_spacing(ex_height)
324 , 2 * segment_radius(ex_height)
327 // On relief examples
328 translate(v = [ digit_spacing(ex_height), 3.5 * ex_height, 0 ])
329 digit7_str("0123456789ABCDEF", ex_height);
331 translate(v = [ digit_spacing(ex_height), 2 * ex_height, 0 ])
332 digit7_int(65535, ex_height);
334 translate(v = [ digit_spacing(ex_height), 0.5 * ex_height, 0 ])
335 digit7_float(123.45, ex_height);
337 // Low relief examples
338 // Low relief effect is performed by substracting from the base
339 translate(v = [ 0, -5 * ex_height, 0 ])
342 // Base for low-relief examples
343 translate(v = [ 0, 0, -2 * segment_radius(ex_height) ])
344 cube(size = [ (len("0123456789ABCDEF") + 2) * digit_spacing(ex_height)
346 , 2 * segment_radius(ex_height)
349 translate(v = [ digit_spacing(ex_height), 3.5 * ex_height, 0 ])
350 digit7_str("0123456789ABCDEF", ex_height, on = false);
352 translate(v = [ digit_spacing(ex_height), 2 * ex_height, 0 ])
353 digit7_int(65535, 100, on = false);
355 translate(v = [ digit_spacing(ex_height), 0.5 * ex_height, 0 ])
356 digit7_float(123.45, 100, on = false);
359 /* EOF : seg_digit.scad */