2 * digit7.scad : 7 segment digit generation library
4 * Author : Jose Ignacio Croce Busquets <jose@crossforests.com>
8 * Copyright 2014, 2015 Jose Ignacio Croce Busquets
10 * This program is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
24 * The module contains the following public methods
26 * digit7_str(s, h, on)
27 * Writes a string from "0123456789ABCDEFabcdef" chars
28 * as a 7 digit display of the specified height.
29 * on = on-relief/low-relief flag
30 * digit7_int(v, h, on)
31 * Writes an integer value in decimal representation
32 * as a 7 digit display of the specified height.
33 * digit7_float(v, h, on)
34 * Writes a floating point value in decimal
35 * representation as a 7 digit display of the specified
39 /* Include general definitions */
43 * Creates a 7 segment display for the given string
44 * s String to display. Characters should be within "0"-"9", "A"-"F",
45 * "a"-"f" ranges. Otherwise nothing is shown.
47 * on on-relief/low-relief flag
49 module digit7_str(s, h, on = true)
51 for(i = [ 0 : len(s) ])
53 translate(v = [ i * digit_spacing(h), 0, 0 ])
54 put_digit7(s[i], h, on);
59 * Creates a 7 segment display for an integer value (decimal)
62 * on on-relief/low-relief flag
64 module digit7_int(v, h, on = true)
66 digit7_str(str(v), h, on);
70 * Creates a 7 segment display for a float value
73 * on on-relief/low-relief flag
75 module digit7_float(v, h, on = true)
78 if (search(".", s)[0] == undef) {
79 digit7_str(s, h, on); // integer value
81 for (i = [ 0 : search(".", s)[0] - 1 ]) {
82 translate(v = [ i * digit_spacing(h), 0, 0 ])
83 put_digit7(s[i], h, on);
85 translate(v = [ (search(".", s)[0] - 1) * digit_spacing(h), 0, 0 ])
86 put_digit7(s[i], h, on);
87 for (i = [ search(".", s)[0] : len(s) ]) {
88 translate(v = [ (i - 1) * digit_spacing(h)
91 put_digit7(s[i], h, on);
97 * Creates a 7 segment display for the given character
98 * c Character to display. Should be within "0"-"9", "A"-"F", "a"-"f"
99 * ranges. Otherwise nothing is shown.
101 * on on-relief/low-relief flag
103 module put_digit7(c, h, on = true)
105 if (c == ".") digit7_P(h, on);
106 if (c == "0") digit7_0(h, on);
107 if (c == "1") digit7_1(h, on);
108 if (c == "2") digit7_2(h, on);
109 if (c == "3") digit7_3(h, on);
110 if (c == "4") digit7_4(h, on);
111 if (c == "5") digit7_5(h, on);
112 if (c == "6") digit7_6(h, on);
113 if (c == "7") digit7_7(h, on);
114 if (c == "8") digit7_8(h, on);
115 if (c == "9") digit7_9(h, on);
116 if (c == "A" || c == "a") digit7_A(h, on);
117 if (c == "B" || c == "b") digit7_B(h, on);
118 if (c == "C" || c == "c") digit7_C(h, on);
119 if (c == "D" || c == "d") digit7_D(h, on);
120 if (c == "E" || c == "e") digit7_E(h, on);
121 if (c == "F" || c == "f") digit7_F(h, on);
124 //---------------------------------------------------------------------------
125 // End of public modules - Just jump to the examples
126 //---------------------------------------------------------------------------
128 /* Draws 0 in a 7 segment digit
130 * on on-relief/low-relief flag
132 module digit7_0(h, on = true)
134 segment_a(segment_length(h), on);
135 segment_b(segment_length(h), on);
136 segment_c(segment_length(h), on);
137 segment_d(segment_length(h), on);
138 segment_e(segment_length(h), on);
139 segment_f(segment_length(h), on);
142 /* Draws 1 in a 7 segment digit
144 * on on-relief/low-relief flag
146 module digit7_1(h, on = true)
148 segment_b(segment_length(h), on);
149 segment_c(segment_length(h), on);
152 /* Draws 2 in a 7 segment digit
154 * on on-relief/low-relief flag
156 module digit7_2(h, on = true)
158 segment_a(segment_length(h), on);
159 segment_b(segment_length(h), on);
160 segment_d(segment_length(h), on);
161 segment_e(segment_length(h), on);
162 segment_g(segment_length(h), on);
165 /* Draws 3 in a 7 segment digit
167 * on on-relief/low-relief flag
169 module digit7_3(h, on = true)
171 segment_a(segment_length(h), on);
172 segment_b(segment_length(h), on);
173 segment_c(segment_length(h), on);
174 segment_d(segment_length(h), on);
175 segment_g(segment_length(h), on);
178 /* Draws 4 in a 7 segment digit
180 * on on-relief/low-relief flag
182 module digit7_4(h, on = true)
184 segment_b(segment_length(h), on);
185 segment_c(segment_length(h), on);
186 segment_f(segment_length(h), on);
187 segment_g(segment_length(h), on);
190 /* Draws 5 in a 7 segment digit
192 * on on-relief/low-relief flag
194 module digit7_5(h, on = true)
196 segment_a(segment_length(h), on);
197 segment_c(segment_length(h), on);
198 segment_d(segment_length(h), on);
199 segment_f(segment_length(h), on);
200 segment_g(segment_length(h), on);
203 /* Draws 6 in a 7 segment digit
205 * on on-relief/low-relief flag
207 module digit7_6(h, on = true)
209 segment_a(segment_length(h), on);
210 segment_c(segment_length(h), on);
211 segment_d(segment_length(h), on);
212 segment_e(segment_length(h), on);
213 segment_f(segment_length(h), on);
214 segment_g(segment_length(h), on);
217 /* Draws 7 in a 7 segment digit
219 * on on-relief/low-relief flag
221 module digit7_7(h, on = true)
223 segment_a(segment_length(h), on);
224 segment_b(segment_length(h), on);
225 segment_c(segment_length(h), on);
228 /* Draws 8 in a 7 segment digit
230 * on on-relief/low-relief flag
232 module digit7_8(h, on = true)
234 segment_a(segment_length(h), on);
235 segment_b(segment_length(h), on);
236 segment_c(segment_length(h), on);
237 segment_d(segment_length(h), on);
238 segment_e(segment_length(h), on);
239 segment_f(segment_length(h), on);
240 segment_g(segment_length(h), on);
243 /* Draws 9 in a 7 segment digit
245 * on on-relief/low-relief flag
247 module digit7_9(h, on = true)
249 segment_a(segment_length(h), on);
250 segment_b(segment_length(h), on);
251 segment_c(segment_length(h), on);
252 segment_f(segment_length(h), on);
253 segment_g(segment_length(h), on);
256 /* Draws A in a 7 segment digit
258 * on on-relief/low-relief flag
260 module digit7_A(h, on = true)
262 segment_a(segment_length(h), on);
263 segment_b(segment_length(h), on);
264 segment_c(segment_length(h), on);
265 segment_e(segment_length(h), on);
266 segment_f(segment_length(h), on);
267 segment_g(segment_length(h), on);
270 /* Draws b in a 7 segment digit
272 * on on-relief/low-relief flag
274 module digit7_B(h, on = true)
276 segment_c(segment_length(h), on);
277 segment_d(segment_length(h), on);
278 segment_e(segment_length(h), on);
279 segment_f(segment_length(h), on);
280 segment_g(segment_length(h), on);
283 /* Draws C in a 7 segment digit
285 * on on-relief/low-relief flag
287 module digit7_C(h, on = true)
289 segment_a(segment_length(h), on);
290 segment_d(segment_length(h), on);
291 segment_e(segment_length(h), on);
292 segment_f(segment_length(h), on);
295 /* Draws d in a 7 segment digit
297 * on on-relief/low-relief flag
299 module digit7_D(h, on = true)
301 segment_b(segment_length(h), on);
302 segment_c(segment_length(h), on);
303 segment_d(segment_length(h), on);
304 segment_e(segment_length(h), on);
305 segment_g(segment_length(h), on);
308 /* Draws E in a 7 segment digit
310 * on on-relief/low-relief flag
312 module digit7_E(h, on = true)
314 segment_a(segment_length(h), on);
315 segment_d(segment_length(h), on);
316 segment_e(segment_length(h), on);
317 segment_f(segment_length(h), on);
318 segment_g(segment_length(h), on);
321 /* Draws F in a 7 segment digit
323 * on on-relief/low-relief flag
325 module digit7_F(h, on = true)
327 segment_a(segment_length(h), on);
328 segment_e(segment_length(h), on);
329 segment_f(segment_length(h), on);
330 segment_g(segment_length(h), on);
333 /* Draws a decimal point in a 7 segment digit
335 * on on-relief/low-relief flag
337 module digit7_P(h, on = true)
339 segment_p(segment_length(h), on);
342 //---------------------------------------------------------------------------
344 //---------------------------------------------------------------------------
346 ex_height = 100; // Digit height for all examples
348 // Base for on-relief examples
349 translate(v = [ 0, 0, -2 * segment_radius(ex_height) ])
350 cube(size = [ (len("0123456789ABCDEF") + 2) * digit_spacing(ex_height)
352 , 2 * segment_radius(ex_height)
355 // On relief examples
356 translate(v = [ digit_spacing(ex_height), 3.5 * ex_height, 0 ])
357 digit7_str("0123456789ABCDEF", ex_height);
359 translate(v = [ digit_spacing(ex_height), 2 * ex_height, 0 ])
360 digit7_int(65535, ex_height);
362 translate(v = [ digit_spacing(ex_height), 0.5 * ex_height, 0 ])
363 digit7_float(1234.56, ex_height);
365 // Low relief examples
366 // Low relief effect is performed by substracting from the base
367 translate(v = [ 0, -5 * ex_height, 0 ])
370 // Base for low-relief examples
371 translate(v = [ 0, 0, -2 * segment_radius(ex_height) ])
372 cube(size = [ (len("0123456789ABCDEF") + 2) * digit_spacing(ex_height)
374 , 2 * segment_radius(ex_height)
377 translate(v = [ digit_spacing(ex_height), 3.5 * ex_height, 0 ])
378 digit7_str("0123456789ABCDEF", ex_height, on = false);
380 translate(v = [ digit_spacing(ex_height), 2 * ex_height, 0 ])
381 digit7_int(65535, 100, on = false);
383 translate(v = [ digit_spacing(ex_height), 0.5 * ex_height, 0 ])
384 digit7_float(1234.56, 100, on = false);
387 /* EOF : digit7.scad */