├── OpenSCAD
├── MS-Gothic-SFD.ttf
├── Carousel_left.scad
├── Carousel_right.scad
├── Chassis.scad
├── Overallview.scad
├── PVC_Plate.scad
├── Printview.scad
├── Split_Flap_Module.scad
├── 2D_library.scad
├── _settings.scad
├── _font_setup.scad
└── 3D_library.scad
├── Arduino
├── pins_v2.ino
├── inputs_v2.ino
└── Split_Flap.ino
├── Raspberry_Pi
├── html
│ ├── text.php
│ ├── assets
│ │ ├── dist
│ │ │ └── css
│ │ │ │ └── cover.css
│ │ └── js
│ │ │ └── color-modes.js
│ └── index.php
├── i2c_transmit.php
└── split-flap.php
├── PCB
├── Module
│ ├── Module.kicad_prl
│ ├── SplitFlap.kicad_prl
│ ├── Module.kicad_pro
│ └── SplitFlap.kicad_pro
└── Backplane
│ ├── Backplane.kicad_prl
│ └── Backplane.kicad_pro
├── LICENSE
└── README.md
/OpenSCAD/MS-Gothic-SFD.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/g000ze/Split-Flap-Display/HEAD/OpenSCAD/MS-Gothic-SFD.ttf
--------------------------------------------------------------------------------
/Arduino/pins_v2.ino:
--------------------------------------------------------------------------------
1 | const byte hall_pin_0 = 18;
2 | const byte hall_pin_1 = 19;
3 | const byte hall_pin_2 = 20;
4 | const byte hall_pin_3 = 21;
5 | const byte hall_pin_4 = 9;
6 | const byte hall_pin_5 = 10;
7 | const byte hall_pin_6 = 11;
8 | const byte hall_pin_7 = 12;
9 |
10 | const byte step_pin_0 = 15;
11 | const byte step_pin_1 = 14;
12 | const byte step_pin_2 = 23;
13 | const byte step_pin_3 = 22;
14 | const byte step_pin_4 = 5;
15 | const byte step_pin_5 = 4;
16 | const byte step_pin_6 = 17;
17 | const byte step_pin_7 = 16;
18 |
19 |
--------------------------------------------------------------------------------
/Raspberry_Pi/html/text.php:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/OpenSCAD/Carousel_left.scad:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright Stefan Frech, 10.12.2021 - 28.09.2024
3 | Projekt Split-Flap Display Module
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 |
18 | include<3D_library.scad>;
19 |
20 | // Hier wird das Modul "projection" verwendet, um 2D
21 | // darzustellen und danach nach "dfx" zu exportieren.
22 | //projection() karussell_scheibe_links();
23 | karussell_scheibe_links();
24 |
--------------------------------------------------------------------------------
/OpenSCAD/Carousel_right.scad:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright Stefan Frech, 10.12.2021 - 28.09.2024
3 | Projekt Split-Flap Display Module
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 |
18 | include<3D_library.scad>;
19 |
20 | // Mit "projection" wird ein Shape von 3D zu 2D umgewandelt
21 | // damit es danach nach dfx exportiert werden kann.
22 | //projection() karussell_scheibe_rechts();
23 | karussell_scheibe_rechts();
24 |
--------------------------------------------------------------------------------
/Raspberry_Pi/html/assets/dist/css/cover.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Globals
3 | */
4 |
5 |
6 | /* Custom default button */
7 | .btn-light,
8 | .btn-light:hover,
9 | .btn-light:focus {
10 | color: #333;
11 | text-shadow: none; /* Prevent inheritance from `body` */
12 | }
13 |
14 |
15 | /*
16 | * Base structure
17 | */
18 |
19 | body {
20 | text-shadow: 0 .05rem .1rem rgba(0, 0, 0, .5);
21 | box-shadow: inset 0 0 5rem rgba(0, 0, 0, .5);
22 | }
23 |
24 | .cover-container {
25 | max-width: 42em;
26 | }
27 |
28 |
29 | /*
30 | * Header
31 | */
32 |
33 | .nav-masthead .nav-link {
34 | color: rgba(255, 255, 255, .5);
35 | border-bottom: .25rem solid transparent;
36 | }
37 |
38 | .nav-masthead .nav-link:hover,
39 | .nav-masthead .nav-link:focus {
40 | border-bottom-color: rgba(255, 255, 255, .25);
41 | }
42 |
43 | .nav-masthead .nav-link + .nav-link {
44 | margin-left: 1rem;
45 | }
46 |
47 | .nav-masthead .active {
48 | color: #fff;
49 | border-bottom-color: #fff;
50 | }
51 |
--------------------------------------------------------------------------------
/OpenSCAD/Chassis.scad:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright Stefan Frech, 10.12.2021 - 28.09.2024
3 | Projekt Split-Flap Display Module
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 |
18 | include<3D_library.scad>;
19 |
20 | module chassis(){
21 | // Gehäuse Seiten:
22 | union()
23 | {
24 | color("grey")
25 | {
26 | // Rechts mit grossem Ausschnitt
27 | chassis_right();
28 |
29 | // Links mit Löcher für Motor
30 | chassis_left();
31 |
32 | // Front
33 | chassis_front();
34 | }
35 | }
36 | }
37 |
38 | rotate([-90,0,0]) chassis();
39 |
--------------------------------------------------------------------------------
/Raspberry_Pi/i2c_transmit.php:
--------------------------------------------------------------------------------
1 | #!/usr/bin/php
2 | ;
19 |
20 | cols = 10;
21 | rows = 5;
22 |
23 | for(row=[0:1:rows-1])
24 | {
25 | for(col=[0:1:cols-1])
26 | {
27 | // this translate shifts the objects in rows and cols
28 | translate([((flap_width + (2 * flap_pin) + h_space_between_flaps) * col), -((flap_height + v_space_between_flaps) * (row * 2))])
29 | {
30 | // XXX das hier ist falsch beim letzten Durchgang.
31 | rotate([0, 0, 90]) flap_with_char(((cols * row) + col) + 1);
32 | }
33 | translate([((flap_width + (2 * flap_pin) + h_space_between_flaps) * col), -((flap_height + v_space_between_flaps) * (row * 2) + (flap_height + 1))])
34 | {
35 | rotate([0, 180, 90]) flap_with_char(((cols * row) + col));
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/OpenSCAD/PVC_Plate.scad:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright Stefan Frech, 10.12.2021 - 28.09.2024
3 | Projekt Split-Flap Display Module
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 |
18 | include<3D_library.scad>;
19 |
20 |
21 | cols = 6;
22 | rows = 6;
23 | space = 1;
24 |
25 | sheet_width = 500;
26 | sheet_height = 500;
27 |
28 | difference()
29 | {
30 | square(size = [sheet_width, sheet_height], center = false);
31 | for(col=[0:1:cols-1])
32 | {
33 | for(row=[0:1:rows-1])
34 | {
35 | // verschieben auf dem Quadrat
36 | // v v
37 | translate([(carousel_diameter / 2) + ((carousel_diameter + space) * row) + 1.5, (carousel_diameter / 2) + ((carousel_diameter + space) * col) + 1.5, 0])
38 | if((col + row) % 2 == 0)
39 | {
40 | // render() makes the preview faster
41 | render() karussell_scheibe_rechts();
42 | }
43 | else
44 | {
45 | render() karussell_scheibe_links();
46 | }
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/OpenSCAD/Printview.scad:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright Stefan Frech, 10.12.2021 - 28.09.2024
3 | Projekt Split-Flap Display Module
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 |
18 | include<2D_library.scad>;
19 |
20 | // es fehlen noch die indicators
21 |
22 | // 1 - 5 or 6 - 10
23 | start_row = 1;
24 | end_row = 10;
25 |
26 | // front or back
27 | side = "front";
28 | // zoom for better resolution in the output picture
29 | zoom = 10;
30 |
31 | // Das ist die totale Breite sämtlicher Flaps inkl. Nasen & Abstände
32 | total_width_flaps = ((flap_total_width) * cols) + (h_space_between_flaps * (cols - 1));
33 | // Das ist die totale Höhe sämtlicher Flaps inkl. Abstände
34 | total_height_flaps = (flap_height * (end_row - (start_row + 1))) + (v_space_between_flaps * ((end_row - (start_row + 1)) - 1));
35 |
36 | // dieses render() hilft gegen die Fehlermeldung
37 | // Normalized tree is growing past 200000 elements. Aborting normalization
38 | render()
39 | {
40 | scale([zoom, zoom])
41 | {
42 | difference()
43 | {
44 | foil();
45 |
46 | // two translates, for better understanding:
47 | // 1) move by half flap in width and height, due to center = true
48 | // 2) move to center of foil
49 | translate([(flap_width / 2) + flap_pin, -(flap_height/2)])
50 | {
51 | translate([-total_width_flaps/2, total_height_flaps/2])
52 | {
53 | cols_and_rows();
54 | }
55 | }
56 |
57 | indicators();
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/Arduino/inputs_v2.ino:
--------------------------------------------------------------------------------
1 | // https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
2 | // Col Dez
3 |
4 | /*
5 | "0", "A", "B", "C", "D",
6 | "1", "E", "F", "G", "H",
7 | "2", "I", "J", "K", "L",
8 | "3", "M", "N", "O", "P",
9 | "4", "Q", "R", "S", "T",
10 | "5", "U", "V", "W", "X",
11 | "6", "Y", "Z", "+", "-",
12 | "7", "?", "!", ".", ",",
13 | "8", "@", ":", ";", "#",
14 | "9", "*", "$", "/", " ",
15 | */
16 |
17 | int get_position(int input){
18 | // convert lowercase to uppercase letters.
19 | if ((input >= 'a' && input <= 'z') || (input >= 'A' && input <= 'Z')) {
20 | input = input & ~32;
21 | }
22 |
23 | switch (input) {
24 | case 48: return 1; // 0
25 | case 65: return 2; // A
26 | case 66: return 3; // B
27 | case 67: return 4; // C
28 | case 68: return 5; // D
29 | case 49: return 6; // 1
30 | case 69: return 7; // E
31 | case 70: return 8; // F
32 | case 71: return 9; // G
33 | case 72: return 10; // H
34 | case 50: return 11; // 2
35 | case 73: return 12; // I
36 | case 74: return 13; // J
37 | case 75: return 14; // K
38 | case 76: return 15; // L
39 | case 51: return 16; // 3
40 | case 77: return 17; // M
41 | case 78: return 18; // N
42 | case 79: return 19; // O
43 | case 80: return 20; // P
44 | case 52: return 21; // 4
45 | case 81: return 22; // Q
46 | case 82: return 23; // R
47 | case 83: return 24; // S
48 | case 84: return 25; // T
49 | case 53: return 26; // 5
50 | case 85: return 27; // U
51 | case 86: return 28; // V
52 | case 87: return 29; // W
53 | case 88: return 30; // X
54 | case 54: return 31; // 6
55 | case 89: return 32; // Y
56 | case 90: return 33; // Z
57 | case 43: return 34; // +
58 | case 45: return 35; // -
59 | case 55: return 36; // 7
60 | case 63: return 37; // ?
61 | case 33: return 38; // !
62 | case 46: return 39; // .
63 | case 44: return 40; // ,
64 | case 56: return 41; // 8
65 | case 64: return 42; // @
66 | case 58: return 43; // :
67 | case 59: return 44; // ;
68 | case 35: return 45; // #
69 | case 57: return 46; // 9
70 | case 42: return 47; // *
71 | case 36: return 48; // $
72 | case 47: return 49; // /
73 | case 32: return 50; // " " (space)
74 | default: return 0; // Default
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/Raspberry_Pi/html/assets/js/color-modes.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)
3 | * Copyright 2011-2024 The Bootstrap Authors
4 | * Licensed under the Creative Commons Attribution 3.0 Unported License.
5 | */
6 |
7 | (() => {
8 | 'use strict'
9 |
10 | const getStoredTheme = () => localStorage.getItem('theme')
11 | const setStoredTheme = theme => localStorage.setItem('theme', theme)
12 |
13 | const getPreferredTheme = () => {
14 | const storedTheme = getStoredTheme()
15 | if (storedTheme) {
16 | return storedTheme
17 | }
18 |
19 | return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
20 | }
21 |
22 | const setTheme = theme => {
23 | if (theme === 'auto') {
24 | document.documentElement.setAttribute('data-bs-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'))
25 | } else {
26 | document.documentElement.setAttribute('data-bs-theme', theme)
27 | }
28 | }
29 |
30 | setTheme(getPreferredTheme())
31 |
32 | const showActiveTheme = (theme, focus = false) => {
33 | const themeSwitcher = document.querySelector('#bd-theme')
34 |
35 | if (!themeSwitcher) {
36 | return
37 | }
38 |
39 | const themeSwitcherText = document.querySelector('#bd-theme-text')
40 | const activeThemeIcon = document.querySelector('.theme-icon-active use')
41 | const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`)
42 | const svgOfActiveBtn = btnToActive.querySelector('svg use').getAttribute('href')
43 |
44 | document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
45 | element.classList.remove('active')
46 | element.setAttribute('aria-pressed', 'false')
47 | })
48 |
49 | btnToActive.classList.add('active')
50 | btnToActive.setAttribute('aria-pressed', 'true')
51 | activeThemeIcon.setAttribute('href', svgOfActiveBtn)
52 | const themeSwitcherLabel = `${themeSwitcherText.textContent} (${btnToActive.dataset.bsThemeValue})`
53 | themeSwitcher.setAttribute('aria-label', themeSwitcherLabel)
54 |
55 | if (focus) {
56 | themeSwitcher.focus()
57 | }
58 | }
59 |
60 | window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
61 | const storedTheme = getStoredTheme()
62 | if (storedTheme !== 'light' && storedTheme !== 'dark') {
63 | setTheme(getPreferredTheme())
64 | }
65 | })
66 |
67 | window.addEventListener('DOMContentLoaded', () => {
68 | showActiveTheme(getPreferredTheme())
69 |
70 | document.querySelectorAll('[data-bs-theme-value]')
71 | .forEach(toggle => {
72 | toggle.addEventListener('click', () => {
73 | const theme = toggle.getAttribute('data-bs-theme-value')
74 | setStoredTheme(theme)
75 | setTheme(theme)
76 | showActiveTheme(theme, true)
77 | })
78 | })
79 | })
80 | })()
81 |
--------------------------------------------------------------------------------
/PCB/Module/Module.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 0,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_netclasses": [],
7 | "hidden_nets": [],
8 | "high_contrast_mode": 1,
9 | "net_color_mode": 1,
10 | "opacity": {
11 | "images": 0.6,
12 | "pads": 1.0,
13 | "shapes": 1.0,
14 | "tracks": 1.0,
15 | "vias": 1.0,
16 | "zones": 0.6
17 | },
18 | "selection_filter": {
19 | "dimensions": true,
20 | "footprints": true,
21 | "graphics": true,
22 | "keepouts": true,
23 | "lockedItems": false,
24 | "otherItems": true,
25 | "pads": true,
26 | "text": true,
27 | "tracks": true,
28 | "vias": true,
29 | "zones": true
30 | },
31 | "visible_items": [
32 | "vias",
33 | "footprint_text",
34 | "footprint_anchors",
35 | "ratsnest",
36 | "grid",
37 | "footprints_front",
38 | "footprints_back",
39 | "footprint_values",
40 | "footprint_references",
41 | "tracks",
42 | "drc_errors",
43 | "drawing_sheet",
44 | "bitmaps",
45 | "pads",
46 | "zones",
47 | "drc_warnings",
48 | "locked_item_shadows",
49 | "conflict_shadows",
50 | "shapes"
51 | ],
52 | "visible_layers": "00000000_00000000_0ffc3320_d77fff75",
53 | "zone_display_mode": 0
54 | },
55 | "git": {
56 | "repo_password": "",
57 | "repo_type": "",
58 | "repo_username": "",
59 | "ssh_key": ""
60 | },
61 | "meta": {
62 | "filename": "SplitFlap.kicad_prl",
63 | "version": 5
64 | },
65 | "net_inspector_panel": {
66 | "col_hidden": [
67 | false,
68 | false,
69 | false,
70 | false,
71 | false,
72 | false,
73 | false,
74 | false,
75 | false,
76 | false
77 | ],
78 | "col_order": [
79 | 0,
80 | 1,
81 | 2,
82 | 3,
83 | 4,
84 | 5,
85 | 6,
86 | 7,
87 | 8,
88 | 9
89 | ],
90 | "col_widths": [
91 | 156,
92 | 141,
93 | 103,
94 | 77,
95 | 103,
96 | 106,
97 | 103,
98 | 81,
99 | 103,
100 | 103
101 | ],
102 | "custom_group_rules": [],
103 | "expanded_rows": [],
104 | "filter_by_net_name": true,
105 | "filter_by_netclass": true,
106 | "filter_text": "",
107 | "group_by_constraint": false,
108 | "group_by_netclass": false,
109 | "show_unconnected_nets": false,
110 | "show_zero_pad_nets": false,
111 | "sort_ascending": true,
112 | "sorting_column": 0
113 | },
114 | "open_jobsets": [],
115 | "project": {
116 | "files": []
117 | },
118 | "schematic": {
119 | "selection_filter": {
120 | "graphics": true,
121 | "images": true,
122 | "labels": true,
123 | "lockedItems": false,
124 | "otherItems": true,
125 | "pins": true,
126 | "symbols": true,
127 | "text": true,
128 | "wires": true
129 | }
130 | }
131 | }
132 |
--------------------------------------------------------------------------------
/PCB/Module/SplitFlap.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 0,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_netclasses": [],
7 | "hidden_nets": [],
8 | "high_contrast_mode": 1,
9 | "net_color_mode": 1,
10 | "opacity": {
11 | "images": 0.6,
12 | "pads": 1.0,
13 | "shapes": 1.0,
14 | "tracks": 1.0,
15 | "vias": 1.0,
16 | "zones": 0.6
17 | },
18 | "selection_filter": {
19 | "dimensions": true,
20 | "footprints": true,
21 | "graphics": true,
22 | "keepouts": true,
23 | "lockedItems": false,
24 | "otherItems": true,
25 | "pads": true,
26 | "text": true,
27 | "tracks": true,
28 | "vias": true,
29 | "zones": true
30 | },
31 | "visible_items": [
32 | "vias",
33 | "footprint_text",
34 | "footprint_anchors",
35 | "ratsnest",
36 | "grid",
37 | "footprints_front",
38 | "footprints_back",
39 | "footprint_values",
40 | "footprint_references",
41 | "tracks",
42 | "drc_errors",
43 | "drawing_sheet",
44 | "bitmaps",
45 | "pads",
46 | "zones",
47 | "drc_warnings",
48 | "locked_item_shadows",
49 | "conflict_shadows",
50 | "shapes"
51 | ],
52 | "visible_layers": "00000000_00000000_0ffc3320_d77fff75",
53 | "zone_display_mode": 0
54 | },
55 | "git": {
56 | "repo_password": "",
57 | "repo_type": "",
58 | "repo_username": "",
59 | "ssh_key": ""
60 | },
61 | "meta": {
62 | "filename": "SplitFlap.kicad_prl",
63 | "version": 5
64 | },
65 | "net_inspector_panel": {
66 | "col_hidden": [
67 | false,
68 | false,
69 | false,
70 | false,
71 | false,
72 | false,
73 | false,
74 | false,
75 | false,
76 | false
77 | ],
78 | "col_order": [
79 | 0,
80 | 1,
81 | 2,
82 | 3,
83 | 4,
84 | 5,
85 | 6,
86 | 7,
87 | 8,
88 | 9
89 | ],
90 | "col_widths": [
91 | 156,
92 | 141,
93 | 103,
94 | 77,
95 | 103,
96 | 106,
97 | 103,
98 | 81,
99 | 103,
100 | 10
101 | ],
102 | "custom_group_rules": [],
103 | "expanded_rows": [],
104 | "filter_by_net_name": true,
105 | "filter_by_netclass": true,
106 | "filter_text": "",
107 | "group_by_constraint": false,
108 | "group_by_netclass": false,
109 | "show_unconnected_nets": false,
110 | "show_zero_pad_nets": false,
111 | "sort_ascending": true,
112 | "sorting_column": 0
113 | },
114 | "open_jobsets": [],
115 | "project": {
116 | "files": []
117 | },
118 | "schematic": {
119 | "selection_filter": {
120 | "graphics": true,
121 | "images": true,
122 | "labels": true,
123 | "lockedItems": false,
124 | "otherItems": true,
125 | "pins": true,
126 | "symbols": true,
127 | "text": true,
128 | "wires": true
129 | }
130 | }
131 | }
132 |
--------------------------------------------------------------------------------
/PCB/Backplane/Backplane.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 0,
4 | "active_layer_preset": "",
5 | "auto_track_width": false,
6 | "hidden_netclasses": [],
7 | "hidden_nets": [],
8 | "high_contrast_mode": 1,
9 | "net_color_mode": 1,
10 | "opacity": {
11 | "images": 0.6,
12 | "pads": 1.0,
13 | "shapes": 1.0,
14 | "tracks": 1.0,
15 | "vias": 1.0,
16 | "zones": 0.5899999737739563
17 | },
18 | "ratsnest_display_mode": 0,
19 | "selection_filter": {
20 | "dimensions": true,
21 | "footprints": true,
22 | "graphics": true,
23 | "keepouts": true,
24 | "lockedItems": true,
25 | "otherItems": true,
26 | "pads": true,
27 | "text": true,
28 | "tracks": true,
29 | "vias": true,
30 | "zones": true
31 | },
32 | "visible_items": [
33 | "vias",
34 | "footprint_text",
35 | "footprint_anchors",
36 | "ratsnest",
37 | "grid",
38 | "footprints_front",
39 | "footprints_back",
40 | "footprint_values",
41 | "footprint_references",
42 | "tracks",
43 | "drc_errors",
44 | "drawing_sheet",
45 | "bitmaps",
46 | "pads",
47 | "zones",
48 | "drc_warnings",
49 | "drc_exclusions",
50 | "locked_item_shadows",
51 | "conflict_shadows",
52 | "shapes"
53 | ],
54 | "visible_layers": "00000000_00000000_0000b030_fffffdff",
55 | "zone_display_mode": 0
56 | },
57 | "git": {
58 | "repo_password": "",
59 | "repo_type": "",
60 | "repo_username": "",
61 | "ssh_key": ""
62 | },
63 | "meta": {
64 | "filename": "Backplane.kicad_prl",
65 | "version": 5
66 | },
67 | "net_inspector_panel": {
68 | "col_hidden": [
69 | false,
70 | false,
71 | false,
72 | false,
73 | false,
74 | false,
75 | false,
76 | false,
77 | false,
78 | false
79 | ],
80 | "col_order": [
81 | 0,
82 | 1,
83 | 2,
84 | 3,
85 | 4,
86 | 5,
87 | 6,
88 | 7,
89 | 8,
90 | 9
91 | ],
92 | "col_widths": [
93 | 156,
94 | 141,
95 | 103,
96 | 77,
97 | 103,
98 | 106,
99 | 103,
100 | 81,
101 | 103,
102 | 10
103 | ],
104 | "custom_group_rules": [],
105 | "expanded_rows": [],
106 | "filter_by_net_name": true,
107 | "filter_by_netclass": true,
108 | "filter_text": "",
109 | "group_by_constraint": false,
110 | "group_by_netclass": false,
111 | "show_unconnected_nets": false,
112 | "show_zero_pad_nets": false,
113 | "sort_ascending": true,
114 | "sorting_column": 0
115 | },
116 | "open_jobsets": [],
117 | "project": {
118 | "files": []
119 | },
120 | "schematic": {
121 | "selection_filter": {
122 | "graphics": true,
123 | "images": true,
124 | "labels": true,
125 | "lockedItems": false,
126 | "otherItems": true,
127 | "pins": true,
128 | "symbols": true,
129 | "text": true,
130 | "wires": true
131 | }
132 | }
133 | }
134 |
--------------------------------------------------------------------------------
/OpenSCAD/Split_Flap_Module.scad:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright Stefan Frech, 10.12.2021 - 28.09.2024
3 | Projekt Split-Flap Display Module
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 |
18 | include<3D_library.scad>;
19 |
20 | // explode 12 to show exploded view and spin the view
21 | //explode = 12;
22 | // explode 0 to show compact view and spin the carousel
23 | explode = 0;
24 | module split_flap()
25 | {
26 | translate(carousel_pos)
27 | {
28 | //rotate([90, 0, 0]) translate(housing_virt_bolt_pos) rotate([90, 0, 0]) circle();
29 |
30 | rotate([270, 0, 270])
31 | {
32 | rotate([0, explode == 0 ? -360 * $t : 0, 0])
33 | {
34 | translate([0, -(explode * 10), 0]) color("#333") karussell_spacer();
35 | translate([0, -(explode * 2), 0]) color("#888") karussell_schrauben();
36 | translate([0, -(explode * 13.5), 0]) color("#888") karussell_muttern();
37 | translate([0, -(explode * 8), 0]) color("#555") karussell_scheibe_position("rechts");
38 | translate([0, -(explode * 12.5), 0]) color("#555") karussell_scheibe_position("links");
39 |
40 | // use this trick to speed up things: export rendered carousel wheels to .stl and import it here again.
41 | rotate([90, 90, 0]) translate([0, 0, ((carousel_inner_distance/2) + (carousel_thickness/2) + (explode * 12.5))]) color("#555") import("Carousel_left.stl");
42 | rotate([90, 90, 0]) translate([0, 0, -((carousel_inner_distance/2) + (carousel_thickness/2) - (explode * 9))]) color("#555") import("Carousel_right.stl");
43 |
44 | // The Pouley
45 | translate([0, -(explode * 11.5), 0]) color("grey") stepper_pouley();
46 | translate([0, -(explode * 14), 0]) color("#888") pouley_schrauben();
47 |
48 | // The flaps
49 | if (explode == 0)
50 | translate([0, -(explode * 10), 0]) rotating_carousel();
51 |
52 | }
53 | }
54 |
55 | if (explode > 0)
56 | translate([0, 0, (explode * 10)]) example_flap_bottom(28);
57 |
58 | // Stepper Motor, Schrittmotor
59 | translate([0, 0, (explode * 10)]) color("silver") stepper_motor();
60 | translate([0, 0, -(explode * 3)]) color("#888") motor_schrauben();
61 |
62 | // Spacer für Motor
63 | translate([0, 0, (explode * 8)]) color("#333") stepper_spacer();
64 |
65 | // PCB
66 | // OpenSCAD generated PCB
67 | translate([0, 0, (explode * 1)]) pcb();
68 | translate([0, 0, -(explode * 1.2)]) color("#888") pcb_schrauben();
69 | translate([0, 0, (explode * 2)]) color("#888") pcb_muttern();
70 | translate([0, 0, (explode * 0.5)]) color("#333") pcb_spacer();
71 |
72 | }
73 |
74 | // Gehäuse Seiten:
75 | color([0.85, 0.85, 0.85, 0.6])
76 | {
77 | // Rechts mit grossem Ausschnitt
78 | %chassis_right();
79 |
80 | // Links mit Löcher für Motor
81 | %chassis_left();
82 |
83 | // Front
84 | %chassis_front();
85 | }
86 |
87 | // Bolt für die Flaps
88 | translate([0, 0, -(explode * 3)]) color("#888") chassis_bolt_screw();
89 | translate([0, 0, (explode * 2)]) color("#888") chassis_bolt_nut();
90 | }
91 |
92 | rotate([270, 0, explode > 0 ? -360 * $t : 0]) split_flap();
93 |
94 |
--------------------------------------------------------------------------------
/OpenSCAD/2D_library.scad:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright Stefan Frech, 10.12.2021 - 28.09.2024
3 | Projekt Split-Flap Display Module
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | http://www.apache.org/licenses/LICENSE-2.0
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 | */
17 |
18 | include<_settings.scad>;
19 |
20 |
21 | module base_flap(overlap = 0)
22 | {
23 | square([flap_width, flap_height + overlap], center = true);
24 | }
25 |
26 | module flap()
27 | {
28 | base_flap();
29 | pins();
30 | }
31 |
32 | module flap_outline()
33 | {
34 | difference()
35 | {
36 | offset(delta = +outline_weight) flap();
37 | flap();
38 | }
39 | }
40 |
41 | module pins()
42 | {
43 | translate([ ((flap_width/2) + (flap_pin/2)), -((flap_height/2) - (flap_pin/2))])
44 | {
45 | square([flap_pin,flap_pin], center = true);
46 | }
47 | translate([-((flap_width/2) + (flap_pin/2)), -((flap_height/2) - (flap_pin/2))])
48 | {
49 | square([flap_pin,flap_pin], center = true);
50 | }
51 | }
52 |
53 | module pins_outline()
54 | {
55 | difference()
56 | {
57 | offset(delta = +outline_weight) pins();
58 | pins();
59 | // lets make the inner line disapear with an additional square
60 | translate([0, -((flap_height/2) - (flap_pin/2))]) square([flap_width, flap_pin + (outline_weight * 2)], center = true);
61 | }
62 | }
63 |
64 | module foil()
65 | {
66 | square([foil_width, foil_height], center = true);
67 | }
68 |
69 | module indicator_cross()
70 | {
71 | square([width_marker, length_marker], center = true);
72 | square([length_marker, width_marker], center = true);
73 | }
74 |
75 | module indicators(){
76 | // Indicators for CAD initialisation
77 | h_pos = (foil_width / 2) - indicator_position;
78 | v_pos = (foil_height / 2) - indicator_position;
79 |
80 | translate([ h_pos, v_pos, 0]) indicator_cross();
81 | translate([-h_pos, v_pos, 0]) indicator_cross();
82 | translate([-h_pos, -v_pos, 0]) indicator_cross();
83 | translate([ h_pos, -v_pos, 0]) indicator_cross();
84 | }
85 |
86 | module half_letter(col, row)
87 | {
88 | difference()
89 | {
90 | intersection()
91 | {
92 | // this does the overlap of the letter
93 | //flap();
94 | base_flap(overlap);
95 |
96 | // mind front and back as well as last character
97 | if(side == "front")
98 | {
99 | rotate([0, 0]) translate([0, -(flap_height / 2)])
100 | draw_letter(characters[(cols * row) + col]);
101 | }
102 | else
103 | {
104 | character = (cols * row) - col + cols == len(characters) ? 0 : (cols * row) - col + cols ;
105 | rotate([180, 180]) translate([0, (flap_height / 2)])
106 | draw_letter(characters[character]);
107 | }
108 | }
109 | // Das ist der Balken, der unten alles Überstehende abschneidet
110 | if(side != "front") translate([0, (flap_height/2) - (cut_off_blind/2)]) square([flap_width, cut_off_blind], center = true);
111 | }
112 | }
113 |
114 | module cols_and_rows()
115 | {
116 | for(col=[0:1:cols-1])
117 | {
118 | for(row=[start_row-1:1:end_row-1])
119 | {
120 | // this translate shifts the objects in rows and cols
121 | translate([(flap_total_width + h_space_between_flaps) * col, -(flap_height + v_space_between_flaps) * (row - start_row)])
122 | {
123 | half_letter(col, row);
124 | flap_outline();
125 | }
126 | }
127 | }
128 | }
--------------------------------------------------------------------------------
/Raspberry_Pi/html/index.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Split Flap Display
9 |
10 |
11 |
12 |
13 |
21 |
22 |
41 |
42 |
43 |
44 |
59 |
60 |
61 |
62 |
Feed Your Text
63 |
64 |
103 |
104 |
105 |
106 |
107 |
111 |
112 |
113 |
114 |
140 |
141 |
142 |
143 |
--------------------------------------------------------------------------------
/OpenSCAD/_settings.scad:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Copyright Stefan Frech, 10.12.2021 - 28.09.2024
4 | Projekt Split-Flap Display Module
5 |
6 | Licensed under the Apache License, Version 2.0 (the "License");
7 | you may not use this file except in compliance with the License.
8 | You may obtain a copy of the License at
9 |
10 | http://www.apache.org/licenses/LICENSE-2.0
11 |
12 | Unless required by applicable law or agreed to in writing, software
13 | distributed under the License is distributed on an "AS IS" BASIS,
14 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | See the License for the specific language governing permissions and
16 | limitations under the License.
17 | */
18 |
19 | $fn=100;
20 |
21 | nr_of_flaps = 50;
22 |
23 | // Flaps
24 | flap_width = 50;
25 | flap_height = 40;
26 | flap_thickness = 0.76;
27 | flap_pin = 3;
28 | flap_total_width = flap_width + (2 * flap_pin);
29 |
30 | // Karussell
31 | carousel_diameter = 82;
32 | carousel_thickness = 3;
33 | carousel_inner_distance = 51;
34 | carousel_flap_holes_diameter = 3.4;
35 | carousel_flap_path_radius = 40 - (carousel_flap_holes_diameter/2);
36 | carousel_axis_diameter = 5;
37 | carousel_inner_circle = 24;
38 | carousel_spokes_width = 10;
39 | carousel_pos_x = 20.8; // um 0.5mm nach vorne korrigiert am 08.08.2025, damit die Flaps etwas besser klemmen.
40 | // um 0.2mm nach hinten korrigiert am 31.08.2025, weil das Gehäuse nun 1.0 und nicht mehr 0.8mm ist.
41 | carousel_pos_y = -13.5;
42 | carousel_pos = [carousel_pos_x,carousel_pos_y,0];
43 |
44 | // Die Löcher werden etwas länger, damit die Darstellung von OpenSCAD stimmt
45 | carousel_thickness_holes = carousel_thickness + 0.01;
46 |
47 | // Ausschnitt
48 | carousel_diameter_cutout = 59;
49 |
50 | // Poulley
51 | pulley_nr_of_holes = 4;
52 | pulley_holes_diameter = 3;
53 | pulley_holes_path_radius = 6.35;
54 | pulley_diameter = 19;
55 | pulley_thickness = 5;
56 | pulley_axis_diameter = carousel_axis_diameter;
57 |
58 | // Spacers Karussell
59 | carousel_spacer_outer_diameter = 6;
60 | carousel_spacer_inner_diameter = 3.2;
61 | carousel_spacer_length = carousel_inner_distance;
62 | carousel_spacer_nr = 4;
63 | carousel_spacer_holes_diameter = 3.2;
64 | carousel_spacer_path_radius = 33;
65 |
66 | // Magnet
67 | magnet_hole_diameter = 1.9;
68 | magnet_hole_path_radius = carousel_spacer_path_radius;
69 |
70 | // Die Schrauben durch die Karussell Spacer
71 | carousel_spacer_screw_length = 60;
72 | carousel_spacer_screw_diameter = 3;
73 |
74 | // Stepper Motor
75 | motor_width = 42;
76 | motor_height = 42;
77 | motor_depth = 34;
78 | motor_corners = 5.5;
79 | motor_axis_diameter = carousel_axis_diameter;
80 | motor_axis_shift = -5;
81 | motor_axis_length = 64;
82 | motor_attachment_depth = 2;
83 | motor_attachment_diameter = 22;
84 | motor_winding_distance = 31;
85 | // Spacer für Motor
86 | motor_spacer_outer_diameter = 6;
87 | motor_spacer_inner_diameter = 3.2;
88 | motor_spacer_length = 20;
89 | // Schrauben für die Befestigung des Motors
90 | motor_screw_diameter = 3;
91 | motor_screw_length = 25;
92 |
93 | // Gehäuse
94 | housing_width = 120;
95 | housing_height = 150;
96 | housing_outer_distance = 70;
97 | //housing_thickness = 0.8;
98 | housing_thickness = 1;
99 | housing_inner_distance = housing_outer_distance - (2 * housing_thickness);
100 |
101 | housing_cutout_height = 104;
102 | housing_cutout_width = 53;
103 | housing_cutout_small_height = 35;
104 | housing_cutout_small_width = 3;
105 | housing_cutout_position_y = 3;
106 |
107 | // Das Loch für den Bolzen
108 | housing_bolt_v = 26;
109 | housing_bolt_h = 16;
110 | housing_virt_bolt_pos = [37, 0, -71];
111 |
112 |
113 | // PCB
114 | pcb_width = 42.67;
115 | pcb_length = 72;
116 | pcb_edge_width = 17.2;
117 | pcb_edge_length = 7.4;
118 | pcb_thickness = 1.6;
119 | pcb_copper_width = 1.7;
120 |
121 | pcb_hole_diameter = 3.2;
122 | // Die Position der Löcher im Gehäuse für das PCB sind jeweils
123 | // gemessen an den hinteren Löchern für den Motor.
124 | // also: pcb_hole_top_from_left = 52 bedeutet, dass das obere Loch
125 | // für das PCB 52mm vom hinteren Loch des Motors weg ist.
126 | pcb_hole_top_from_left_housing = 52;
127 | pcb_hole_bottom_from_left_housing = 27;
128 |
129 | // Die Position der Löcher im PCB sind jeweils gemessen
130 | // am linken Rand des PCB.
131 | // pcb_hole_top_from_left_housing - pcb_hole_top_from_left_pcb = (motor_spacer_outer_diameter/2) + 0.5
132 | // 52 - 48.5 = (6/2) + 0.5
133 | pcb_hole_top_from_left_pcb = 48.5;
134 | pcb_hole_bottom_from_left_pcb = 23.5;
135 |
136 | // Hall Sensor
137 | pcb_hall_top_from_left = 12.25;
138 | pcb_hall_top_from_top = 10.85;
139 | pcb_hall_width = 2.6;
140 | pcb_hall_length = 3.1;
141 | pcb_hall_height = 0.7;
142 |
143 | // Das PCB soll mit Spacern etwas vom Gehäuse abstehen.
144 | pcb_spacer_length = 2;
145 | pcb_spacer_outer_diameter = 6;
146 | pcb_spacer_inner_diameter = 3.2;
147 |
148 | // always adjust overrides in _font_setup.scad accordingly
149 |
150 |
151 | characters = [
152 | "0", "A", "B", "C", "D",
153 | "1", "E", "F", "G", "H",
154 | "2", "I", "J", "K", "L",
155 | "3", "M", "N", "O", "P",
156 | "4", "Q", "R", "S", "T",
157 | "5", "U", "V", "W", "X",
158 | "6", "Y", "Z", "+", "-",
159 | "7", "?", "!", ".", ",",
160 | "8", "@", ":", ";", "#",
161 | "9", "*", "$", "/", " ",
162 | ];
163 |
164 | /*
165 | characters = [
166 | "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
167 | "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
168 | "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",
169 | "U", "V", "W", "X", "Y", "Z", "!", "%", "&", "*",
170 | "+", "-", ".", "/", ":", "?", "$", "@", "#", " ",
171 | ];
172 | */
173 |
174 |
175 | /*
176 | Settings for the flaps sheet
177 | These settings below take place at
178 | the following files:
179 | - Overallview.scad
180 | - Printview.scad
181 | - _font_setup.scad
182 | - 2D_library.scad
183 | */
184 |
185 | include<_font_setup.scad>;
186 |
187 | font_preset = "msgothicsfd";
188 |
189 | letter_facet_number = 50;
190 |
191 | // how many columns and rows to display
192 | cols = 5;
193 | //rows = 10;
194 | rows = ceil(len(characters) / cols);
195 |
196 | // horizontal space between flaps
197 | h_space_between_flaps = 8;
198 | // vertical space between flaps
199 | v_space_between_flaps = 8;
200 |
201 | outline_weight = 0.1;
202 |
203 | // overlap letter for cutting tolerance
204 | overlap = 4;
205 |
206 | // Der Balken, der alles Überstehende abschneidet
207 | cut_off_blind = 4.5;
208 |
209 | // the size of the foil
210 | foil_width = 360;
211 | foil_height = 510;
212 |
213 | // font size of description text
214 | font_size_desc = 3;
215 |
216 | // marker sizes
217 | length_marker = 8;
218 | width_marker = 0.2;
219 |
220 | indicator_position = 14;
221 |
222 |
223 |
--------------------------------------------------------------------------------
/Arduino/Split_Flap.ino:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | // motor and flap settings
4 | const byte microsteps = 16; // Microsteps for the driver
5 | const byte motorsteps = 200; // Stepper motor takes 200 positions per revolution
6 | const byte flaps = 50; // number of flaps on carrousel
7 | const int ms_per_revolution = motorsteps * microsteps; // microsteps performed by carousel revolution
8 | const int ms_per_flap = ms_per_revolution / flaps; // microsteps performed by flap position
9 |
10 | /*
11 | Speed: The greater the number the slower it turns.
12 | 28800 / microsteps is approximately 6 seconds per revolution.
13 |
14 | grundsätzlich ist jede Geschwindigkeit möglich, solange
15 | sie sich durch 32 (Anz. max. Microsteps) teilen lässt.
16 | sneak: 128000
17 | slow: 38400
18 | normal: 28800
19 | fast: 19200
20 | stress: 9600
21 | */
22 | const unsigned long speed = 28800 / microsteps;
23 |
24 | // Number of modules
25 | const byte modules = 8;
26 |
27 | // Arduino pin settings
28 | // as of Backplane V3 PCB
29 | #include
30 | // input settings
31 | #include
32 |
33 | const byte hall_pin[modules] =
34 | {
35 | hall_pin_0,
36 | hall_pin_1,
37 | hall_pin_2,
38 | hall_pin_3,
39 | hall_pin_4,
40 | hall_pin_5,
41 | hall_pin_6,
42 | hall_pin_7,
43 | };
44 |
45 | const byte step_pin[modules] =
46 | {
47 | step_pin_0,
48 | step_pin_1,
49 | step_pin_2,
50 | step_pin_3,
51 | step_pin_4,
52 | step_pin_5,
53 | step_pin_6,
54 | step_pin_7,
55 | };
56 |
57 | // some other things
58 | unsigned long curr_time = 0;
59 | unsigned long prev_time = 0;
60 |
61 | int cur_ms_pos[modules] = {};
62 | int new_ms_pos[modules] = {};
63 | int ms_to_go[modules] = {};
64 | char new_char[modules] = {};
65 | bool set_ms_pos[modules] = {};
66 |
67 | // Feineinstellung
68 | const int UNSET = -1;
69 | int init_ms_pos[modules] = {UNSET, UNSET, UNSET, UNSET, UNSET, UNSET, UNSET, UNSET};
70 | //const int init_ms_pos[modules] = {20, 20, 20, 20, 20, 20, 20, 20};
71 |
72 | // read values out of EEPROM
73 | #include
74 | const int i2c_addr = EEPROM.read(0);
75 | const int default_init_ms_pos = EEPROM.read(1);
76 |
77 | void setup() {
78 | Serial.begin(9600);
79 |
80 | // Join I2C bus as slave with uniqe address
81 | Wire.begin(i2c_addr);
82 | // set I2C receive and request functions
83 | Wire.onReceive(receive_i2c_event);
84 | Wire.onRequest(request_i2c_event);
85 |
86 | // setup pins and variables
87 | for(byte module = 0; module < modules; module++){
88 | pinMode(step_pin[module], OUTPUT);
89 | pinMode(hall_pin[module], INPUT);
90 |
91 | // ascii 32 is space character
92 | new_char[module] = 32;
93 | cur_ms_pos[module] = 0;
94 | set_ms_pos[module] = false;
95 | set_ms_to_go(module);
96 |
97 | if (init_ms_pos[module] == UNSET) {
98 | init_ms_pos[module] = default_init_ms_pos;
99 | }
100 | }
101 | }
102 |
103 | // ToDo XXX
104 | #include