2 * digit7.scad : 7 segment digit generation library
4 * Author : Jose Ignacio Croce Busquets <jose@crossforests.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] - 1) * digit_spacing(h), 0, 0 ])
68 put_digit7(s[i], h, on);
69 for (i = [ search(".", s)[0] : len(s) ]) {
70 translate(v = [ (i - 1) * digit_spacing(h)
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 == ".") digit7_P(h, on);
88 if (c == "0") digit7_0(h, on);
89 if (c == "1") digit7_1(h, on);
90 if (c == "2") digit7_2(h, on);
91 if (c == "3") digit7_3(h, on);
92 if (c == "4") digit7_4(h, on);
93 if (c == "5") digit7_5(h, on);
94 if (c == "6") digit7_6(h, on);
95 if (c == "7") digit7_7(h, on);
96 if (c == "8") digit7_8(h, on);
97 if (c == "9") digit7_9(h, on);
98 if (c == "A" || c == "a") digit7_A(h, on);
99 if (c == "B" || c == "b") digit7_B(h, on);
100 if (c == "C" || c == "c") digit7_C(h, on);
101 if (c == "D" || c == "d") digit7_D(h, on);
102 if (c == "E" || c == "e") digit7_E(h, on);
103 if (c == "F" || c == "f") digit7_F(h, on);
106 //---------------------------------------------------------------------------
107 // End of public modules - Just jump to the examples
108 //---------------------------------------------------------------------------
110 /* Draws 0 in a 7 segment digit
112 * on on-relief/low-relief flag
114 module digit7_0(h, on = true)
116 segment_a(segment_length(h), on);
117 segment_b(segment_length(h), on);
118 segment_c(segment_length(h), on);
119 segment_d(segment_length(h), on);
120 segment_e(segment_length(h), on);
121 segment_f(segment_length(h), on);
124 /* Draws 1 in a 7 segment digit
126 * on on-relief/low-relief flag
128 module digit7_1(h, on = true)
130 segment_b(segment_length(h), on);
131 segment_c(segment_length(h), on);
134 /* Draws 2 in a 7 segment digit
136 * on on-relief/low-relief flag
138 module digit7_2(h, on = true)
140 segment_a(segment_length(h), on);
141 segment_b(segment_length(h), on);
142 segment_d(segment_length(h), on);
143 segment_e(segment_length(h), on);
144 segment_g(segment_length(h), on);
147 /* Draws 3 in a 7 segment digit
149 * on on-relief/low-relief flag
151 module digit7_3(h, on = true)
153 segment_a(segment_length(h), on);
154 segment_b(segment_length(h), on);
155 segment_c(segment_length(h), on);
156 segment_d(segment_length(h), on);
157 segment_g(segment_length(h), on);
160 /* Draws 4 in a 7 segment digit
162 * on on-relief/low-relief flag
164 module digit7_4(h, on = true)
166 segment_b(segment_length(h), on);
167 segment_c(segment_length(h), on);
168 segment_f(segment_length(h), on);
169 segment_g(segment_length(h), on);
172 /* Draws 5 in a 7 segment digit
174 * on on-relief/low-relief flag
176 module digit7_5(h, on = true)
178 segment_a(segment_length(h), on);
179 segment_c(segment_length(h), on);
180 segment_d(segment_length(h), on);
181 segment_f(segment_length(h), on);
182 segment_g(segment_length(h), on);
185 /* Draws 6 in a 7 segment digit
187 * on on-relief/low-relief flag
189 module digit7_6(h, on = true)
191 segment_a(segment_length(h), on);
192 segment_c(segment_length(h), on);
193 segment_d(segment_length(h), on);
194 segment_e(segment_length(h), on);
195 segment_f(segment_length(h), on);
196 segment_g(segment_length(h), on);
199 /* Draws 7 in a 7 segment digit
201 * on on-relief/low-relief flag
203 module digit7_7(h, on = true)
205 segment_a(segment_length(h), on);
206 segment_b(segment_length(h), on);
207 segment_c(segment_length(h), on);
210 /* Draws 8 in a 7 segment digit
212 * on on-relief/low-relief flag
214 module digit7_8(h, on = true)
216 segment_a(segment_length(h), on);
217 segment_b(segment_length(h), on);
218 segment_c(segment_length(h), on);
219 segment_d(segment_length(h), on);
220 segment_e(segment_length(h), on);
221 segment_f(segment_length(h), on);
222 segment_g(segment_length(h), on);
225 /* Draws 9 in a 7 segment digit
227 * on on-relief/low-relief flag
229 module digit7_9(h, on = true)
231 segment_a(segment_length(h), on);
232 segment_b(segment_length(h), on);
233 segment_c(segment_length(h), on);
234 segment_f(segment_length(h), on);
235 segment_g(segment_length(h), on);
238 /* Draws A in a 7 segment digit
240 * on on-relief/low-relief flag
242 module digit7_A(h, on = true)
244 segment_a(segment_length(h), on);
245 segment_b(segment_length(h), on);
246 segment_c(segment_length(h), on);
247 segment_e(segment_length(h), on);
248 segment_f(segment_length(h), on);
249 segment_g(segment_length(h), on);
252 /* Draws b in a 7 segment digit
254 * on on-relief/low-relief flag
256 module digit7_B(h, on = true)
258 segment_c(segment_length(h), on);
259 segment_d(segment_length(h), on);
260 segment_e(segment_length(h), on);
261 segment_f(segment_length(h), on);
262 segment_g(segment_length(h), on);
265 /* Draws C in a 7 segment digit
267 * on on-relief/low-relief flag
269 module digit7_C(h, on = true)
271 segment_a(segment_length(h), on);
272 segment_d(segment_length(h), on);
273 segment_e(segment_length(h), on);
274 segment_f(segment_length(h), on);
277 /* Draws d in a 7 segment digit
279 * on on-relief/low-relief flag
281 module digit7_D(h, on = true)
283 segment_b(segment_length(h), on);
284 segment_c(segment_length(h), on);
285 segment_d(segment_length(h), on);
286 segment_e(segment_length(h), on);
287 segment_g(segment_length(h), on);
290 /* Draws E in a 7 segment digit
292 * on on-relief/low-relief flag
294 module digit7_E(h, on = true)
296 segment_a(segment_length(h), on);
297 segment_d(segment_length(h), on);
298 segment_e(segment_length(h), on);
299 segment_f(segment_length(h), on);
300 segment_g(segment_length(h), on);
303 /* Draws F in a 7 segment digit
305 * on on-relief/low-relief flag
307 module digit7_F(h, on = true)
309 segment_a(segment_length(h), on);
310 segment_e(segment_length(h), on);
311 segment_f(segment_length(h), on);
312 segment_g(segment_length(h), on);
315 /* Draws a decimal point in a 7 segment digit
317 * on on-relief/low-relief flag
319 module digit7_P(h, on = true)
321 segment_p(segment_length(h), on);
324 //---------------------------------------------------------------------------
326 //---------------------------------------------------------------------------
328 ex_height = 100; // Digit height for all examples
330 // Base for on-relief examples
331 translate(v = [ 0, 0, -2 * segment_radius(ex_height) ])
332 cube(size = [ (len("0123456789ABCDEF") + 2) * digit_spacing(ex_height)
334 , 2 * segment_radius(ex_height)
337 // On relief examples
338 translate(v = [ digit_spacing(ex_height), 3.5 * ex_height, 0 ])
339 digit7_str("0123456789ABCDEF", ex_height);
341 translate(v = [ digit_spacing(ex_height), 2 * ex_height, 0 ])
342 digit7_int(65535, ex_height);
344 translate(v = [ digit_spacing(ex_height), 0.5 * ex_height, 0 ])
345 digit7_float(1234.56, ex_height);
347 // Low relief examples
348 // Low relief effect is performed by substracting from the base
349 translate(v = [ 0, -5 * ex_height, 0 ])
352 // Base for low-relief examples
353 translate(v = [ 0, 0, -2 * segment_radius(ex_height) ])
354 cube(size = [ (len("0123456789ABCDEF") + 2) * digit_spacing(ex_height)
356 , 2 * segment_radius(ex_height)
359 translate(v = [ digit_spacing(ex_height), 3.5 * ex_height, 0 ])
360 digit7_str("0123456789ABCDEF", ex_height, on = false);
362 translate(v = [ digit_spacing(ex_height), 2 * ex_height, 0 ])
363 digit7_int(65535, 100, on = false);
365 translate(v = [ digit_spacing(ex_height), 0.5 * ex_height, 0 ])
366 digit7_float(1234.56, 100, on = false);
369 /* EOF : digit7.scad */