diff --git a/readme.md b/readme.md
index 34e76de..616c1fb 100644
--- a/readme.md
+++ b/readme.md
@@ -48,6 +48,36 @@ A list of changes classified as breaking, additions or fixes is maintained in [C
Hygrometer | Pulleys | Zipties | Strap_handle | | |
+---
+
+## 7_segments
+7 Segment displays
+
+[vitamins/7_segments.scad](vitamins/7_segments.scad) Object definitions.
+
+[vitamins/7_segment.scad](vitamins/7_segment.scad) Implementation.
+
+[tests/7_segments.scad](tests/7_segments.scad) Code for this example.
+
+### Properties
+| Function | Description |
+|:--- |:--- |
+| `7_segment_digit_size(type)` | Size of the actual digit and segemnt width and angle |
+| `7_segment_pin_pitch(type)` | x and y pin pitches and pin diameter |
+| `7_segment_pins(type)` | None |
+| `7_segment_size(type)` | Size of the body |
+
+### Modules
+| Module | Description |
+|:--- |:--- |
+| `7_segment_digit(type, colour = grey(95)` | Draw the specified 7 segment digit |
+| `7_segment_digits(type, n, colour = grey(70)` | Draw n digits side by side |
+
+
+
+
+Top
+
---
## Axials
diff --git a/tests/7_segments.scad b/tests/7_segments.scad
new file mode 100644
index 0000000..d01c4f9
--- /dev/null
+++ b/tests/7_segments.scad
@@ -0,0 +1,29 @@
+//
+// NopSCADlib Copyright Chris Palmer 2021
+// nop.head@gmail.com
+// hydraraptor.blogspot.com
+//
+// This file is part of NopSCADlib.
+//
+// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
+// GNU General Public License as published by the Free Software Foundation, either version 3 of
+// the License, or (at your option) any later version.
+//
+// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with NopSCADlib.
+// If not, see .
+//
+include <../core.scad>
+use <../utils/layout.scad>
+
+include <../vitamins/7_segments.scad>
+
+module 7_segments()
+ layout([for(s = 7_segments) 7_segment_size(s).x * 2], 5) let(s = 7_segments[$i])
+ 7_segment_digits(s, 2);
+
+if($preview)
+ 7_segments();
diff --git a/tests/PCB.scad b/tests/PCB.scad
index ee378fa..d1aef4e 100644
--- a/tests/PCB.scad
+++ b/tests/PCB.scad
@@ -22,6 +22,8 @@ include <../vitamins/d_connectors.scad>
include <../vitamins/leds.scad>
include <../vitamins/axials.scad>
include <../vitamins/smds.scad>
+include <../vitamins/7_segments.scad>
+include <../vitamins/potentiometers.scad>
use <../vitamins/pcb.scad>
@@ -46,7 +48,7 @@ TMC2130 = ["TMC2130", "TMC2130",
[]
];
-test_pcb = ["TestPCB", "Test PCB",
+test_pcb = ["test_pcb", "Test PCB",
100, 250, 1.6, // length, width, thickness
3, // Corner radius
2.75, // Mounting hole diameter
@@ -138,6 +140,7 @@ test_pcb = ["TestPCB", "Test PCB",
[ 50, 220, 0, "standoff", 5, 4.5, 12.5, 2.54],
[ 50, 240, 0, "potentiometer"],
[ 75, 240, 0, "potentiometer", 7, 8],
+ [ 30, 85, -90, "7seg", WT5011BSR, 2],
],
// accessories
[]
diff --git a/tests/png/7_segments.png b/tests/png/7_segments.png
new file mode 100644
index 0000000..80e1390
Binary files /dev/null and b/tests/png/7_segments.png differ
diff --git a/vitamins/7_segment.scad b/vitamins/7_segment.scad
new file mode 100644
index 0000000..2111a80
--- /dev/null
+++ b/vitamins/7_segment.scad
@@ -0,0 +1,107 @@
+//
+// NopSCADlib Copyright Chris Palmer 2021
+// nop.head@gmail.com
+// hydraraptor.blogspot.com
+//
+// This file is part of NopSCADlib.
+//
+// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
+// GNU General Public License as published by the Free Software Foundation, either version 3 of
+// the License, or (at your option) any later version.
+//
+// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with NopSCADlib.
+// If not, see .
+//
+
+//
+//! 7 Segment displays
+//
+include <../utils/core/core.scad>
+
+
+function 7_segment_size(type) = type[1]; //! Size of the body
+function 7_segment_digit_size(type) = type[2]; //! Size of the actual digit and segemnt width and angle
+function 7_segment_pins(type) = type[3]; //! [x, y] array of pins
+function 7_segment_pin_pitch(type) = type[4]; //! x and y pin pitches and pin diameter
+
+module 7_segment_digit(type, colour = grey(95), pin_length = 6.4) { //! Draw the specified 7 segment digit
+ size = 7_segment_size(type);
+ digit = 7_segment_digit_size(type);
+ pins = 7_segment_pins(type);
+ pin_pitch = 7_segment_pin_pitch(type);
+
+ color(grey(95))
+ linear_extrude(size.z)
+ square([size.x - 0.1, size.y], center = true);
+
+ color(grey(15))
+ translate_z(size.z)
+ cube([size.x - 0.1, size.y, eps], center = true);
+
+ color(colour)
+ translate_z(size.z)
+ linear_extrude(2 * eps) {
+ t = digit[2];
+ a = digit[3];
+ sq = [digit.x - 2 * t, (digit.y - 3 * t) / 2];
+
+ multmatrix([ // Skew
+ [1, tan(a), 0, 0],
+ [0, 1, 0, 0],
+ [0, 0, 1, 0],
+ [0, 0, 0, 1]
+ ])
+ difference() {
+ square([digit.x, digit.y], center = true);
+
+ for(y = [-1, 1], x = [-1, 1]) {
+ translate([0, y * (t + sq.y) / 2])
+ square(sq, center = true);
+
+
+ translate([x * digit.x / 2, y * digit.y / 2])
+ rotate(-45 * x * y) {
+ square([10, t], center = true);
+
+ square([t / 5, 10], center = true);
+ }
+
+ translate([x * (digit.x - t) / 2, 0])
+ rotate(45) {
+ square([t / 5, t * 2], center = true);
+
+ square([t * 2, t / 5], center = true);
+
+ translate([x * t / 2, -x * t / 2])
+ square([t, t], center = true);
+ }
+ }
+ }
+ r = 1.25 * t / 2;
+ translate([digit.x / 2 - r + digit.y / 2 * tan(a), -digit.y / 2 + r])
+ circle(r);
+ }
+
+ color(silver)
+ translate_z(-pin_length)
+ linear_extrude(pin_length)
+ for(x = [0 : 1 : pins.x - 1], y = [0 : 1 : pins.y - 1])
+ translate([(x - (pins.x - 1) / 2) * pin_pitch.x, (y - (pins.y - 1) / 2) * pin_pitch.y])
+ circle(d = pin_pitch[2], $fn = 16);
+}
+
+module 7_segment_digits(type, n, colour = grey(70), pin_length = 6.4, cutout = false) { //! Draw n digits side by side
+ size = 7_segment_size(type);
+
+ if(cutout)
+ linear_extrude(100)
+ square([n * size.x, size.y], center = true);
+ else
+ for(i = [0 : 1 : n - 1])
+ translate([(i - (n - 1) / 2) * size.x, 0])
+ 7_segment_digit(type, colour, pin_length);
+}
diff --git a/vitamins/7_segments.scad b/vitamins/7_segments.scad
new file mode 100644
index 0000000..3a30c3c
--- /dev/null
+++ b/vitamins/7_segments.scad
@@ -0,0 +1,28 @@
+//
+// NopSCADlib Copyright Chris Palmer 2021
+// nop.head@gmail.com
+// hydraraptor.blogspot.com
+//
+// This file is part of NopSCADlib.
+//
+// NopSCADlib is free software: you can redistribute it and/or modify it under the terms of the
+// GNU General Public License as published by the Free Software Foundation, either version 3 of
+// the License, or (at your option) any later version.
+//
+// NopSCADlib is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along with NopSCADlib.
+// If not, see .
+//
+
+//
+//! 7 Segment displays
+//
+
+WT5011BSR = ["WT5011BSR", [12.7, 19, 8.2], [7.2, 12.7, 1.2, 10], [5, 2], [inch(0.1), inch(0.6), 0.4]];
+
+7_segments = [ WT5011BSR ];
+
+use <7_segment.scad>
diff --git a/vitamins/pcbs.scad b/vitamins/pcbs.scad
index 90dbed1..98a1c2a 100644
--- a/vitamins/pcbs.scad
+++ b/vitamins/pcbs.scad
@@ -22,6 +22,8 @@ include
include
include
include
+include <7_segments.scad>
+include
//
// l w t r h l c b h