diff --git a/libtest.png b/libtest.png
index d3ae1fe..7f74b33 100644
Binary files a/libtest.png and b/libtest.png differ
diff --git a/readme.md b/readme.md
index 76c9332..40a6cb2 100644
--- a/readme.md
+++ b/readme.md
@@ -208,7 +208,7 @@ exposing enough information to make a battery box.
## Belts
Models timing belt running over toothed or smooth pulleys and calculates an accurate length.
-Only models 2D paths, so not core XY!
+Only models 2D paths, so not crossed belt core XY!
To make the back of the belt run against a smooth pulley on the outside of the loop specify a negative pitch radius.
@@ -250,15 +250,16 @@ Individual teeth are not drawn, instead they are represented by a lighter colour
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
| 1 | ```belt(GT2x6, [ ... ])``` | Belt GT2 x 6mm x 128mm |
-| 1 | ```belt(GT2x6, [ ... ], 80, [0, 0])``` | Belt GT2 x 6mm x 696mm |
+| 2 | ```belt(GT2x6, [ ... ], 80, [0, 0])``` | Belt GT2 x 6mm x 572mm |
| 1 | ```belt(T2p5x6, [ ... ])``` | Belt T2.5 x 6mm x 130mm |
| 1 | ```belt(T5x10, [ ... ])``` | Belt T5 x 10mm x 130mm |
| 1 | ```belt(T5x6, [ ... ])``` | Belt T5 x 6mm x 130mm |
-| 1 | ```insert(F1BM3)``` | Heatfit insert M3 |
-| 2 | ```pulley(GT2x20_toothed_idler)``` | Pulley GT2 idler 20 teeth |
+| 2 | ```insert(F1BM3)``` | Heatfit insert M3 |
+| 2 | ```pulley(GT2x16_toothed_idler)``` | Pulley GT2 idler 16 teeth |
+| 4 | ```pulley(GT2x20_toothed_idler)``` | Pulley GT2 idler 20 teeth |
| 2 | ```pulley(GT2x16_plain_idler)``` | Pulley GT2 idler smooth 9.63mm |
| 2 | ```pulley(GT2x20ob_pulley)``` | Pulley GT2OB 20 teeth |
-| 1 | ```screw(M3_cs_cap_screw, 20)``` | Screw M3 cs cap x 20mm |
+| 2 | ```screw(M3_cs_cap_screw, 20)``` | Screw M3 cs cap x 20mm |
| 4 | ```screw(M3_grub_screw, 6)``` | Screw M3 grub x 6mm |
@@ -757,6 +758,7 @@ LCD dispays.
### Vitamins
| Qty | Module call | BOM entry |
| ---:|:--- |:---|
+| 1 | ```display(BigTreeTech_TFT35v3_0)``` | BigTreeTech TFT35 v3.0 |
| 1 | ```display(HDMI5)``` | HDMI display 5" |
| 1 | ```display(LCD1602A)``` | LCD display 1602A |
| 1 | ```display(LCDS7282B)``` | LCD display S-7282B |
diff --git a/tests/belts.scad b/tests/belts.scad
index 22bfeaf..a76d2c1 100644
--- a/tests/belts.scad
+++ b/tests/belts.scad
@@ -23,46 +23,52 @@ use <../vitamins/insert.scad>
use <../utils/layout.scad>
module belt_test() {
- p1 = [75, -50];
p2 = [-75, -50];
p3 = [-75, 100];
p4 = [75, 100];
- p5 = [75 - pulley_pr(GT2x20ob_pulley) - pulley_pr(GT2x16_plain_idler), -pulley_pr(GT2x16_plain_idler)];
- p6 = [-75 + pulley_pr(GT2x20ob_pulley) + pulley_pr(GT2x16_plain_idler), -pulley_pr(GT2x16_plain_idler)];
+ p5 = [75 + pulley_pr(GT2x20ob_pulley) - pulley_pr(GT2x16_plain_idler), +pulley_pr(GT2x16_plain_idler)];
+ p6 = [-75 + pulley_pr(GT2x20ob_pulley) + pulley_pr(GT2x16_plain_idler), -pulley_pr(GT2x16_plain_idler)];
- translate(p1) pulley_assembly(GT2x20ob_pulley);
- translate(p2) pulley_assembly(GT2x20ob_pulley);
- translate(p3) pulley_assembly(GT2x20_toothed_idler);
- translate(p4) pulley_assembly(GT2x20_toothed_idler);
+ module pulleys(flip = false) {
+ translate(p2) rotate([0, flip ? 180 : 0, 0]) pulley_assembly(GT2x20ob_pulley);
+ translate(p3) pulley_assembly(GT2x20_toothed_idler);
+ translate(p4) pulley_assembly(GT2x20_toothed_idler);
+ translate(p5) {
+ pulley = GT2x16_toothed_idler;
+ screw = find_screw(hs_cs_cap, pulley_bore(pulley));
+ insert = screw_insert(screw);
- translate(p5) {
- pulley = GT2x16_plain_idler;
- screw = find_screw(hs_cs_cap, pulley_bore(pulley));
- insert = screw_insert(screw);
-
- pulley_assembly(pulley);
- translate_z(pulley_height(pulley) + pulley_offset(pulley) + screw_head_depth(screw, pulley_bore(pulley)))
- screw(screw, 20);
-
- translate_z(pulley_offset(pulley) - insert_length(insert))
- vflip()
- insert(insert);
+ rotate([0, flip ? 180 : 0, 0]) {
+ pulley_assembly(pulley);
+ translate_z(pulley_height(pulley) + pulley_offset(pulley) + screw_head_depth(screw, pulley_bore(pulley)))
+ screw(screw, 20);
+ translate_z(pulley_offset(pulley) - insert_length(insert))
+ vflip()
+ insert(insert);
+ }
+ }
+ translate(p6) pulley_assembly(GT2x16_plain_idler);
}
- translate(p6) pulley_assembly(GT2x16_plain_idler);
- path = [ [p1.x, p1.y, pulley_pr(GT2x20ob_pulley)],
- [p5.x, p5.y, -pulley_pr(GT2x16_plain_idler)],
+ path = [ [p5.x, p5.y, pulley_pr(GT2x16_plain_idler)],
[p6.x, p6.y, -pulley_pr(GT2x16_plain_idler)],
[p2.x, p2.y, pulley_pr(GT2x20ob_pulley)],
[p3.x, p3.y, pulley_pr(GT2x20ob_pulley)],
[p4.x, p4.y, pulley_pr(GT2x20ob_pulley)]
];
+
belt = GT2x6;
belt(belt, path, 80, [0, 0]);
+ pulleys();
+ translate_z(20)
+ hflip() {
+ belt(belt, path, 80, [0, 0], belt_colour = grey(90), tooth_colour = grey(50));
+ pulleys(flip=true);
+ }
- translate([-25, 0])
+ translate([-25, 0, 10])
layout([for(b = belts) belt_width(b)], 10)
rotate([0, 90, 0])
belt(belts[$i], [[0, 0, 20], [0, 1, 20]], belt_colour = $i%2==0 ? grey(90) : grey(20), tooth_colour = $i%2==0 ? grey(70) : grey(50));
diff --git a/tests/png/belts.png b/tests/png/belts.png
index 52743d0..a2b1296 100644
Binary files a/tests/png/belts.png and b/tests/png/belts.png differ
diff --git a/tests/png/displays.png b/tests/png/displays.png
index 17ee39b..45507e0 100644
Binary files a/tests/png/displays.png and b/tests/png/displays.png differ
diff --git a/vitamins/belt.scad b/vitamins/belt.scad
index 01d3890..2142920 100644
--- a/vitamins/belt.scad
+++ b/vitamins/belt.scad
@@ -19,7 +19,7 @@
//
//! Models timing belt running over toothed or smooth pulleys and calculates an accurate length.
-//! Only models 2D paths, so not core XY!
+//! Only models 2D paths, so not crossed belt core XY!
//!
//! To make the back of the belt run against a smooth pulley on the outside of the loop specify a negative pitch radius.
//!
diff --git a/vitamins/displays.scad b/vitamins/displays.scad
index 391a45e..22144c9 100644
--- a/vitamins/displays.scad
+++ b/vitamins/displays.scad
@@ -73,6 +73,42 @@ SSD1963_4p3 = ["SSD1963_4p3", "LCD display SSD1963 4.3\"", 105.5, 67.2, 3.4, SSD
[[0, -34.5], [12, -31.5]],
];
-displays = [HDMI5, SSD1963_4p3, LCD1602A, LCDS7282B];
+BigTreeTech_TFT35v3_0_PCB = ["", "",
+ 110, 55.77, 1.6, 0, 3, 0, "green", false,
+ [ [-3.12, 3.17], [-3.12, -3.17], [3.12, -3.17], [3.12, 3.17] ],
+ [
+ [ 10, 7.5, 0, "-button_6mm" ],
+ [ 9, 43, 0, "-buzzer", 5, 9 ],
+ [ 9, 27, 0, "-potentiometer" ],
+ [ 102,28.82, 0, "uSD", [26.5, 16, 3] ],
+ [16.5, 5.9, 0, "2p54boxhdr", 5, 2 ],
+ [36.5, 5.9, 0, "2p54boxhdr", 5, 2 ],
+ [56.5, 5.9, 0, "2p54boxhdr", 5, 2 ],
+ [82.5, 4, 0, "jst_xh", 5 ],
+ [26.5, 52.8, 180, "jst_xh", 2 ],
+ [39.5, 52.8, 180, "jst_xh", 3 ],
+ [52.5, 52.8, 180, "jst_xh", 3 ],
+ [65.5, 52.8, 180, "jst_xh", 3 ],
+ [78.5, 52.8, 180, "jst_xh", 3 ],
+ [94.5, 52.8, 180, "jst_xh", 5 ],
+ [ 8, 43, 180, "usb_A" ],
+ [ 97, 4, 0, "chip", 9, 3.5, 1, grey(20) ],
+ // ESP-8266
+ [ 23, 28, 90, "2p54socket", 4, 2 ],
+ ],
+ []
+];
+
+BigTreeTech_TFT35v3_0 = ["BigTreeTech_TFT35v3_0", "BigTreeTech TFT35 v3.0",
+ 84.5, 54.5, 4, BigTreeTech_TFT35v3_0_PCB,
+ [-6, 0, 0], // pcb offset
+ [[-40, -26.5], [41.5, 26.5, 0.5]], // aperture
+ [], // touch screen
+ 0, // thread length
+ [], // clearance need for the ts ribbon
+];
+
+
+displays = [HDMI5, SSD1963_4p3, BigTreeTech_TFT35v3_0, LCD1602A, LCDS7282B];
use