Merge pull request #17 from Block-Party-VR/develop

MIT Museum Release
This commit is contained in:
Quinn
2024-09-10 18:01:24 -04:00
committed by GitHub
111 changed files with 702006 additions and 777 deletions

11
.gitignore vendored
View File

@@ -1,2 +1,13 @@
.pio .pio
.vscode .vscode
*.lck
Schematics/Block-Party/Block-Party-Main-Board/production/
Schematics/Block-Party/Block-Party-Cube-Top-Board/production
Schematics/Block-Party/Block-Party-Cube-Bottom-Board/production
Schematics/Block-Party/Block-Party-Main-Board/Block-Party-Main-Board-backups/
Schematics/Block-Party/Block-Party-Cube-Bottom-Board/Block-Party-Bottom-Board-backups/
Schematics/Block-Party/Block-Party-Cube-Top-Board/Block-Party-Cube-Top-Board-backups/
platformio-local.ini

3
.gitmodules vendored Normal file
View File

@@ -0,0 +1,3 @@
[submodule "lib/SerialMessage"]
path = lib/SerialMessage
url = https://github.com/Cynopolis/SerialMessage.git

View File

@@ -15,6 +15,11 @@ When the physical user removes a block from the board, the corresponding digital
When the VR user hovers over or picks up a digital cube, the corresponding physical cube changes color to show the physical user what the VR user is doing. When the VR user hovers over or picks up a digital cube, the corresponding physical cube changes color to show the physical user what the VR user is doing.
## Setup ## Setup
### Repository Setup
When the repository is first cloned you will need to initialize all of its submodules.
In the terminal type: `git submodule update --init --recursive` which will initalize all of the submodules.
### Board Assemble ### Board Assemble
#### Parts List #### Parts List
- Foam core (scavenged) - Foam core (scavenged)
@@ -52,6 +57,9 @@ wiring diagram for the cube is in the `documentation` directory.
- Adafruits Neopixel library - Adafruits Neopixel library
- Arduino libraries - Arduino libraries
### Bluetooth Module
On v0.1 of the board, a seperate bluetooth module (HC-05) is being used for bluetooth. This module needs to be programmed when first plugged in. To program the module, disconnect it from power and hold the "EN" button on the module. (The button should be the only button on the HC-05 module). While still holding down the button, reconnect the module to the ESP32. Let go of the button and then press the ESP32's reset button. Wait 5 seconds while still holding down the "EN" button on the module, then release the button, power cycle the module, and you're done.
## Run ## Run
- Power up the board and pair it with the headset over bluetooth. - Power up the board and pair it with the headset over bluetooth.
- Build and load the Unity project to the headset. - Build and load the Unity project to the headset.
@@ -112,7 +120,7 @@ Description Set the colors for one of the stacks.
- Red1, Green1, Blue1 correspond with the color of the first cube in the stack and so on. These values can be between 0-255. - Red1, Green1, Blue1 correspond with the color of the first cube in the stack and so on. These values can be between 0-255.
You can add as many colors as you want, but they wont display if the corresponding cube doesn't physically exist. You can add as many colors as you want, but they wont display if the corresponding cube doesn't physically exist.
### COmmand Name: `GoToIdle` ### Command Name: `GoToIdle`
Command Number: `3` Command Number: `3`
Format Example `!3;` Format Example `!3;`

View File

@@ -0,0 +1,83 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "Block-Party-Bottom-Board.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View File

@@ -0,0 +1,716 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.09999999999999999,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.15,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 1.0,
"height": 9.5,
"width": 1.05
},
"silk_line_width": 0.15,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "ignore",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "warning",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.04,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.09999999999999999,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_resolved_spokes": 1,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.09999999999999999,
"min_via_diameter": 0.5,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.005,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Block-Party-Bottom-Board.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "../PCB Models/Block-Party-Bottom-PCB.step",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
},
{
"group_by": false,
"label": "#",
"name": "${ITEM_NUMBER}",
"show": false
},
{
"group_by": false,
"label": "Arrow Part Number",
"name": "Arrow Part Number",
"show": false
},
{
"group_by": false,
"label": "Arrow Price/Stock",
"name": "Arrow Price/Stock",
"show": false
},
{
"group_by": false,
"label": "Availability",
"name": "Availability",
"show": false
},
{
"group_by": false,
"label": "Check_prices",
"name": "Check_prices",
"show": false
},
{
"group_by": false,
"label": "Description_1",
"name": "Description_1",
"show": false
},
{
"group_by": false,
"label": "Height",
"name": "Height",
"show": false
},
{
"group_by": false,
"label": "MANUFACTURER",
"name": "MANUFACTURER",
"show": true
},
{
"group_by": false,
"label": "MAXIMUM_PACKAGE_HEIGHT",
"name": "MAXIMUM_PACKAGE_HEIGHT",
"show": false
},
{
"group_by": false,
"label": "MF",
"name": "MF",
"show": false
},
{
"group_by": false,
"label": "MP",
"name": "MP",
"show": false
},
{
"group_by": false,
"label": "Manufacturer_Name",
"name": "Manufacturer_Name",
"show": false
},
{
"group_by": false,
"label": "Manufacturer_Part_Number",
"name": "Manufacturer_Part_Number",
"show": true
},
{
"group_by": false,
"label": "Mouser Part Number",
"name": "Mouser Part Number",
"show": false
},
{
"group_by": false,
"label": "Mouser Price/Stock",
"name": "Mouser Price/Stock",
"show": false
},
{
"group_by": false,
"label": "PARTREV",
"name": "PARTREV",
"show": false
},
{
"group_by": false,
"label": "Package",
"name": "Package",
"show": false
},
{
"group_by": false,
"label": "Price",
"name": "Price",
"show": false
},
{
"group_by": false,
"label": "Purchase-URL",
"name": "Purchase-URL",
"show": false
},
{
"group_by": false,
"label": "STANDARD",
"name": "STANDARD",
"show": false
},
{
"group_by": false,
"label": "SnapEDA_Link",
"name": "SnapEDA_Link",
"show": false
},
{
"group_by": false,
"label": "Description",
"name": "Description",
"show": false
}
],
"filter_string": "",
"group_symbols": true,
"name": "",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"2141435d-34b8-43f3-bf65-e696e1b6d80b",
"Root"
]
],
"text_variables": {}
}

View File

@@ -0,0 +1 @@
{"AUTO TRANSLATE": true, "EXCLUDE DNP": false, "EXTRA_LAYERS": ""}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
(fp_lib_table
(version 7)
(lib (name "adafruit-jst-4328")(type "KiCad")(uri "C:/Users/Quinn/Documents/Projects/Block-Party-Firmware/Schematics/PCB Components/adafruit-jst-4328.pretty")(options "")(descr ""))
)

View File

@@ -0,0 +1,4 @@
(sym_lib_table
(version 7)
(lib (name "4328")(type "KiCad")(uri "C:/Users/Quinn/Documents/Projects/Block-Party-Firmware/Schematics/PCB Components/adafruit-jst-4328/4328.kicad_sym")(options "")(descr ""))
)

View File

@@ -0,0 +1,83 @@
{
"board": {
"active_layer": 31,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "Block-Party-Cube-Top-Board.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View File

@@ -0,0 +1,676 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.09999999999999999,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.15,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.15,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.09999999999999999,
"min_via_diameter": 0.5,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.005,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [
"Quinn_lib"
],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Block-Party-Cube-Top-Board.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "../../../../../../Downloads/Block-Party-Cube-Top-Board.step",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
},
{
"group_by": false,
"label": "#",
"name": "${ITEM_NUMBER}",
"show": false
},
{
"group_by": false,
"label": "Availability",
"name": "Availability",
"show": false
},
{
"group_by": false,
"label": "Check_prices",
"name": "Check_prices",
"show": false
},
{
"group_by": false,
"label": "Description_1",
"name": "Description_1",
"show": false
},
{
"group_by": false,
"label": "MANUFACTURER",
"name": "MANUFACTURER",
"show": true
},
{
"group_by": false,
"label": "MAXIMUM_PACKAGE_HEIGHT",
"name": "MAXIMUM_PACKAGE_HEIGHT",
"show": false
},
{
"group_by": false,
"label": "MF",
"name": "MF",
"show": false
},
{
"group_by": false,
"label": "MP",
"name": "MP",
"show": false
},
{
"group_by": false,
"label": "PARTREV",
"name": "PARTREV",
"show": false
},
{
"group_by": false,
"label": "Package",
"name": "Package",
"show": false
},
{
"group_by": false,
"label": "Price",
"name": "Price",
"show": false
},
{
"group_by": false,
"label": "Purchase-URL",
"name": "Purchase-URL",
"show": false
},
{
"group_by": false,
"label": "STANDARD",
"name": "STANDARD",
"show": false
},
{
"group_by": false,
"label": "SnapEDA_Link",
"name": "SnapEDA_Link",
"show": false
},
{
"group_by": false,
"label": "Description",
"name": "Description",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"1e9bcb59-abda-4050-8555-8eda44a8099c",
"Root"
]
],
"text_variables": {}
}

View File

@@ -0,0 +1 @@
{"AUTO TRANSLATE": true, "EXCLUDE DNP": false, "EXTRA_LAYERS": ""}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
(fp_lib_table
(version 7)
(lib (name "adafruit-jst-4328")(type "KiCad")(uri "C:/Users/Quinn/Documents/Projects/Block-Party-Firmware/Schematics/PCB Components/adafruit-jst-4328.pretty")(options "")(descr ""))
)

View File

@@ -0,0 +1,4 @@
(sym_lib_table
(version 7)
(lib (name "4328")(type "KiCad")(uri "C:/Users/Quinn/Documents/Projects/Block-Party-Firmware/Schematics/PCB Components/adafruit-jst-4328/4328.kicad_sym")(options "")(descr ""))
)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,83 @@
{
"board": {
"active_layer": 37,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "Block-Party-Main-Board.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View File

@@ -0,0 +1,746 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"board_outline_line_width": 0.09999999999999999,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.15,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.0,
"height": 0.8,
"width": 1.65
},
"silk_line_width": 0.15,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint": "error",
"footprint_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_resolved_spokes": 1,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.09999999999999999,
"min_via_diameter": 0.5,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.005,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Block-Party-Main-Board.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.12,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "Manufacturing Files/",
"pos_files": "Manufacturing Files/",
"specctra_dsn": "",
"step": "../PCB Models/Block-Party-Main-Board.step",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": false
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
},
{
"group_by": false,
"label": "#",
"name": "${ITEM_NUMBER}",
"show": false
},
{
"group_by": false,
"label": "Availability",
"name": "Availability",
"show": false
},
{
"group_by": false,
"label": "CUI_purchase_URL",
"name": "CUI_purchase_URL",
"show": false
},
{
"group_by": false,
"label": "Check_prices",
"name": "Check_prices",
"show": false
},
{
"group_by": false,
"label": "DATASHEET-URL",
"name": "DATASHEET-URL",
"show": false
},
{
"group_by": false,
"label": "Description_1",
"name": "Description_1",
"show": false
},
{
"group_by": false,
"label": "IR-UL",
"name": "IR-UL",
"show": false
},
{
"group_by": false,
"label": "IR-VDE",
"name": "IR-VDE",
"show": false
},
{
"group_by": false,
"label": "MANUFACTURER",
"name": "MANUFACTURER",
"show": true
},
{
"group_by": false,
"label": "MAXIMUM_PACKAGE_HEIGHT",
"name": "MAXIMUM_PACKAGE_HEIGHT",
"show": false
},
{
"group_by": false,
"label": "MF",
"name": "MF",
"show": false
},
{
"group_by": false,
"label": "MOUNT",
"name": "MOUNT",
"show": false
},
{
"group_by": false,
"label": "MP",
"name": "MP",
"show": false
},
{
"group_by": false,
"label": "PART-NUMBER",
"name": "PART-NUMBER",
"show": true
},
{
"group_by": false,
"label": "PARTREV",
"name": "PARTREV",
"show": false
},
{
"group_by": false,
"label": "PINS",
"name": "PINS",
"show": false
},
{
"group_by": false,
"label": "PITCH",
"name": "PITCH",
"show": false
},
{
"group_by": false,
"label": "Package",
"name": "Package",
"show": false
},
{
"group_by": false,
"label": "Price",
"name": "Price",
"show": false
},
{
"group_by": false,
"label": "Purchase-URL",
"name": "Purchase-URL",
"show": false
},
{
"group_by": false,
"label": "STANDARD",
"name": "STANDARD",
"show": false
},
{
"group_by": false,
"label": "SnapEDA_Link",
"name": "SnapEDA_Link",
"show": false
},
{
"group_by": false,
"label": "TYPE",
"name": "TYPE",
"show": false
},
{
"group_by": false,
"label": "WIRE",
"name": "WIRE",
"show": false
},
{
"group_by": false,
"label": "WORKING-VOLTAGE-UL",
"name": "WORKING-VOLTAGE-UL",
"show": false
},
{
"group_by": false,
"label": "WORKING-VOLTAGE-VDE",
"name": "WORKING-VOLTAGE-VDE",
"show": false
},
{
"group_by": false,
"label": "Description",
"name": "Description",
"show": false
}
],
"filter_string": "",
"group_symbols": true,
"name": "",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"4100c4a7-2a4e-4286-a196-244fb7659f20",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
{"AUTO TRANSLATE": true, "EXCLUDE DNP": false, "EXTRA_LAYERS": ""}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
(fp_lib_table
(version 7)
(lib (name "2p 3")(type "KiCad")(uri "C:/Users/Quinn/Documents/Projects/Block-Party-Firmware/Schematics/PCB Components/2p 3.pretty")(options "")(descr ""))
)

View File

@@ -0,0 +1,4 @@
(sym_lib_table
(version 7)
(lib (name "691214110002S")(type "KiCad")(uri "C:/Users/Quinn/Documents/Projects/Block-Party-Firmware/Schematics/PCB Components/2p 3.5mm terminal block/691214110002S.kicad_sym")(options "")(descr ""))
)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,205 @@
(footprint "AFC20-S04BCC-00"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0 -0.5 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "ef653084-1344-4c63-a537-3a07704f1a79")
(effects
(font
(size 1 1)
(thickness 0.1)
)
)
)
(property "Value" "AFC20-S04BCC-00"
(at 0 1 0)
(unlocked yes)
(layer "F.Fab")
(uuid "70ef1587-5854-4844-be92-e4d502b0a3d8")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "c13e11ec-83dd-4d52-9b99-ac7d39efc245")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "d7b8c6a3-fe75-4417-8fe1-0fbd37cfa8af")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "6ca4e152-b3d2-40bf-aff0-91291ff7e8f1")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(attr smd)
(fp_line
(start -6 -5)
(end 6 -5)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "fe9bce57-bf9e-46e7-970a-5407e4cb1167")
)
(fp_line
(start -6 -3.5)
(end -6 -5)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "70763ec4-8800-46ce-864c-56e207749615")
)
(fp_line
(start -6 3)
(end -6 0.5)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "cd2fca95-9f55-4446-8398-b205fc0f3111")
)
(fp_line
(start -4 3)
(end -6 3)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "95f01029-326a-40dd-b774-b1da0c2ce401")
)
(fp_line
(start 6 -5)
(end 6 -3.5)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "27bd4c55-5e8b-43ba-af9a-6a7fec90addf")
)
(fp_line
(start 6 0.5)
(end 6 3)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "7d8eb6fb-e397-4354-8c16-087e45e3343a")
)
(fp_line
(start 6 3)
(end 4 3)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "35a1027e-0d64-493d-b88a-e39491714186")
)
(fp_rect
(start -7.5 -5.5)
(end 7.5 5)
(stroke
(width 0.05)
(type default)
)
(fill none)
(layer "F.CrtYd")
(uuid "70d81eec-0cae-4a19-b444-69ea39082365")
)
(fp_text user "${REFERENCE}"
(at 0 2.5 0)
(unlocked yes)
(layer "F.Fab")
(uuid "9cf36b8a-e9c4-4171-b327-7542137bb445")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "1" smd rect
(at -3 1.53)
(size 0.85 6)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(uuid "873aa7f0-5ac8-4f09-8a80-5b093621427e")
)
(pad "2" smd rect
(at -1 1.53)
(size 0.85 6)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(uuid "9473b65b-0293-41b5-8c6c-f344ecb69caf")
)
(pad "3" smd rect
(at 1 1.53)
(size 0.85 6)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(uuid "4d2beb83-cdb0-4d1f-a4a0-bf06e0d87100")
)
(pad "4" smd rect
(at 3 1.53)
(size 0.85 6)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(uuid "5c62d4fc-0ddc-47c2-b247-1849fea5a47d")
)
(pad "6" smd rect
(at -6.05 -1.53)
(size 1.5 3)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(uuid "441b1b30-16ea-4d7a-8292-a21eeb9540f8")
)
(pad "6" smd rect
(at 6.05 -1.53)
(size 1.5 3)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(uuid "23136732-92d4-403c-81c5-f337876d1197")
)
)

View File

@@ -0,0 +1,311 @@
(footprint "Bottom Block Connector"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0 -20.78 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "fa49df0b-d18c-4512-9523-57e0b2315dad")
(effects
(font
(size 1 1)
(thickness 0.1)
)
)
)
(property "Value" "Bottom Block Connector"
(at 0 -19.28 0)
(unlocked yes)
(layer "F.Fab")
(uuid "ba1e0610-1238-4776-9acc-3f52fc1ac274")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "1f7754c3-0bc9-4893-a63e-67771568052c")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "da409b30-e1f4-4d76-8e59-cb494ec03ae2")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "fa75d831-f30a-4afe-9bbe-0671e18ba5ee")
(effects
(font
(size 1.27 1.27)
)
)
)
(attr smd)
(fp_rect
(start -10.27626 4.399468)
(end -3.679314 9.610596)
(stroke
(width 0.05)
(type default)
)
(fill none)
(layer "F.CrtYd")
(uuid "26876452-1aad-496c-91c1-54c216c1f0fa")
)
(fp_rect
(start -10.242595 -9.65)
(end -3.75 -4.44204)
(stroke
(width 0.05)
(type default)
)
(fill none)
(layer "F.CrtYd")
(uuid "5aadfba4-fca6-4aa2-bc49-d105e305b9be")
)
(fp_rect
(start 3.75 -9.564666)
(end 10.290258 -4.427982)
(stroke
(width 0.05)
(type default)
)
(fill none)
(layer "F.CrtYd")
(uuid "83f74773-f638-4e7c-bd7c-cd82f2e7036d")
)
(fp_rect
(start 3.75 4.350763)
(end 10.307438 9.607703)
(stroke
(width 0.05)
(type default)
)
(fill none)
(layer "F.CrtYd")
(uuid "b01dcf19-0eb6-4d29-aa4e-a7b1143d471c")
)
(fp_text user "GND"
(at -8.5 -3.5 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "28e44a97-a2cd-4fc2-a283-05bcb1154a59")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "SENSE"
(at 4.5 -3.347092 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "61f94c83-6733-4d41-97e5-cb61a66dc368")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "+5V"
(at 5 4.545433 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "7e61648c-d99a-4e13-8b97-ac3853af5633")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "DIN"
(at -8 4.752044 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "adeee4b3-d76d-4419-a3e0-16a24b919636")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "${REFERENCE}"
(at 0 -17.78 0)
(unlocked yes)
(layer "F.Fab")
(uuid "bfeb8936-2605-46ae-99c2-f611443a4579")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "1" smd rect
(at -7 -7)
(size 4 4)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "67f10c74-799d-45f0-9caf-f7788f5f662e")
)
(pad "1" smd rect
(at -7 -7)
(size 4 4)
(layers "B.Cu" "B.Paste" "B.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "101e8ad9-224f-46b3-87f4-ad0e56bc0bc4")
)
(pad "2" smd rect
(at 7 -7)
(size 4 4)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "a5b1f81b-cb2b-416c-b453-ea4304670bb1")
)
(pad "2" smd rect
(at 7 -7)
(size 4 4)
(layers "B.Cu" "B.Paste" "B.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "06364b91-e27a-453c-825d-4c93c7f54252")
)
(pad "3" smd rect
(at -7 7)
(size 4 4)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "da72c725-260f-4450-853e-3474c2ff991f")
)
(pad "3" smd rect
(at -7 7)
(size 4 4)
(layers "B.Cu" "B.Paste" "B.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "0697be5b-a96c-486b-a801-75d3591a3309")
)
(pad "4" smd rect
(at 7 7)
(size 4 4)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "53b0381f-8039-47a9-b28f-377cffe7060a")
)
(pad "4" smd rect
(at 7 7)
(size 4 4)
(layers "B.Cu" "B.Paste" "B.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "da7ec61f-94ae-47b7-b5fb-1e456a9d5374")
)
(pad "5" thru_hole oval
(at -9.65 -7)
(size 1.05 4)
(drill oval 1 5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(thermal_bridge_angle 45)
(uuid "060b8b3e-fa15-49b4-8d73-14375c0ad64d")
)
(pad "5" thru_hole oval
(at -9.65 7)
(size 1.05 4)
(drill oval 1 5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(thermal_bridge_angle 45)
(uuid "8657d410-6933-4ef5-8bc6-dad62152a522")
)
(pad "5" thru_hole oval
(at -4.35 -7)
(size 1.05 4)
(drill oval 1 5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(thermal_bridge_angle 45)
(uuid "7ba24e8b-3606-431c-90c0-b5288e924826")
)
(pad "5" thru_hole oval
(at -4.35 7)
(size 1.05 4)
(drill oval 1 5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(thermal_bridge_angle 45)
(uuid "bf5ae15e-77f9-41b2-b4a1-11208440dc69")
)
(pad "5" thru_hole oval
(at 4.35 -7)
(size 1.05 4)
(drill oval 1 5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(thermal_bridge_angle 45)
(uuid "58c148af-646d-410d-8f4b-e2c155e36e89")
)
(pad "5" thru_hole oval
(at 4.35 7)
(size 1.05 4)
(drill oval 1 5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(thermal_bridge_angle 45)
(uuid "52bdcb57-2483-42a3-b7ed-90b871e5022d")
)
(pad "5" thru_hole oval
(at 9.65 -7)
(size 1.05 4)
(drill oval 1 5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(thermal_bridge_angle 45)
(uuid "b580ebb5-5d3c-468c-915f-dab729108be2")
)
(pad "5" thru_hole oval
(at 9.65 7)
(size 1.05 4)
(drill oval 1 5)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(thermal_bridge_angle 45)
(uuid "3931fdca-ef11-473c-98f8-cf6439321437")
)
)

View File

@@ -0,0 +1,177 @@
(footprint "Top Block Connector"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0 -15.24 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "e17cc5d5-dfe8-4b7c-b3a4-be94e94fcbb6")
(effects
(font
(size 1 1)
(thickness 0.1)
)
)
)
(property "Value" "Top Block Connector"
(at 0 -13.74 0)
(unlocked yes)
(layer "F.Fab")
(uuid "4cfe916b-8b6d-4956-b041-31da01915788")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "b1f4a813-7f3f-466e-9e58-908afa98f313")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "90c9e94a-3962-4774-bed2-69f37effcfad")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "fbe17dc0-816a-4054-9d0f-378593d7ea01")
(effects
(font
(size 1.27 1.27)
)
)
)
(attr through_hole)
(fp_rect
(start -25 -25)
(end 25 25)
(stroke
(width 0.1)
(type default)
)
(fill none)
(layer "F.SilkS")
(uuid "02d89982-2879-49da-992f-c4d987f0fd39")
)
(fp_rect
(start -9.044238 -9.06015)
(end 9.076061 9.048037)
(stroke
(width 0.05)
(type default)
)
(fill none)
(layer "F.CrtYd")
(uuid "d9ab0ef7-1407-4bc4-abba-b68eb0549242")
)
(fp_text user "+5V"
(at -9 5 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "0fefd787-ac44-4dd8-80f5-55865fa18581")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "GND"
(at 5.5 -3.5 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "2c5437a9-0d9d-41e2-8b42-7c4e1c9d7810")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "DOUT"
(at 5 4.869823 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "41c5b424-fdbd-4dff-86cd-70ab2ec756bb")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "SENSE"
(at -9.5 -3.5 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "94cbbe95-193a-4977-9974-403aeb880dff")
(effects
(font
(size 1 1)
(thickness 0.1)
)
(justify left bottom)
)
)
(fp_text user "${REFERENCE}"
(at 0 -12.24 0)
(unlocked yes)
(layer "F.Fab")
(uuid "da8bc0ee-d0b9-42f3-a60b-7849c17eba14")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(pad "1" smd rect
(at 7 -7)
(size 4 4)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "94a1ad47-6c3e-4acd-bb59-8651a160cd1e")
)
(pad "2" smd rect
(at -7 -7)
(size 4 4)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "fc4230ad-d73f-42c7-a2e5-c77ff242b0a7")
)
(pad "3" smd rect
(at 7 7)
(size 4 4)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "087c465a-b29c-48e0-aa73-2cdb236c23b3")
)
(pad "4" smd rect
(at -7 7)
(size 4 4)
(layers "F.Cu" "F.Paste" "F.Mask")
(uuid "ced72edf-782b-4880-9519-3ecdfcb50fb9")
)
)

View File

@@ -0,0 +1,317 @@
(footprint "USB_C-0015IPX6-00"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(descr "USB Type C Receptacle, GCT, power-only, 6P, top mounted, horizontal, 3A, 1.9mm stake: https://gct.co/files/drawings/usb4125.pdf")
(tags "USB C Type-C receptacle power-only charging-only 6P 6C right angled")
(property "Reference" "REF**"
(at 0 -5.1 0)
(unlocked yes)
(layer "F.SilkS")
(hide yes)
(uuid "95c2ba4d-6f60-4594-9ea9-52fbf5601365")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "USB_C-0015IPX6-00"
(at 0 4.725 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "36f32ef8-742f-42a9-978b-4071d547df0a")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "48452a1e-b6b6-483b-a480-2e5b426c1f66")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "831d5ba0-7b98-47b7-b119-a23e98ef81b5")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "a7f3feb9-aa8e-4769-9084-30fd557400fa")
(effects
(font
(size 1.27 1.27)
)
)
)
(attr smd)
(fp_line
(start -5 -3)
(end -5 -2)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "2467febb-d5ab-4f13-ba78-1f2459adc73d")
)
(fp_line
(start -5 0.5)
(end -5 1)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "04917f94-e61a-4c18-8712-ddba3eb18db4")
)
(fp_line
(start -5 3.5)
(end -5 4)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "a13a0b5e-d319-4f8a-9f2d-efa23569d340")
)
(fp_line
(start -5 4)
(end 5 4)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "3104cbec-4990-4bc9-bcab-58b8f648253c")
)
(fp_line
(start -4 4)
(end -4 5)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "2a416804-d4a5-4c93-a467-e64b6cb63e47")
)
(fp_line
(start -4 5)
(end 4 5)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "7adc40c1-0ae8-40f3-93bd-a365cd792d77")
)
(fp_line
(start -3.5 -3)
(end -5 -3)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "0793ac5b-0e39-4bac-9727-2273bdad68bc")
)
(fp_line
(start 4 5)
(end 4 4)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "57cb3702-2187-497d-907a-9c9b2b7bd109")
)
(fp_line
(start 5 -3)
(end 3.5 -3)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "3398e8c7-f41e-4b88-888a-b136675d4e20")
)
(fp_line
(start 5 -2)
(end 5 -3)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "e2517eca-c269-4917-8e4a-5166d1603332")
)
(fp_line
(start 5 1)
(end 5 0.5)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "d7b9862c-993d-46c0-ad4e-538c7a8f2d66")
)
(fp_line
(start 5 4)
(end 5 3.5)
(stroke
(width 0.1)
(type default)
)
(layer "F.SilkS")
(uuid "f88237bc-d487-4689-b306-2a2931b6ffdc")
)
(fp_rect
(start -5.5 -3.5)
(end 5.5 5.5)
(stroke
(width 0.05)
(type default)
)
(fill none)
(layer "F.CrtYd")
(uuid "dda2e047-5cdf-4070-be01-062d2e931eaf")
)
(pad "" np_thru_hole circle
(at -3.241 -0.523 90)
(size 1 1)
(drill 1.05)
(layers "F&B.Cu")
(clearance 0.001)
(uuid "c373b8be-eb90-4ce5-984f-b8b1394e4995")
)
(pad "" np_thru_hole circle
(at 3.258 -0.523 90)
(size 1 1)
(drill 1.05)
(layers "F&B.Cu")
(clearance 0.001)
(uuid "ae958a68-ee80-42f0-b00b-a52a9db0d9a8")
)
(pad "7" thru_hole oval
(at -4.9 -0.623)
(size 1.1 2)
(drill oval 0.6 1.3)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "1aac6f43-0bb8-49ea-98c0-65703e932fa2")
)
(pad "7" thru_hole oval
(at -4.9 2.377)
(size 1.1 2)
(drill oval 0.6 1.3)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "37897aa5-083e-4a3d-bd12-b6005c8b7f8c")
)
(pad "7" thru_hole oval
(at 4.9 -0.623)
(size 1.1 2)
(drill oval 0.6 1.3)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "7fde82e7-ab02-4666-a527-4b2a1817dc0b")
)
(pad "7" thru_hole oval
(at 4.9 2.378)
(size 1.1 2)
(drill oval 0.6 1.3)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "2c2d820c-2239-4091-8155-2cf15f14a17a")
)
(pad "A5" smd rect
(at -0.491 -2.378 90)
(size 1.65 0.8)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "5b7cd6fb-d260-4792-892d-e6503b08a70f")
)
(pad "A9" smd rect
(at 1.509 -2.378 90)
(size 1.65 0.8)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "266ca991-f73c-49b1-b44d-00b5f93990c5")
)
(pad "A12" smd rect
(at 2.75 -2.378 90)
(size 1.65 0.8)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "75605fe6-1dcb-45f1-956c-0be2c3154e56")
)
(pad "B5" smd rect
(at 0.509 -2.378 90)
(size 1.65 0.8)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "1d7d450f-ccbb-44f8-b6bb-d1dc6eabafff")
)
(pad "B9" smd rect
(at -1.491 -2.378 90)
(size 1.65 0.8)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "f6f59208-cd25-461c-9a35-79341aa13e6c")
)
(pad "B12" smd rect
(at -2.75 -2.378 90)
(size 1.65 0.8)
(layers "F.Cu" "F.Paste" "F.Mask")
(clearance 0.001)
(thermal_bridge_angle 45)
(uuid "6354e3b0-f7fb-44ed-b9cd-9a64f3a9a374")
)
(model "${KICAD8_3DMODEL_DIR}/Connector_USB.3dshapes/USB_C_Receptacle_GCT_USB4125-xx-x-0190_6P_TopMnt_Horizontal.wrl"
(offset
(xyz 0 0 0)
)
(scale
(xyz 1 1 1)
)
(rotate
(xyz 0 0 0)
)
)
)

View File

@@ -0,0 +1,40 @@
(footprint "XL-1615RGBC-WS2812B" (version 20221018) (generator pcbnew)
(layer "F.Cu")
(attr smd)
(fp_text reference "REF**" (at 0 -12.7 unlocked) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.1)))
(tstamp 1cc34f35-467d-48b2-b5a7-97fe61aa7aed)
)
(fp_text value "XL-1615RGBC-WS2812B" (at 0 -11.2 unlocked) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 6be87cd0-00f5-4446-85cd-8570400250b6)
)
(fp_text user "${REFERENCE}" (at 0 -9.7 unlocked) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 831430c3-a7d9-4cba-b68b-8926bf5c1176)
)
(fp_line (start -0.8 -0.85) (end 0.8 -0.85)
(stroke (width 0.1) (type default)) (layer "F.SilkS") (tstamp e0ed9aac-88bf-4fea-9fd3-008546fcf5b1))
(fp_line (start -0.8 -0.07) (end -0.8 0.07)
(stroke (width 0.1) (type default)) (layer "F.SilkS") (tstamp 6208798a-0569-445c-b1ba-7d5c66b0d1e8))
(fp_line (start -0.8 0.85) (end 0.8 0.85)
(stroke (width 0.1) (type default)) (layer "F.SilkS") (tstamp 59820e28-c7ea-4011-a69c-9c11511b75b3))
(fp_line (start 0.8 -0.07) (end 0.8 0.07)
(stroke (width 0.1) (type default)) (layer "F.SilkS") (tstamp c37cd534-8dc2-475e-bb84-4d1556dc7032))
(fp_poly
(pts
(xy -0.282535 -0.017658)
(xy 0.005886 -0.22956)
(xy 0.005886 0.217788)
)
(stroke (width 0.1) (type solid)) (fill solid) (layer "F.SilkS") (tstamp 0be5f571-678c-4658-9678-257ddbe063b1))
(pad "1" smd rect (at -0.75 -0.45) (size 0.8 0.65) (layers "F.Cu" "F.Paste" "F.Mask")
(thermal_bridge_angle 45) (tstamp 763cdd37-22cc-4626-bf91-dca80ff2d9e3))
(pad "2" smd rect (at 0.75 -0.45) (size 0.8 0.65) (layers "F.Cu" "F.Paste" "F.Mask")
(thermal_bridge_angle 45) (tstamp f7aa557d-2994-4dc7-b37b-75f842414428))
(pad "3" smd rect (at -0.75 0.45) (size 0.8 0.65) (layers "F.Cu" "F.Paste" "F.Mask")
(thermal_bridge_angle 45) (tstamp 118bd5f1-9fb9-4bd5-822d-6816257701a9))
(pad "4" smd rect (at 0.75 0.45) (size 0.8 0.65) (layers "F.Cu" "F.Paste" "F.Mask")
(thermal_bridge_angle 45) (tstamp 14e0004c-bdcc-4e07-9796-ab52b0e5cf96))
)

View File

@@ -0,0 +1,82 @@
(footprint "YTC-A1001LF-04A"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at 0 -0.5 0)
(unlocked yes)
(layer "F.SilkS")
(uuid "7dc1773f-6e9f-45f2-b100-4f5aa1dd9694")
(effects
(font
(size 1 1)
(thickness 0.1)
)
)
)
(property "Value" "YTC-A1001LF-04A"
(at 0 1 0)
(unlocked yes)
(layer "F.Fab")
(uuid "c0df5bb6-1406-45ad-b121-58cbf8da0a44")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "28eeb0fb-cad5-4833-8cbf-d8b592d402a8")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "c4001410-3bb4-4028-91a4-cca150598e0e")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "1368bffd-293d-45a3-a23d-3f06fa47110a")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(attr smd)
(fp_text user "${REFERENCE}"
(at 0 2.5 0)
(unlocked yes)
(layer "F.Fab")
(uuid "270ae68c-3059-4d9c-bb1e-d97c9cc488af")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
)

View File

@@ -0,0 +1,111 @@
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
(symbol "Bottom_Block" (in_bom yes) (on_board yes)
(property "Reference" "J" (at 2.54 1.27 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "" (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "Bottom_Block_0_1"
(rectangle (start 0 0) (end 6.35 -12.7)
(stroke (width 0) (type default))
(fill (type none))
)
)
(symbol "Bottom_Block_1_1"
(pin power_in line (at -2.54 -11.43 0) (length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin output line (at -2.54 -8.89 0) (length 2.54)
(name "SIG" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin input line (at -2.54 -6.35 0) (length 2.54)
(name "DIN" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -2.54 -3.81 0) (length 2.54)
(name "+5V" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin output line (at -2.54 -1.27 0) (length 2.54)
(name "HOLE" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "HDR-M-2.54_1x1" (in_bom yes) (on_board yes)
(property "Reference" "J" (at 0 -2.54 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "" (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "HDR-M-2.54_1x1_0_1"
(rectangle (start -1.27 -1.27) (end 1.27 -3.81)
(stroke (width 0) (type default))
(fill (type none))
)
)
(symbol "HDR-M-2.54_1x1_1_1"
(pin input line (at -3.81 -2.54 0) (length 2.54)
(name "" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "XL-1615RGBC-WS2812B" (in_bom yes) (on_board yes)
(property "Reference" "LED" (at -1.27 1.27 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "" (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "XL-1615RGBC-WS2812B_0_1"
(rectangle (start -3.81 -2.54) (end 5.08 -7.62)
(stroke (width 0) (type default))
(fill (type none))
)
)
(symbol "XL-1615RGBC-WS2812B_1_1"
(text "XL-1615RGBC-WS2812B" (at 7.62 -1.27 0)
(effects (font (size 1.27 1.27)))
)
(pin output line (at -6.35 -3.81 0) (length 2.54)
(name "DO" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at 7.62 -3.81 180) (length 2.54)
(name "VDD" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -6.35 -6.35 0) (length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin input line (at 7.62 -6.35 180) (length 2.54)
(name "DI" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
)
)
)

View File

@@ -0,0 +1,149 @@
(kicad_symbol_lib (version 20220914) (generator kicad_symbol_editor)
(symbol "Bottom_Block" (in_bom yes) (on_board yes)
(property "Reference" "J" (at 2.54 1.27 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "" (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "Bottom_Block_0_1"
(rectangle (start 0 0) (end 6.35 -12.7)
(stroke (width 0) (type default))
(fill (type none))
)
)
(symbol "Bottom_Block_1_1"
(pin power_in line (at -2.54 -11.43 0) (length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin output line (at -2.54 -8.89 0) (length 2.54)
(name "SIG" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin input line (at -2.54 -6.35 0) (length 2.54)
(name "DIN" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -2.54 -3.81 0) (length 2.54)
(name "+5V" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
(pin output line (at -2.54 -1.27 0) (length 2.54)
(name "HOLE" (effects (font (size 1.27 1.27))))
(number "5" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "HDR-M-2.54_1x1" (in_bom yes) (on_board yes)
(property "Reference" "J" (at 0 -2.54 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "" (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "HDR-M-2.54_1x1_0_1"
(rectangle (start -1.27 -1.27) (end 1.27 -3.81)
(stroke (width 0) (type default))
(fill (type none))
)
)
(symbol "HDR-M-2.54_1x1_1_1"
(pin input line (at -3.81 -2.54 0) (length 2.54)
(name "" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "Top_Block" (in_bom yes) (on_board yes)
(property "Reference" "J" (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "" (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "Top_Block_0_1"
(rectangle (start 0 -2.54) (end 6.35 -12.7)
(stroke (width 0) (type default))
(fill (type none))
)
)
(symbol "Top_Block_1_1"
(pin power_out line (at -2.54 -3.81 0) (length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin input line (at -2.54 -6.35 0) (length 2.54)
(name "SIG" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin output line (at -2.54 -8.89 0) (length 2.54)
(name "DOUT" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin power_out line (at -2.54 -11.43 0) (length 2.54)
(name "+5V" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
)
)
(symbol "XL-1615RGBC-WS2812B" (in_bom yes) (on_board yes)
(property "Reference" "LED" (at -1.27 1.27 0)
(effects (font (size 1.27 1.27)))
)
(property "Value" "" (at 0 0 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(property "Datasheet" "" (at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)
(symbol "XL-1615RGBC-WS2812B_0_1"
(rectangle (start -3.81 -2.54) (end 5.08 -7.62)
(stroke (width 0) (type default))
(fill (type none))
)
)
(symbol "XL-1615RGBC-WS2812B_1_1"
(text "XL-1615RGBC-WS2812B" (at 7.62 -1.27 0)
(effects (font (size 1.27 1.27)))
)
(pin output line (at -6.35 -3.81 0) (length 2.54)
(name "DO" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at 7.62 -3.81 180) (length 2.54)
(name "VDD" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
(pin power_in line (at -6.35 -6.35 0) (length 2.54)
(name "GND" (effects (font (size 1.27 1.27))))
(number "3" (effects (font (size 1.27 1.27))))
)
(pin input line (at 7.62 -6.35 180) (length 2.54)
(name "DI" (effects (font (size 1.27 1.27))))
(number "4" (effects (font (size 1.27 1.27))))
)
)
)
)

View File

@@ -0,0 +1,45 @@
(footprint 691214110002S (layer F.Cu) (tedit 6623D2C3)
(descr "<b>WR-TBL Serie 2141S - 3.50 mm Horizontal Entry Modular w. Rising Cage Clamp<br></b>Max Height =9.1mm , Pitch 3.5mm , 2 Pins")
(fp_text reference REF** (at 0.0 -5.135 0) (layer F.SilkS)
(effects (font (size 1.0 1.0) (thickness 0.15)))
)
(fp_text value 691214110002S (at 4.755 4.865 0) (layer F.Fab)
(effects (font (size 1.0 1.0) (thickness 0.15)))
)
(pad 1 thru_hole circle (at -1.75 0.0) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad 2 thru_hole circle (at 1.75 0.0) (size 1.65 1.65) (drill 1.1) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(fp_line (start -3.5 3.5) (end 3.5 3.5) (layer F.Fab) (width 0.1))
(fp_line (start -3.5 -3.8) (end 3.5 -3.8) (layer F.Fab) (width 0.1))
(fp_line (start -3.5 3.5) (end -3.5 -3.8) (layer F.Fab) (width 0.1))
(fp_line (start 4.1 2.0) (end 4.1 1.318) (layer F.Fab) (width 0.1))
(fp_line (start 4.1 -2.378) (end 4.1 -3.412) (layer F.Fab) (width 0.1))
(fp_line (start 3.5 -3.8) (end 3.5 -3.15) (layer F.Fab) (width 0.1))
(fp_line (start 3.5 -2.64) (end 3.5 1.55) (layer F.Fab) (width 0.1))
(fp_line (start 3.5 2.0) (end 3.5 3.5) (layer F.Fab) (width 0.1))
(fp_line (start 3.5 -3.15) (end 4.1 -3.412) (layer F.Fab) (width 0.1))
(fp_line (start 3.5 -2.64) (end 4.1 -2.378) (layer F.Fab) (width 0.1))
(fp_line (start 3.5 2.0) (end 4.1 2.0) (layer F.Fab) (width 0.1))
(fp_line (start 3.5 1.55) (end 4.1 1.318) (layer F.Fab) (width 0.1))
(fp_line (start -3.6 -3.9) (end 3.6 -3.9) (layer F.SilkS) (width 0.2))
(fp_line (start 3.6 -3.9) (end 3.6 -3.25) (layer F.SilkS) (width 0.2))
(fp_line (start 3.6 -3.25) (end 4.2 -3.512) (layer F.SilkS) (width 0.2))
(fp_line (start 4.2 -3.512) (end 4.2 -2.278) (layer F.SilkS) (width 0.2))
(fp_line (start 4.2 -2.278) (end 3.6 -2.54) (layer F.SilkS) (width 0.2))
(fp_line (start 3.6 -2.54) (end 3.6 1.45) (layer F.SilkS) (width 0.2))
(fp_line (start 3.6 1.45) (end 4.2 1.2) (layer F.SilkS) (width 0.2))
(fp_line (start 4.2 1.2) (end 4.2 2.1) (layer F.SilkS) (width 0.2))
(fp_line (start 4.2 2.1) (end 3.6 2.1) (layer F.SilkS) (width 0.2))
(fp_line (start 3.6 2.1) (end 3.6 3.6) (layer F.SilkS) (width 0.2))
(fp_line (start 3.6 3.6) (end -3.6 3.6) (layer F.SilkS) (width 0.2))
(fp_line (start -3.6 3.6) (end -3.6 -3.9) (layer F.SilkS) (width 0.2))
(fp_poly
(pts
(xy -3.75 -4.05)
(xy 4.35 -4.05)
(xy 4.35 3.75)
(xy -3.75 3.75)
) (layer F.CrtYd) (width 0.1)
)
(fp_circle (center -2.6 -1.6) (end -2.5 -1.6) (layer F.SilkS) (width 0.4))
)

View File

@@ -0,0 +1,113 @@
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
(symbol "691214110002S" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "J" (id 0) (at -4.88 -0.922 0)
(effects (font (size 1.27 1.27)) (justify bottom right))
)
(property "Value" "691214110002S" (id 1) (at -4.83 -2.58 0)
(effects (font (size 1.27 1.27)) (justify bottom right))
)
(property "Footprint" "691214110002S:691214110002S" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "WIRE" "30 to 16 (AWG) 0.05 to 1.31 (mm²)" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Description" "\nWire-To-Board Terminal Block [Würth Elektronik] 691214110002S Wire-To-Board Terminal Block\n" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Package" "None" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Purchase-URL" "https://www.snapeda.com/api/url_track_click_mouser/?unipart_id=8068166&manufacturer=Wurth Electronics&part_name=691214110002S&search_term=3.5mm terminal block" (id 7) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MOUNT" "SMT" (id 8) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "IR-VDE" "10A" (id 9) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "IR-UL" "10A" (id 10) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "SnapEDA_Link" "https://www.snapeda.com/parts/691214110002S/Wurth+Electronics+Inc/view-part/?ref=snap" (id 11) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Availability" "In Stock" (id 12) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "WORKING-VOLTAGE-UL" "300V (AC)" (id 13) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "PINS" "2" (id 14) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MF" "Wurth Electronics" (id 15) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "DATASHEET-URL" "https://www.we-online.com/redexpert/spec/691214110002S?ae" (id 16) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MP" "691214110002S" (id 17) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "PITCH" "3.5mm" (id 18) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "PART-NUMBER" "691214110002S" (id 19) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "WORKING-VOLTAGE-VDE" "130V (AC)" (id 20) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "TYPE" "Horizontal" (id 21) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Price" "None" (id 22) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Check_prices" "https://www.snapeda.com/parts/691214110002S/Wurth+Electronics+Inc/view-part/?ref=eda" (id 23) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(symbol "691214110002S_0_0"
(polyline
(pts (xy -2.54 -1.778) (xy -2.54 -2.54)) (stroke (width 0.254))
)
(polyline
(pts (xy 0.0 -1.778) (xy 0.0 -2.54)) (stroke (width 0.254))
)
(polyline
(pts (xy -2.286 -1.016) (xy -2.794 -1.524)) (stroke (width 0.1524))
)
(polyline
(pts (xy 0.254 -1.016) (xy -0.254 -1.524)) (stroke (width 0.1524))
)
(circle (center -2.54 -1.27) (radius 0.508)
(stroke (width 0.254)) (fill (type none))
)
(circle (center 0.0 -1.27) (radius 0.508)
(stroke (width 0.254)) (fill (type none))
)
(rectangle (start -3.81 -2.54) (end 1.27 -2.22044604925e-16)
(stroke (width 0.254)) (fill (type background))
)
(pin passive line (at -2.54 -5.08 90.0) (length 2.54)
(name "~"
(effects (font (size 1.016 1.016)))
)
(number "1"
(effects (font (size 1.016 1.016)))
)
)
(pin passive line (at 0.0 -5.08 90.0) (length 2.54)
(name "~"
(effects (font (size 1.016 1.016)))
)
(number "2"
(effects (font (size 1.016 1.016)))
)
)
)
)
)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
<!DOCTYPE HTML><html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="refresh" content="0; url=https://www.snapeda.com/about/import/#"> <script type="text/javascript">window.location.href="https://www.snapeda.com/about/import/#" </script> <title>Page Redirection</title> </head> <body> If you are not redirected automatically, follow this <a href="https://www.snapeda.com/about/import/#">link to the import guide</a>. </body></html>

View File

@@ -0,0 +1,347 @@
(footprint "691214110002S"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(descr "<b>WR-TBL Serie 2141S - 3.50 mm Horizontal Entry Modular w. Rising Cage Clamp<br></b>Max Height =9.1mm , Pitch 3.5mm , 2 Pins")
(property "Reference" "REF**"
(at 0 -5.135 0)
(layer "F.SilkS")
(uuid "bebeb84c-2e7a-4e6f-bef8-3ce1fa4f9173")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "691214110002S"
(at 4.755 4.865 0)
(layer "F.Fab")
(uuid "dd684d07-9ac0-45c8-a77b-a8aad4132616")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "bf1e1f03-0ea1-4b4d-9dfb-54c39e3663cc")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "fb5f2841-0e42-496d-9af8-a7b971d24c88")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "bc41eaff-783a-42a9-9f09-06c6ee5e5916")
(effects
(font
(size 1.27 1.27)
)
)
)
(attr through_hole)
(fp_line
(start -3.6 -3.9)
(end 3.6 -3.9)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "540baf80-574a-4e31-94e5-f3815f38e3e6")
)
(fp_line
(start -3.6 3.6)
(end -3.6 -3.9)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "3bf7a506-a392-4f18-9e25-a1ab0b25ca84")
)
(fp_line
(start 3.6 -3.9)
(end 3.6 -3.25)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "649c0e50-7f55-4414-9983-b82f2beb04e4")
)
(fp_line
(start 3.6 -3.25)
(end 4.2 -3.512)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "bedd90f8-de71-44a0-8088-36105d3a8c8a")
)
(fp_line
(start 3.6 -2.54)
(end 3.6 1.45)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "05d8a329-ade8-4553-8fd9-5f41405e17de")
)
(fp_line
(start 3.6 1.45)
(end 4.2 1.2)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "2f464a73-8aee-4b6e-9dfd-84e7e7e1ddea")
)
(fp_line
(start 3.6 2.1)
(end 3.6 3.6)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "8f1f27f8-a8fa-43fd-9e1e-2393e9f6dd1c")
)
(fp_line
(start 3.6 3.6)
(end -3.6 3.6)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "8ca26fcb-2b81-4976-ac59-fabb5c4d5ba4")
)
(fp_line
(start 4.2 -3.512)
(end 4.2 -2.278)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "3592f0c4-20be-4910-b8a0-66d2fcde9c4b")
)
(fp_line
(start 4.2 -2.278)
(end 3.6 -2.54)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "8cbe667a-6375-4e4e-9712-439cb82c15d7")
)
(fp_line
(start 4.2 1.2)
(end 4.2 2.1)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "643a2bfb-80bc-463d-b46d-fb809c5b45ad")
)
(fp_line
(start 4.2 2.1)
(end 3.6 2.1)
(stroke
(width 0.2)
(type solid)
)
(layer "F.SilkS")
(uuid "dae148cf-7f19-498b-b7ff-1981c5048cce")
)
(fp_circle
(center -2.6 -1.6)
(end -2.5 -1.6)
(stroke
(width 0.4)
(type solid)
)
(fill none)
(layer "F.SilkS")
(uuid "7a9373ec-f5c2-4b80-b8cb-5f9f26173d75")
)
(fp_poly
(pts
(xy -3.75 -4.05) (xy 4.35 -4.05) (xy 4.35 3.75) (xy -3.75 3.75)
)
(stroke
(width 0.1)
(type solid)
)
(fill solid)
(layer "F.CrtYd")
(uuid "cfe2149f-b711-4768-99e7-ae4197e2cc6f")
)
(fp_line
(start -3.5 -3.8)
(end 3.5 -3.8)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "7d047a6f-dc2d-4a86-8518-5b24bd668dee")
)
(fp_line
(start -3.5 3.5)
(end -3.5 -3.8)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "f61f916b-271a-4c0e-860a-ca2e0f65f799")
)
(fp_line
(start -3.5 3.5)
(end 3.5 3.5)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "bdf755e7-77fe-45be-a006-e85da8753dc3")
)
(fp_line
(start 3.5 -3.8)
(end 3.5 -3.15)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "6f0d43fb-c989-480a-a6f4-bcb528b42d1c")
)
(fp_line
(start 3.5 -3.15)
(end 4.1 -3.412)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "9425e0a9-f9da-4cb9-9475-3fd32605b23a")
)
(fp_line
(start 3.5 -2.64)
(end 3.5 1.55)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "55a231a6-2a43-4b22-aa71-0c9905a7a320")
)
(fp_line
(start 3.5 -2.64)
(end 4.1 -2.378)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "b35016ea-edf6-49c3-a0f0-4d06b5236ca3")
)
(fp_line
(start 3.5 1.55)
(end 4.1 1.318)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "1406b1b7-b7fd-4465-9c18-b045e0752eb1")
)
(fp_line
(start 3.5 2)
(end 3.5 3.5)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "cc381400-1534-4157-a728-1a091b61d554")
)
(fp_line
(start 3.5 2)
(end 4.1 2)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "8583bc79-ffed-42db-865d-f4e8a549f011")
)
(fp_line
(start 4.1 -2.378)
(end 4.1 -3.412)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "3cfd6a72-23fb-4f36-8c9a-eefcca2ac324")
)
(fp_line
(start 4.1 2)
(end 4.1 1.318)
(stroke
(width 0.1)
(type solid)
)
(layer "F.Fab")
(uuid "063bb2f1-dc33-43fd-b4bd-5f76997223b4")
)
(pad "1" thru_hole circle
(at -1.75 0)
(size 1.65 1.65)
(drill 1.1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "becb2f29-67cd-4338-b363-fbab6946176b")
)
(pad "2" thru_hole circle
(at 1.75 0)
(size 1.65 1.65)
(drill 1.1)
(layers "*.Cu" "*.Mask")
(remove_unused_layers no)
(solder_mask_margin 0.102)
(uuid "5826bbea-291e-4a37-a12f-12c663f79204")
)
)

View File

@@ -0,0 +1,124 @@
(footprint "XCVR_ESP32-S3-DEVKITC-1-N8R2" (version 20221018) (generator pcbnew)
(layer "F.Cu")
(attr through_hole)
(fp_text reference "REF**" (at -9.775 -39.605) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp e37c4557-e19a-436c-9392-0c409ef8b7ee)
)
(fp_text value "XCVR_ESP32-S3-DEVKITC-1-N8R2" (at 4.83 33.255) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp b9669fce-20d2-4e5a-a154-193379887f45)
)
(fp_line (start -12.7 -31.37) (end 12.7 -31.37)
(stroke (width 0.127) (type solid)) (layer "F.SilkS") (tstamp 439a63f2-c2f3-4742-ab57-2d2dbc0dadd1))
(fp_line (start -12.7 31.37) (end -12.7 -31.37)
(stroke (width 0.127) (type solid)) (layer "F.SilkS") (tstamp f16d7f33-c35b-445e-ae17-aa41c3efc60c))
(fp_line (start 12.7 -31.37) (end 12.7 31.37)
(stroke (width 0.127) (type solid)) (layer "F.SilkS") (tstamp 4e25a1ef-6aeb-420b-b0ba-0df09f56b127))
(fp_line (start 12.7 31.37) (end -12.7 31.37)
(stroke (width 0.127) (type solid)) (layer "F.SilkS") (tstamp 4bac60aa-7389-4274-a42e-32de689c7408))
(fp_line (start -12.95 -37.92) (end -12.95 32.21)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 46ecf523-359a-4535-b0bc-8969a277e83c))
(fp_line (start -12.95 32.21) (end 12.95 32.21)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 63cab19f-fdae-447f-a860-7c304e441e81))
(fp_line (start 12.95 -37.92) (end -12.95 -37.92)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 90b414d6-2e7a-4c54-9588-27ede336b3d0))
(fp_line (start 12.95 32.21) (end 12.95 -37.92)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp d3823e5c-4c03-45d7-8b85-740d6ad25630))
(fp_line (start -12.7 -31.37) (end 12.7 -31.37)
(stroke (width 0.127) (type solid)) (layer "F.Fab") (tstamp 7235c27d-339f-488e-9f56-de2127b9a3f3))
(fp_line (start -12.7 31.37) (end -12.7 -31.37)
(stroke (width 0.127) (type solid)) (layer "F.Fab") (tstamp 69b0b5cd-1c86-4ffb-a4fc-62c086152146))
(fp_line (start 12.7 -31.37) (end 12.7 31.37)
(stroke (width 0.127) (type solid)) (layer "F.Fab") (tstamp c4dfc13d-a4cc-4882-88e8-b6911a315637))
(fp_line (start 12.7 31.37) (end -12.7 31.37)
(stroke (width 0.127) (type solid)) (layer "F.Fab") (tstamp 5cb943d6-e832-4199-8259-80d9b06120a9))
(pad "J1_1" thru_hole rect (at -11.43 -29.97) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp ceda7013-c2c6-469e-8268-2d1d1b1fa12a))
(pad "J1_2" thru_hole circle (at -11.43 -27.43) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 16b39f6e-b5fc-478c-9607-bd98bd533333))
(pad "J1_3" thru_hole circle (at -11.43 -24.89) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 02e378a9-96a9-4dd6-8fab-64e1c0215a56))
(pad "J1_4" thru_hole circle (at -11.43 -22.35) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp c4cf8352-0ca7-48d1-b62c-a2894d046c23))
(pad "J1_5" thru_hole circle (at -11.43 -19.81) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp c5e11a22-197d-4717-b90d-e3cd086670c5))
(pad "J1_6" thru_hole circle (at -11.43 -17.27) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp e3b74571-d645-4fb1-b6bf-dcbfcdb632c1))
(pad "J1_7" thru_hole circle (at -11.43 -14.73) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp fb7df6df-c032-4501-a6a5-1546bc60a6a3))
(pad "J1_8" thru_hole circle (at -11.43 -12.19) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 5363f573-924e-49ba-b4ac-0032a99f2bc2))
(pad "J1_9" thru_hole circle (at -11.43 -9.65) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp a12232bd-d5be-41e9-b2b6-f04f89770ef6))
(pad "J1_10" thru_hole circle (at -11.43 -7.11) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 6b98e792-6649-4b16-8291-ff6055ab6b3a))
(pad "J1_11" thru_hole circle (at -11.43 -4.57) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp c87372e6-9f02-4302-bb45-428f93cc5d88))
(pad "J1_12" thru_hole circle (at -11.43 -2.03) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 6537ff6f-5786-4d78-96c0-86e31753aab2))
(pad "J1_13" thru_hole circle (at -11.43 0.51) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 34b40b80-c6ac-4559-b929-75e3b7272a9f))
(pad "J1_14" thru_hole circle (at -11.43 3.05) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 9907999c-452a-4865-b4db-09e17244625d))
(pad "J1_15" thru_hole circle (at -11.43 5.59) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp ed75d1ef-de83-4cc1-af2d-dd09aefa17e3))
(pad "J1_16" thru_hole circle (at -11.43 8.13) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 20778e46-4030-454a-84da-0155334aac2d))
(pad "J1_17" thru_hole circle (at -11.43 10.67) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 5d157cc4-078a-413a-9d59-b5689cf5a66b))
(pad "J1_18" thru_hole circle (at -11.43 13.21) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 42ca8ecf-d32e-4aff-8f53-87674d95574d))
(pad "J1_19" thru_hole circle (at -11.43 15.75) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp a5404de6-1685-463a-8ac5-08f184ed6739))
(pad "J1_20" thru_hole circle (at -11.43 18.29) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 589ce21e-941a-4761-a05b-98de849034f0))
(pad "J1_21" thru_hole circle (at -11.43 20.83) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp aa2903d9-8a20-4ad3-8f0a-25d8a14a3dca))
(pad "J1_22" thru_hole circle (at -11.43 23.37) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp d345ca06-f89d-48b2-86d9-0f0b9589a683))
(pad "J3_1" thru_hole circle (at 11.43 -29.97) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 3fc1f168-a979-4925-ad0b-af9d9d4fac5b))
(pad "J3_2" thru_hole circle (at 11.43 -27.43) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 150ecef7-f8c2-4fac-a08e-85926a56ac0a))
(pad "J3_3" thru_hole circle (at 11.43 -24.89) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 7b95fc4d-26fa-4a7c-9050-9cbccd256c6d))
(pad "J3_4" thru_hole circle (at 11.43 -22.35) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp ff844e90-b5de-4875-af0a-97d0c95e3490))
(pad "J3_5" thru_hole circle (at 11.43 -19.81) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 0e39082c-4d04-4eca-9e47-09fa49f85827))
(pad "J3_6" thru_hole circle (at 11.43 -17.27) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 34a80db4-a3d8-423f-a7dd-8d1be8d2ecc0))
(pad "J3_7" thru_hole circle (at 11.43 -14.73) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 7ac3bb61-b349-44f4-812c-889459825469))
(pad "J3_8" thru_hole circle (at 11.43 -12.19) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp e3d1085a-b927-4fcb-9b48-ab2b6c54b312))
(pad "J3_9" thru_hole circle (at 11.43 -9.65) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp af9da3ac-9212-46d7-b9d9-406b22bc5225))
(pad "J3_10" thru_hole circle (at 11.43 -7.11) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 387624c7-805c-4100-8ee5-d97aa2508c74))
(pad "J3_11" thru_hole circle (at 11.43 -4.57) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp e083d049-1475-4753-9d8a-643fa29e4fc5))
(pad "J3_12" thru_hole circle (at 11.43 -2.03) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 02de6982-42c8-42f7-a035-7decaf546cf0))
(pad "J3_13" thru_hole circle (at 11.43 0.51) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 9324a7be-d676-4c81-8573-84b8ab844864))
(pad "J3_14" thru_hole circle (at 11.43 3.05) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp bec25a70-5d89-4408-8aff-a48acd918a14))
(pad "J3_15" thru_hole circle (at 11.43 5.59) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp dcfb09fc-c5a4-42fc-9606-55ff3717839d))
(pad "J3_16" thru_hole circle (at 11.43 8.13) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp f9f48047-8fec-4c0b-ac01-ae0c9b774659))
(pad "J3_17" thru_hole circle (at 11.43 10.67) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 635a5be6-e107-4480-aa73-c774c4527c21))
(pad "J3_18" thru_hole circle (at 11.43 13.21) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp d5faa50b-7bf9-4b29-ace3-d79daec1045b))
(pad "J3_19" thru_hole circle (at 11.43 15.75) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp b00316e7-8f1e-41a3-9e33-53dacb4588ef))
(pad "J3_20" thru_hole circle (at 11.43 18.29) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp b2b058b4-b56b-4196-b5e1-92d9bd6c5852))
(pad "J3_21" thru_hole circle (at 11.43 20.83) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 8d1aaab1-0a60-4736-810d-9eda24acfb03))
(pad "J3_22" thru_hole circle (at 11.43 23.37) (size 1.53 1.53) (drill 1.02) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 7b37d7b6-2345-490b-8492-21051fad9ad2))
)

View File

@@ -0,0 +1,407 @@
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
(symbol "ESP32-S3-DEVKITC-1-N8R2" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "U" (id 0) (at -17.78 35.56 0)
(effects (font (size 1.27 1.27)) (justify top left))
)
(property "Value" "ESP32-S3-DEVKITC-1-N8R2" (id 1) (at -17.78 -35.56 0)
(effects (font (size 1.27 1.27)) (justify bottom left))
)
(property "Footprint" "ESP32-S3-DEVKITC-1-N8R2:XCVR_ESP32-S3-DEVKITC-1-N8R2" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MF" "Espressif Systems" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Description" "\nWiFi Development Tools - 802.11 (Engineering Samples Only) ESP32-S3 General-Purpose Development Board, ESP32-S3-WROOM-1-N8R2, with Pin Header\n" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Package" "None" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Price" "None" (id 7) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Check_prices" "https://www.snapeda.com/parts/ESP32-S3-DEVKITC-1-N8R2/Espressif+Systems/view-part/?ref=eda" (id 8) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "STANDARD" "Manufacturer Recommendations" (id 9) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "PARTREV" "V1" (id 10) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "SnapEDA_Link" "https://www.snapeda.com/parts/ESP32-S3-DEVKITC-1-N8R2/Espressif+Systems/view-part/?ref=snap" (id 11) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MP" "ESP32-S3-DEVKITC-1-N8R2" (id 12) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Purchase-URL" "https://www.snapeda.com/api/url_track_click_mouser/?unipart_id=8918256&manufacturer=Espressif Systems&part_name=ESP32-S3-DEVKITC-1-N8R2&search_term=None" (id 13) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Availability" "In Stock" (id 14) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MANUFACTURER" "Espressif" (id 15) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(symbol "ESP32-S3-DEVKITC-1-N8R2_0_0"
(rectangle (start -17.78 -33.02) (end 17.78 33.02)
(stroke (width 0.254)) (fill (type background))
)
(pin power_in line (at 22.86 27.94 180.0) (length 5.08)
(name "3V3"
(effects (font (size 1.016 1.016)))
)
(number "J1_1"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at 22.86 27.94 180.0) (length 5.08)
(name "3V3"
(effects (font (size 1.016 1.016)))
)
(number "J1_2"
(effects (font (size 1.016 1.016)))
)
)
(pin input line (at -22.86 25.4 0) (length 5.08)
(name "RST"
(effects (font (size 1.016 1.016)))
)
(number "J1_3"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 17.78 0) (length 5.08)
(name "GPIO1"
(effects (font (size 1.016 1.016)))
)
(number "J3_4"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 15.24 0) (length 5.08)
(name "GPIO2"
(effects (font (size 1.016 1.016)))
)
(number "J3_5"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 10.16 0) (length 5.08)
(name "GPIO4"
(effects (font (size 1.016 1.016)))
)
(number "J1_4"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 12.7 0) (length 5.08)
(name "GPIO3"
(effects (font (size 1.016 1.016)))
)
(number "J1_13"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 7.62 0) (length 5.08)
(name "GPIO5"
(effects (font (size 1.016 1.016)))
)
(number "J1_5"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 5.08 0) (length 5.08)
(name "GPIO6"
(effects (font (size 1.016 1.016)))
)
(number "J1_6"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 2.54 0) (length 5.08)
(name "GPIO7"
(effects (font (size 1.016 1.016)))
)
(number "J1_7"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 0.0 0) (length 5.08)
(name "GPIO8"
(effects (font (size 1.016 1.016)))
)
(number "J1_12"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -2.54 0) (length 5.08)
(name "GPIO9"
(effects (font (size 1.016 1.016)))
)
(number "J1_15"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -5.08 0) (length 5.08)
(name "GPIO10"
(effects (font (size 1.016 1.016)))
)
(number "J1_16"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -7.62 0) (length 5.08)
(name "GPIO11"
(effects (font (size 1.016 1.016)))
)
(number "J1_17"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -10.16 0) (length 5.08)
(name "GPIO12"
(effects (font (size 1.016 1.016)))
)
(number "J1_18"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -12.7 0) (length 5.08)
(name "GPIO13"
(effects (font (size 1.016 1.016)))
)
(number "J1_19"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -15.24 0) (length 5.08)
(name "GPIO14"
(effects (font (size 1.016 1.016)))
)
(number "J1_20"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -17.78 0) (length 5.08)
(name "GPIO15"
(effects (font (size 1.016 1.016)))
)
(number "J1_8"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -20.32 0) (length 5.08)
(name "GPIO16"
(effects (font (size 1.016 1.016)))
)
(number "J1_9"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -22.86 0) (length 5.08)
(name "GPIO17"
(effects (font (size 1.016 1.016)))
)
(number "J1_10"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -25.4 0) (length 5.08)
(name "GPIO18"
(effects (font (size 1.016 1.016)))
)
(number "J1_11"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 20.32 0) (length 5.08)
(name "GPIO0"
(effects (font (size 1.016 1.016)))
)
(number "J3_14"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at 22.86 -30.48 180.0) (length 5.08)
(name "GND"
(effects (font (size 1.016 1.016)))
)
(number "J1_22"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at 22.86 -30.48 180.0) (length 5.08)
(name "GND"
(effects (font (size 1.016 1.016)))
)
(number "J3_1"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at 22.86 -30.48 180.0) (length 5.08)
(name "GND"
(effects (font (size 1.016 1.016)))
)
(number "J3_21"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at 22.86 -30.48 180.0) (length 5.08)
(name "GND"
(effects (font (size 1.016 1.016)))
)
(number "J3_22"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at 22.86 30.48 180.0) (length 5.08)
(name "5V0"
(effects (font (size 1.016 1.016)))
)
(number "J1_21"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 2.54 180.0) (length 5.08)
(name "GPIO48"
(effects (font (size 1.016 1.016)))
)
(number "J3_16"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 5.08 180.0) (length 5.08)
(name "GPIO47"
(effects (font (size 1.016 1.016)))
)
(number "J3_17"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 7.62 180.0) (length 5.08)
(name "GPIO46"
(effects (font (size 1.016 1.016)))
)
(number "J1_14"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 10.16 180.0) (length 5.08)
(name "GPIO45"
(effects (font (size 1.016 1.016)))
)
(number "J3_15"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -22.86 -27.94 0) (length 5.08)
(name "GPIO21"
(effects (font (size 1.016 1.016)))
)
(number "J3_18"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 -25.4 180.0) (length 5.08)
(name "USB_D+/GPIO20"
(effects (font (size 1.016 1.016)))
)
(number "J3_19"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 -22.86 180.0) (length 5.08)
(name "USB_D-/GPIO19"
(effects (font (size 1.016 1.016)))
)
(number "J3_20"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 -17.78 180.0) (length 5.08)
(name "U0RXD/GPIO44"
(effects (font (size 1.016 1.016)))
)
(number "J3_3"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 -15.24 180.0) (length 5.08)
(name "U0TXD/GPIO43"
(effects (font (size 1.016 1.016)))
)
(number "J3_2"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 -10.16 180.0) (length 5.08)
(name "MTMS/GPIO42"
(effects (font (size 1.016 1.016)))
)
(number "J3_6"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 -7.62 180.0) (length 5.08)
(name "MTDI/GPIO41"
(effects (font (size 1.016 1.016)))
)
(number "J3_7"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 -5.08 180.0) (length 5.08)
(name "MTDO/GPIO40"
(effects (font (size 1.016 1.016)))
)
(number "J3_8"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 -2.54 180.0) (length 5.08)
(name "MTCK/GPIO39"
(effects (font (size 1.016 1.016)))
)
(number "J3_9"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 12.7 180.0) (length 5.08)
(name "GPIO38"
(effects (font (size 1.016 1.016)))
)
(number "J3_10"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 15.24 180.0) (length 5.08)
(name "GPIO37"
(effects (font (size 1.016 1.016)))
)
(number "J3_11"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 17.78 180.0) (length 5.08)
(name "GPIO36"
(effects (font (size 1.016 1.016)))
)
(number "J3_12"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at 22.86 20.32 180.0) (length 5.08)
(name "GPIO35"
(effects (font (size 1.016 1.016)))
)
(number "J3_13"
(effects (font (size 1.016 1.016)))
)
)
)
)
)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,68 @@
(footprint XCVR_ESP32-S3-DEVKITC-1-N8R2 (layer F.Cu) (tedit 65C7A7CE)
(descr "")
(fp_text reference REF** (at -9.775 -39.605 0) (layer F.SilkS)
(effects (font (size 1.0 1.0) (thickness 0.15)))
)
(fp_text value XCVR_ESP32-S3-DEVKITC-1-N8R2 (at 4.83 33.255 0) (layer F.Fab)
(effects (font (size 1.0 1.0) (thickness 0.15)))
)
(pad J1_22 thru_hole circle (at -11.43 23.37) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_22 thru_hole circle (at 11.43 23.37) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_21 thru_hole circle (at -11.43 20.83) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_20 thru_hole circle (at -11.43 18.29) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_19 thru_hole circle (at -11.43 15.75) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_18 thru_hole circle (at -11.43 13.21) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_17 thru_hole circle (at -11.43 10.67) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_16 thru_hole circle (at -11.43 8.13) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_15 thru_hole circle (at -11.43 5.59) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_14 thru_hole circle (at -11.43 3.05) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_13 thru_hole circle (at -11.43 0.51) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_12 thru_hole circle (at -11.43 -2.03) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_11 thru_hole circle (at -11.43 -4.57) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_10 thru_hole circle (at -11.43 -7.11) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_9 thru_hole circle (at -11.43 -9.65) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_8 thru_hole circle (at -11.43 -12.19) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_7 thru_hole circle (at -11.43 -14.73) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_6 thru_hole circle (at -11.43 -17.27) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_5 thru_hole circle (at -11.43 -19.81) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_4 thru_hole circle (at -11.43 -22.35) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_3 thru_hole circle (at -11.43 -24.89) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_2 thru_hole circle (at -11.43 -27.43) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J1_1 thru_hole rect (at -11.43 -29.97) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_21 thru_hole circle (at 11.43 20.83) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_20 thru_hole circle (at 11.43 18.29) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_19 thru_hole circle (at 11.43 15.75) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_18 thru_hole circle (at 11.43 13.21) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_17 thru_hole circle (at 11.43 10.67) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_16 thru_hole circle (at 11.43 8.13) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_15 thru_hole circle (at 11.43 5.59) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_14 thru_hole circle (at 11.43 3.05) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_13 thru_hole circle (at 11.43 0.51) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_12 thru_hole circle (at 11.43 -2.03) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_11 thru_hole circle (at 11.43 -4.57) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_10 thru_hole circle (at 11.43 -7.11) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_9 thru_hole circle (at 11.43 -9.65) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_8 thru_hole circle (at 11.43 -12.19) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_7 thru_hole circle (at 11.43 -14.73) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_6 thru_hole circle (at 11.43 -17.27) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_5 thru_hole circle (at 11.43 -19.81) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_4 thru_hole circle (at 11.43 -22.35) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_3 thru_hole circle (at 11.43 -24.89) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_2 thru_hole circle (at 11.43 -27.43) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad J3_1 thru_hole circle (at 11.43 -29.97) (size 1.53 1.53) (drill 1.02) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(fp_line (start -12.7 31.37) (end -12.7 -31.37) (layer F.Fab) (width 0.127))
(fp_line (start -12.7 -31.37) (end 12.7 -31.37) (layer F.Fab) (width 0.127))
(fp_line (start 12.7 -31.37) (end 12.7 31.37) (layer F.Fab) (width 0.127))
(fp_line (start 12.7 31.37) (end -12.7 31.37) (layer F.Fab) (width 0.127))
(fp_line (start -12.7 31.37) (end -12.7 -31.37) (layer F.SilkS) (width 0.127))
(fp_line (start -12.7 -31.37) (end 12.7 -31.37) (layer F.SilkS) (width 0.127))
(fp_line (start 12.7 -31.37) (end 12.7 31.37) (layer F.SilkS) (width 0.127))
(fp_line (start 12.7 31.37) (end -12.7 31.37) (layer F.SilkS) (width 0.127))
(fp_line (start -12.95 -37.92) (end -12.95 32.21) (layer F.CrtYd) (width 0.05))
(fp_line (start -12.95 32.21) (end 12.95 32.21) (layer F.CrtYd) (width 0.05))
(fp_line (start 12.95 32.21) (end 12.95 -37.92) (layer F.CrtYd) (width 0.05))
(fp_line (start 12.95 -37.92) (end -12.95 -37.92) (layer F.CrtYd) (width 0.05))
(fp_circle (center -13.716 -29.972) (end -13.616 -29.972) (layer F.SilkS) (width 0.2))
(fp_circle (center -13.716 -29.972) (end -13.616 -29.972) (layer F.Fab) (width 0.2))
)

View File

@@ -0,0 +1 @@
<!DOCTYPE HTML><html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="refresh" content="0; url=https://www.snapeda.com/about/import/#"> <script type="text/javascript">window.location.href="https://www.snapeda.com/about/import/#" </script> <title>Page Redirection</title> </head> <body> If you are not redirected automatically, follow this <a href="https://www.snapeda.com/about/import/#">link to the import guide</a>. </body></html>

View File

@@ -0,0 +1,9 @@
EESchema-DOCLIB Version 2.0
#
$CMP 1N4007W
D Marking Code A1-A7 Simplified outline SOD-123FL and symbol Marking Code A1-A7 Simplified outline SOD-123FL and symbol
K
F https://datasheet.lcsc.com/szlcsc/Shandong-Jingdao-Microelectronics-1N4007W_C108803.pdf
$ENDCMP
#
#End Doc Library

View File

@@ -0,0 +1,36 @@
(module "1N4007W" (layer F.Cu)
(descr "1N4007W-1")
(tags "Diode")
(attr smd)
(fp_text reference D** (at 0.000 -0) (layer F.SilkS)
(effects (font (size 1.27 1.27) (thickness 0.254)))
)
(fp_text user %R (at 0.000 -0) (layer F.Fab)
(effects (font (size 1.27 1.27) (thickness 0.254)))
)
(fp_text value "1N4007W" (at 0.000 -0) (layer F.SilkS) hide
(effects (font (size 1.27 1.27) (thickness 0.254)))
)
(fp_line (start -1.4 0.9) (end 1.4 0.9) (layer F.Fab) (width 0.1))
(fp_line (start 1.4 0.9) (end 1.4 -0.9) (layer F.Fab) (width 0.1))
(fp_line (start 1.4 -0.9) (end -1.4 -0.9) (layer F.Fab) (width 0.1))
(fp_line (start -1.4 -0.9) (end -1.4 0.9) (layer F.Fab) (width 0.1))
(fp_line (start -3.2 -1.9) (end 3.2 -1.9) (layer F.CrtYd) (width 0.1))
(fp_line (start 3.2 -1.9) (end 3.2 1.9) (layer F.CrtYd) (width 0.1))
(fp_line (start 3.2 1.9) (end -3.2 1.9) (layer F.CrtYd) (width 0.1))
(fp_line (start -3.2 1.9) (end -3.2 -1.9) (layer F.CrtYd) (width 0.1))
(fp_line (start -0.6 0.9) (end 0.9 0.9) (layer F.SilkS) (width 0.2))
(fp_line (start -0.9 -0.9) (end 0.9 -0.9) (layer F.SilkS) (width 0.2))
(fp_line (start -1.6 -1.5) (end -1.6 -1.5) (layer F.SilkS) (width 0.2))
(fp_line (start -1.6 -1.4) (end -1.6 -1.4) (layer F.SilkS) (width 0.2))
(fp_line (start -1.6 -1.5) (end -1.6 -1.4) (layer F.SilkS) (width 0.2))
(fp_arc (start -1.6 -1.45) (end -1.600 -1.5) (angle -180) (layer F.SilkS) (width 0.2))
(fp_arc (start -1.6 -1.45) (end -1.600 -1.4) (angle -180) (layer F.SilkS) (width 0.2))
(pad 1 smd rect (at -1.600 -0 90) (size 1.200 1.200) (layers F.Cu F.Paste F.Mask))
(pad 2 smd rect (at 1.600 -0 90) (size 1.200 1.200) (layers F.Cu F.Paste F.Mask))
(model 1N4007W.stp
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

View File

@@ -0,0 +1,82 @@
(kicad_symbol_lib (version 20211014) (generator SamacSys_ECAD_Model)
(symbol "1N4007W" (in_bom yes) (on_board yes) (pin_names hide)
(property "Reference" "D" (at 11.43 5.08 0)
(effects (font (size 1.27 1.27)) (justify left top))
)
(property "Value" "1N4007W" (at 11.43 2.54 0)
(effects (font (size 1.27 1.27)) (justify left top))
)
(property "Footprint" "1N4007W" (at 11.43 -97.46 0)
(effects (font (size 1.27 1.27)) (justify left top) hide)
)
(property "Datasheet" "https://datasheet.lcsc.com/szlcsc/Shandong-Jingdao-Microelectronics-1N4007W_C108803.pdf" (at 11.43 -197.46 0)
(effects (font (size 1.27 1.27)) (justify left top) hide)
)
(property "ki_description" "Marking Code A1-A7 Simplified outline SOD-123FL and symbol Marking Code A1-A7 Simplified outline SOD-123FL and symbol" (at 11.43 -297.46 0)
(effects (font (size 1.27 1.27)) (justify left top) hide)
)
(property "Height" "1.1" (at 11.43 -397.46 0)
(effects (font (size 1.27 1.27)) (justify left top) hide)
)
(property "Manufacturer_Name" "Jingdao Microelectronics" (at 11.43 -497.46 0)
(effects (font (size 1.27 1.27)) (justify left top) hide)
)
(property "Manufacturer_Part_Number" "1N4007W" (at 11.43 -597.46 0)
(effects (font (size 1.27 1.27)) (justify left top) hide)
)
(property "Mouser Part Number" "" (at 11.43 -697.46 0)
(effects (font (size 1.27 1.27)) (justify left top) hide)
)
(property "Mouser Price/Stock" "" (at 11.43 -797.46 0)
(effects (font (size 1.27 1.27)) (justify left top) hide)
)
(property "Arrow Part Number" "" (at 11.43 -897.46 0)
(effects (font (size 1.27 1.27)) (justify left top) hide)
)
(property "Arrow Price/Stock" "" (at 11.43 -997.46 0)
(effects (font (size 1.27 1.27)) (justify left top) hide)
)
(polyline
(pts
(xy 5.08 2.54)
(xy 5.08 -2.54)
)
(stroke (width 0.254) (type default))
(fill (type none))
)
(polyline
(pts
(xy 2.54 0)
(xy 5.08 0)
)
(stroke (width 0.254) (type default))
(fill (type none))
)
(polyline
(pts
(xy 10.16 0)
(xy 12.7 0)
)
(stroke (width 0.254) (type default))
(fill (type none))
)
(polyline
(pts
(xy 5.08 0)
(xy 10.16 2.54)
(xy 10.16 -2.54)
(xy 5.08 0)
)
(stroke (width 0.254) (type default))
(fill (type outline))
)
(pin passive line (at 0 0 0) (length 2.54)
(name "K" (effects (font (size 1.27 1.27))))
(number "1" (effects (font (size 1.27 1.27))))
)
(pin passive line (at 15.24 0 180) (length 2.54)
(name "A" (effects (font (size 1.27 1.27))))
(number "2" (effects (font (size 1.27 1.27))))
)
)
)

View File

@@ -0,0 +1,28 @@
EESchema-LIBRARY Version 2.3
#encoding utf-8
#SamacSys ECAD Model 1N4007W
#/15683950/1324718/2.50/2/4/Diode
DEF 1N4007W D 0 30 Y Y 1 F N
F0 "D" 450 200 50 H V L CNN
F1 "1N4007W" 450 100 50 H V L CNN
F2 "1N4007W" 450 0 50 H I L CNN
F3 "https://datasheet.lcsc.com/szlcsc/Shandong-Jingdao-Microelectronics-1N4007W_C108803.pdf" 450 -100 50 H I L CNN
F4 "Marking Code A1-A7 Simplified outline SOD-123FL and symbol Marking Code A1-A7 Simplified outline SOD-123FL and symbol" 450 -200 50 H I L CNN "Description"
F5 "1.1" 450 -300 50 H I L CNN "Height"
F6 "Jingdao Microelectronics" 450 -400 50 H I L CNN "Manufacturer_Name"
F7 "1N4007W" 450 -500 50 H I L CNN "Manufacturer_Part_Number"
F8 "" 450 -600 50 H I L CNN "Mouser Part Number"
F9 "" 450 -700 50 H I L CNN "Mouser Price/Stock"
F10 "" 450 -800 50 H I L CNN "Arrow Part Number"
F11 "" 450 -900 50 H I L CNN "Arrow Price/Stock"
DRAW
X ~ 1 0 0 100 R 50 50 0 0 P
X ~ 2 600 0 100 L 50 50 0 0 P
P 2 0 1 6 200 100 200 -100 N
P 2 0 1 6 100 0 200 0 N
P 2 0 1 6 400 0 500 0 N
P 4 0 1 10 200 0 400 100 400 -100 200 0 F
ENDDRAW
ENDDEF
#
#End Library

View File

@@ -0,0 +1,46 @@
PCBNEW-LibModule-V1 2024-02-10 02:59:28
# encoding utf-8
Units mm
$INDEX
1N4007W
$EndINDEX
$MODULE 1N4007W
Po 0 0 0 15 65c6e690 00000000 ~~
Li 1N4007W
Cd 1N4007W-1
Kw Diode
Sc 0
At SMD
AR
Op 0 0 0
T0 0.000 -0 1.27 1.27 0 0.254 N V 21 N "D**"
T1 0.000 -0 1.27 1.27 0 0.254 N I 21 N "1N4007W"
DS -1.4 0.9 1.4 0.9 0.1 24
DS 1.4 0.9 1.4 -0.9 0.1 24
DS 1.4 -0.9 -1.4 -0.9 0.1 24
DS -1.4 -0.9 -1.4 0.9 0.1 24
DS -3.2 -1.9 3.2 -1.9 0.1 24
DS 3.2 -1.9 3.2 1.9 0.1 24
DS 3.2 1.9 -3.2 1.9 0.1 24
DS -3.2 1.9 -3.2 -1.9 0.1 24
DS -0.6 0.9 0.9 0.9 0.2 21
DS -0.9 -0.9 0.9 -0.9 0.2 21
DS -1.6 -1.5 -1.6 -1.5 0.2 21
DS -1.6 -1.4 -1.6 -1.4 0.2 21
DS -1.6 -1.5 -1.6 -1.4 0.2 21
DA -1.6 -1.45 -1.600 -1.5 -1800 0.2 21
DA -1.6 -1.45 -1.600 -1.4 -1800 0.2 21
$PAD
Po -1.600 -0
Sh "1" R 1.200 1.200 0 0 900
At SMD N 00888000
Ne 0 ""
$EndPAD
$PAD
Po 1.600 -0
Sh "2" R 1.200 1.200 0 0 900
At SMD N 00888000
Ne 0 ""
$EndPAD
$EndMODULE 1N4007W
$EndLIBRARY

View File

@@ -0,0 +1,58 @@
(footprint "CUI_UJC-HP-3-SMT-TR" (version 20221018) (generator pcbnew)
(layer "F.Cu")
(attr smd)
(fp_text reference "REF**" (at -2 -3.25) (layer "F.SilkS")
(effects (font (size 0.787402 0.787402) (thickness 0.15)))
(tstamp d2f73f21-9da3-496e-a111-ed95f146d8e6)
)
(fp_text value "CUI_UJC-HP-3-SMT-TR" (at 5 -2) (layer "F.Fab")
(effects (font (size 0.787402 0.787402) (thickness 0.15)))
(tstamp d93062b2-6fa7-431b-a6c6-19b117ed9a7c)
)
(fp_line (start -4.47 2.45) (end -4.47 1.35)
(stroke (width 0.127) (type solid)) (layer "F.SilkS") (tstamp 32c93c20-bf9d-4cae-a149-e2e0101421c3))
(fp_line (start -4.47 6.4) (end -4.47 5.15)
(stroke (width 0.127) (type solid)) (layer "F.SilkS") (tstamp 9a7fa7a0-94d8-4474-b7bb-c05b38acbab9))
(fp_line (start -4.47 6.4) (end 4.47 6.4)
(stroke (width 0.127) (type solid)) (layer "F.SilkS") (tstamp 5b3d18ec-0b0f-49e3-b1ab-50178befd510))
(fp_line (start 4.47 2.45) (end 4.47 1.35)
(stroke (width 0.127) (type solid)) (layer "F.SilkS") (tstamp 15fb6149-5711-483a-b229-42dc8cda6cee))
(fp_line (start 4.47 6.4) (end 4.47 5.15)
(stroke (width 0.127) (type solid)) (layer "F.SilkS") (tstamp 03d5fd61-1702-4d4d-bf28-0cc2dec69406))
(fp_line (start -5.07 -1.25) (end -5.07 6.65)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp a71ae403-ec36-41f4-89de-c3d26b42fea3))
(fp_line (start -5.07 6.65) (end 5.07 6.65)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp d2a1434c-e90b-4e43-962e-4628571aacd6))
(fp_line (start 5.07 -1.25) (end -5.07 -1.25)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 740fabfa-b99e-49fc-b019-bfca7d7e24b0))
(fp_line (start 5.07 6.65) (end 5.07 -1.25)
(stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 9657e666-c2fa-40c1-998f-f818d7da8217))
(fp_line (start -4.47 -0.5) (end -4.47 6.4)
(stroke (width 0.127) (type solid)) (layer "F.Fab") (tstamp 21af92ac-0558-43a5-95bc-fb27a2a83449))
(fp_line (start -4.47 6.4) (end 4.47 6.4)
(stroke (width 0.127) (type solid)) (layer "F.Fab") (tstamp ba7d7151-1861-48e9-9086-1b3333080209))
(fp_line (start 4.47 -0.5) (end -4.47 -0.5)
(stroke (width 0.127) (type solid)) (layer "F.Fab") (tstamp 7e20855c-8212-4906-9feb-2686e539a9a0))
(fp_line (start 4.47 6.4) (end 4.47 -0.5)
(stroke (width 0.127) (type solid)) (layer "F.Fab") (tstamp aced7fb4-7f92-4006-a908-eaa61058e988))
(pad "A5" smd rect (at -0.5 -0.005 90) (size 1.15 0.7) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102) (tstamp 51234865-1237-4c67-8adb-c8ae70e6f3bf))
(pad "A9" smd rect (at 1.52 -0.005 90) (size 1.15 0.8) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102) (tstamp 5f84affa-04b1-4a6d-a7e9-90f3a11756ef))
(pad "A12" smd rect (at 2.75 -0.005 90) (size 1.15 0.9) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102) (tstamp 2bfaa8ec-82d8-4348-a2e4-86a8c32d8ee4))
(pad "B5" smd rect (at 0.5 -0.005 90) (size 1.15 0.7) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102) (tstamp f35f15c0-d55e-436f-8568-ff43bc5a186f))
(pad "B9" smd rect (at -1.52 -0.005 90) (size 1.15 0.8) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102) (tstamp b8e57222-757a-4191-8b36-469c371264a9))
(pad "B12" smd rect (at -2.75 -0.005 90) (size 1.15 0.9) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102) (tstamp 638bfb32-3315-4b31-8ed8-806180d5b571))
(pad "S1" thru_hole oval (at -4.32 0) (size 1 2) (drill oval 0.5 1.2) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 943bb2e4-c787-4a5b-a7a5-dac491f96c73))
(pad "S2" thru_hole oval (at 4.32 0) (size 1 2) (drill oval 0.5 1.2) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp fab4501a-1f83-40ba-be97-431df7c04a32))
(pad "S3" thru_hole oval (at -4.32 3.8) (size 1 2) (drill oval 0.5 1.2) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 1e84bf00-6efd-4e41-b5be-8ae18d3c8954))
(pad "S4" thru_hole oval (at 4.32 3.8) (size 1 2) (drill oval 0.5 1.2) (layers "*.Cu" "*.Mask")
(solder_mask_margin 0.102) (tstamp 65ca0f9e-a988-4010-a4e0-748bd8111b28))
)

View File

@@ -0,0 +1,34 @@
(footprint CUI_UJC-HP-3-SMT-TR (layer F.Cu) (tedit 65CADA51)
(descr "")
(attr smd)
(fp_text reference REF** (at -2.0 -3.25 0) (layer F.SilkS)
(effects (font (size 0.787401574803 0.787401574803) (thickness 0.15)))
)
(fp_text value CUI_UJC-HP-3-SMT-TR (at 5.0 -2.0 0) (layer F.Fab)
(effects (font (size 0.787401574803 0.787401574803) (thickness 0.15)))
)
(pad B5 smd rect (at 0.5 -0.005 90.0) (size 1.15 0.7) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad A5 smd rect (at -0.5 -0.005 90.0) (size 1.15 0.7) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad B9 smd rect (at -1.52 -0.005 90.0) (size 1.15 0.8) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad A9 smd rect (at 1.52 -0.005 90.0) (size 1.15 0.8) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad B12 smd rect (at -2.75 -0.005 90.0) (size 1.15 0.9) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad A12 smd rect (at 2.75 -0.005 90.0) (size 1.15 0.9) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad S1 thru_hole oval (at -4.32 0.0) (size 1.0 2.0) (drill oval 0.5 1.2) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad S2 thru_hole oval (at 4.32 0.0) (size 1.0 2.0) (drill oval 0.5 1.2) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad S3 thru_hole oval (at -4.32 3.8) (size 1.0 2.0) (drill oval 0.5 1.2) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(pad S4 thru_hole oval (at 4.32 3.8) (size 1.0 2.0) (drill oval 0.5 1.2) (layers *.Cu *.Mask) (solder_mask_margin 0.102))
(fp_line (start -4.47 -0.5) (end -4.47 6.4) (layer F.Fab) (width 0.127))
(fp_line (start -4.47 6.4) (end 4.47 6.4) (layer F.Fab) (width 0.127))
(fp_line (start 4.47 6.4) (end 4.47 -0.5) (layer F.Fab) (width 0.127))
(fp_line (start 4.47 -0.5) (end -4.47 -0.5) (layer F.Fab) (width 0.127))
(fp_line (start -4.47 6.4) (end 4.47 6.4) (layer F.SilkS) (width 0.127))
(fp_line (start 4.47 2.45) (end 4.47 1.35) (layer F.SilkS) (width 0.127))
(fp_line (start 4.47 6.4) (end 4.47 5.15) (layer F.SilkS) (width 0.127))
(fp_line (start -4.47 2.45) (end -4.47 1.35) (layer F.SilkS) (width 0.127))
(fp_line (start -4.47 6.4) (end -4.47 5.15) (layer F.SilkS) (width 0.127))
(fp_line (start -5.07 -1.25) (end -5.07 6.65) (layer F.CrtYd) (width 0.05))
(fp_line (start -5.07 6.65) (end 5.07 6.65) (layer F.CrtYd) (width 0.05))
(fp_line (start 5.07 6.65) (end 5.07 -1.25) (layer F.CrtYd) (width 0.05))
(fp_line (start 5.07 -1.25) (end -5.07 -1.25) (layer F.CrtYd) (width 0.05))
)

View File

@@ -0,0 +1,141 @@
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
(symbol "UJC-HP-3-SMT-TR" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
(property "Reference" "J" (id 0) (at -7.62 8.89 0)
(effects (font (size 1.27 1.27)) (justify bottom left))
)
(property "Value" "UJC-HP-3-SMT-TR" (id 1) (at -7.62 -11.43 0)
(effects (font (size 1.27 1.27)) (justify top left))
)
(property "Footprint" "UJC-HP-3-SMT-TR:CUI_UJC-HP-3-SMT-TR" (id 2) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MF" "CUI Devices" (id 4) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MAXIMUM_PACKAGE_HEIGHT" "3.16mm" (id 5) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Package" "Package" (id 6) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Price" "None" (id 7) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Check_prices" "https://www.snapeda.com/parts/UJC-HP-3-SMT-TR/CUI+Devices/view-part/?ref=eda" (id 8) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "STANDARD" "Manufacturer recommendations" (id 9) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "PARTREV" "04/30/2020" (id 10) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "SnapEDA_Link" "https://www.snapeda.com/parts/UJC-HP-3-SMT-TR/CUI+Devices/view-part/?ref=snap" (id 11) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MP" "UJC-HP-3-SMT-TR" (id 12) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Purchase-URL" "https://www.snapeda.com/api/url_track_click_mouser/?unipart_id=4722774&manufacturer=CUI Devices&part_name=UJC-HP-3-SMT-TR&search_term=usb c" (id 13) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Description" "Type C, 20 Vdc, 3 A, Right Angle, Surface Mount, Black Insulator, Power-Only USB Receptacle" (id 14) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "CUI_purchase_URL" "https://www.cuidevices.com/product/interconnect/connectors/usb-connectors/ujc-hp-3-smt-tr?utm_source=snapeda.com&utm_medium=referral&utm_campaign=snapedaBOM" (id 15) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "Availability" "In Stock" (id 16) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(property "MANUFACTURER" "CUI Devices" (id 17) (at 0 0 0)
(effects (font (size 1.27 1.27)) (justify bottom) hide)
)
(symbol "UJC-HP-3-SMT-TR_0_0"
(rectangle (start -7.62 -10.16) (end 7.62 7.62)
(stroke (width 0.254)) (fill (type background))
)
(pin bidirectional line (at -12.7 5.08 0) (length 5.08)
(name "CC1"
(effects (font (size 1.016 1.016)))
)
(number "A5"
(effects (font (size 1.016 1.016)))
)
)
(pin bidirectional line (at -12.7 2.54 0) (length 5.08)
(name "CC2"
(effects (font (size 1.016 1.016)))
)
(number "B5"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at -12.7 0.0 0) (length 5.08)
(name "V-BUS"
(effects (font (size 1.016 1.016)))
)
(number "A9"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at -12.7 0.0 0) (length 5.08)
(name "V-BUS"
(effects (font (size 1.016 1.016)))
)
(number "B9"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at -12.7 -2.54 0) (length 5.08)
(name "GND"
(effects (font (size 1.016 1.016)))
)
(number "A12"
(effects (font (size 1.016 1.016)))
)
)
(pin power_in line (at -12.7 -2.54 0) (length 5.08)
(name "GND"
(effects (font (size 1.016 1.016)))
)
(number "B12"
(effects (font (size 1.016 1.016)))
)
)
(pin passive line (at -12.7 -7.62 0) (length 5.08)
(name "SHIELD"
(effects (font (size 1.016 1.016)))
)
(number "S1"
(effects (font (size 1.016 1.016)))
)
)
(pin passive line (at -12.7 -7.62 0) (length 5.08)
(name "SHIELD"
(effects (font (size 1.016 1.016)))
)
(number "S2"
(effects (font (size 1.016 1.016)))
)
)
(pin passive line (at -12.7 -7.62 0) (length 5.08)
(name "SHIELD"
(effects (font (size 1.016 1.016)))
)
(number "S3"
(effects (font (size 1.016 1.016)))
)
)
(pin passive line (at -12.7 -7.62 0) (length 5.08)
(name "SHIELD"
(effects (font (size 1.016 1.016)))
)
(number "S4"
(effects (font (size 1.016 1.016)))
)
)
)
)
)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
<!DOCTYPE HTML><html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="refresh" content="0; url=https://www.snapeda.com/about/import/#"> <script type="text/javascript">window.location.href="https://www.snapeda.com/about/import/#" </script> <title>Page Redirection</title> </head> <body> If you are not redirected automatically, follow this <a href="https://www.snapeda.com/about/import/#">link to the import guide</a>. </body></html>

View File

@@ -0,0 +1,259 @@
(footprint "ADAFRUIT_4328"
(version 20240108)
(generator "pcbnew")
(generator_version "8.0")
(layer "F.Cu")
(property "Reference" "REF**"
(at -0.475 -3.535 0)
(layer "F.SilkS")
(uuid "778fcf08-dfa3-4a34-a9da-7791a9e390f2")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Value" "ADAFRUIT_4328"
(at 4.605 4.435 0)
(layer "F.Fab")
(uuid "29751dd4-7a94-4b41-8cef-22b297fbf14a")
(effects
(font
(size 1 1)
(thickness 0.15)
)
)
)
(property "Footprint" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "c959e1de-eec8-40b5-9393-6cac7b42d8f1")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Datasheet" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "87ec8df1-da1b-4a23-bc15-26ffad62ebc4")
(effects
(font
(size 1.27 1.27)
)
)
)
(property "Description" ""
(at 0 0 0)
(unlocked yes)
(layer "F.Fab")
(hide yes)
(uuid "f0b3461a-6334-48ca-96f6-7b33e2967d7d")
(effects
(font
(size 1.27 1.27)
)
)
)
(attr smd)
(fp_line
(start -3 1.45)
(end -3 0.47)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "8253909a-2daf-43a3-a5e3-3b521a1c414d")
)
(fp_line
(start -2.12 1.45)
(end -3 1.45)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "b392e591-4b70-448a-9688-44858eaf6002")
)
(fp_line
(start -1.88 -1.45)
(end 1.88 -1.45)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "3f47d738-ed4e-4688-8e73-2ee5eb021b6c")
)
(fp_line
(start 3 1.45)
(end 2.12 1.45)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "5bda9700-4772-4b55-8cf9-c698bc662677")
)
(fp_line
(start 3 1.45)
(end 3 0.47)
(stroke
(width 0.127)
(type solid)
)
(layer "F.SilkS")
(uuid "f49fbc9d-5a65-40b5-9cc4-4e201eea30ed")
)
(fp_circle
(center -1.5 3.25)
(end -1.4 3.25)
(stroke
(width 0.2)
(type solid)
)
(fill none)
(layer "F.SilkS")
(uuid "acf7795d-8647-4715-9282-b183bdfa6377")
)
(fp_line
(start -3.65 -1.9)
(end -3.65 2.8)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "f5f00223-0311-4598-ad96-1c564cbcd1b8")
)
(fp_line
(start -3.65 2.8)
(end 3.65 2.8)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "b2a7218d-6277-442f-a67f-522dbf77346c")
)
(fp_line
(start 3.65 -1.9)
(end -3.65 -1.9)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "9618b57c-a689-4083-9edd-44cf0d67dcf2")
)
(fp_line
(start 3.65 2.8)
(end 3.65 -1.9)
(stroke
(width 0.05)
(type solid)
)
(layer "F.CrtYd")
(uuid "a7052b9f-4ba7-4d7f-9fb3-f246e4ab9984")
)
(fp_line
(start -3 -1.45)
(end 3 -1.45)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "5b7dfed7-1d0c-44a4-b5d9-df82d93eba46")
)
(fp_line
(start -3 1.45)
(end -3 -1.45)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "44f17a4e-986d-40ee-8d3c-d54fa576822e")
)
(fp_line
(start 3 -1.45)
(end 3 1.45)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "6cac9ae9-adfa-4362-98c1-b62876d45498")
)
(fp_line
(start 3 1.45)
(end -3 1.45)
(stroke
(width 0.127)
(type solid)
)
(layer "F.Fab")
(uuid "384265dd-ea8f-4f23-a78d-77f98dc9d50d")
)
(fp_circle
(center -1.5 3.25)
(end -1.4 3.25)
(stroke
(width 0.2)
(type solid)
)
(fill none)
(layer "F.Fab")
(uuid "af464435-8aaf-4b61-9d38-fdc6b1f40931")
)
(pad "1" smd rect
(at -1.5 1.775)
(size 0.6 1.55)
(layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102)
(uuid "c233329c-6dbd-4a9c-a486-f527284ad809")
)
(pad "2" smd rect
(at -0.5 1.775)
(size 0.6 1.55)
(layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102)
(uuid "cfbeb9dd-e379-4c4b-960e-f5131501e3f2")
)
(pad "3" smd rect
(at 0.5 1.775)
(size 0.6 1.55)
(layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102)
(uuid "f2d9734f-fdb6-43fe-b58b-1487ba5f978f")
)
(pad "4" smd rect
(at 1.5 1.775)
(size 0.6 1.55)
(layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102)
(uuid "8d8bf53e-c3b4-4487-806b-d9dda1b8141c")
)
(pad "SH1" smd rect
(at -2.8 -0.75)
(size 1.2 1.8)
(layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102)
(uuid "e2561fc5-96f6-43c1-bc13-f379e4d68ca0")
)
(pad "SH2" smd rect
(at 2.8 -0.75)
(size 1.2 1.8)
(layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.102)
(uuid "1075fce8-e433-4891-899f-f12225a5e8b6")
)
)

View File

@@ -0,0 +1,354 @@
(kicad_symbol_lib
(version 20231120)
(generator "kicad_symbol_editor")
(generator_version "8.0")
(symbol "4328"
(pin_names
(offset 1.016)
)
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "J"
(at -6.35 11.43 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
)
(property "Value" "4328"
(at -6.604 -10.414 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
)
(property "Footprint" "4328:ADAFRUIT_4328"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Datasheet" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "MF" "Adafruit"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "MAXIMUM_PACKAGE_HEIGHT" "4.25mm"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Package" "None"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Price" "None"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Check_prices" "https://www.snapeda.com/parts/4328/Adafruit+Industries/view-part/?ref=eda"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "STANDARD" "Manufacturer Recommendations"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "PARTREV" "23/3/21"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "SnapEDA_Link" "https://www.snapeda.com/parts/4328/Adafruit+Industries/view-part/?ref=snap"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "MP" "4328"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Purchase-URL" "https://www.snapeda.com/api/url_track_click_mouser/?unipart_id=12414535&manufacturer=Adafruit&part_name=4328&search_term=jst sh 4-pin"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Description_1" "\nAdafruit Accessories JST SH 4-pin Vertical Connector (10-pack) - Qwiic Compatible\n"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Availability" "In Stock"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "MANUFACTURER" "Adafruit"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(symbol "4328_0_0"
(rectangle
(start -6.35 -7.62)
(end 6.35 10.16)
(stroke
(width 0.254)
(type default)
)
(fill
(type background)
)
)
(rectangle
(start -5.715 -0.3175)
(end -4.1275 0.3175)
(stroke
(width 0.1)
(type default)
)
(fill
(type outline)
)
)
(rectangle
(start -5.715 2.2225)
(end -4.1275 2.8575)
(stroke
(width 0.1)
(type default)
)
(fill
(type outline)
)
)
(rectangle
(start -5.715 4.7625)
(end -4.1275 5.3975)
(stroke
(width 0.1)
(type default)
)
(fill
(type outline)
)
)
(rectangle
(start -5.715 7.3025)
(end -4.1275 7.9375)
(stroke
(width 0.1)
(type default)
)
(fill
(type outline)
)
)
(pin passive line
(at -10.16 7.62 0)
(length 5.08)
(name "1"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "1"
(effects
(font
(size 1.016 1.016)
)
)
)
)
(pin passive line
(at -10.16 5.08 0)
(length 5.08)
(name "2"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "2"
(effects
(font
(size 1.016 1.016)
)
)
)
)
(pin passive line
(at -10.16 2.54 0)
(length 5.08)
(name "3"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "3"
(effects
(font
(size 1.016 1.016)
)
)
)
)
(pin passive line
(at -10.16 0 0)
(length 5.08)
(name "4"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "4"
(effects
(font
(size 1.016 1.016)
)
)
)
)
(pin passive line
(at -10.16 -5.08 0)
(length 5.08)
(name "SHIELD"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "SH1"
(effects
(font
(size 1.016 1.016)
)
)
)
)
(pin passive line
(at -10.16 -5.08 0)
(length 5.08)
(name "SHIELD"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "SH2"
(effects
(font
(size 1.016 1.016)
)
)
)
)
)
)
)

View File

@@ -0,0 +1,354 @@
(kicad_symbol_lib
(version 20231120)
(generator "kicad_symbol_editor")
(generator_version "8.0")
(symbol "4328"
(pin_names
(offset 1.016)
)
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(property "Reference" "J"
(at -6.35 11.43 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
)
(property "Value" "4328"
(at -6.604 -10.414 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
)
(property "Footprint" "4328:ADAFRUIT_4328"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Datasheet" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "Description" ""
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(hide yes)
)
)
(property "MF" "Adafruit"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "MAXIMUM_PACKAGE_HEIGHT" "4.25mm"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Package" "None"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Price" "None"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Check_prices" "https://www.snapeda.com/parts/4328/Adafruit+Industries/view-part/?ref=eda"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "STANDARD" "Manufacturer Recommendations"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "PARTREV" "23/3/21"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "SnapEDA_Link" "https://www.snapeda.com/parts/4328/Adafruit+Industries/view-part/?ref=snap"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "MP" "4328"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Purchase-URL" "https://www.snapeda.com/api/url_track_click_mouser/?unipart_id=12414535&manufacturer=Adafruit&part_name=4328&search_term=jst sh 4-pin"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Description_1" "\nAdafruit Accessories JST SH 4-pin Vertical Connector (10-pack) - Qwiic Compatible\n"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "Availability" "In Stock"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(property "MANUFACTURER" "Adafruit"
(at 0 0 0)
(effects
(font
(size 1.27 1.27)
)
(justify bottom)
(hide yes)
)
)
(symbol "4328_0_0"
(rectangle
(start -6.35 -7.62)
(end 6.35 10.16)
(stroke
(width 0.254)
(type default)
)
(fill
(type background)
)
)
(rectangle
(start -5.715 -0.3175)
(end -4.1275 0.3175)
(stroke
(width 0.1)
(type default)
)
(fill
(type outline)
)
)
(rectangle
(start -5.715 2.2225)
(end -4.1275 2.8575)
(stroke
(width 0.1)
(type default)
)
(fill
(type outline)
)
)
(rectangle
(start -5.715 4.7625)
(end -4.1275 5.3975)
(stroke
(width 0.1)
(type default)
)
(fill
(type outline)
)
)
(rectangle
(start -5.715 7.3025)
(end -4.1275 7.9375)
(stroke
(width 0.1)
(type default)
)
(fill
(type outline)
)
)
(pin passive line
(at -10.16 7.62 0)
(length 5.08)
(name "1"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "1"
(effects
(font
(size 1.016 1.016)
)
)
)
)
(pin passive line
(at -10.16 5.08 0)
(length 5.08)
(name "2"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "2"
(effects
(font
(size 1.016 1.016)
)
)
)
)
(pin passive line
(at -10.16 2.54 0)
(length 5.08)
(name "3"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "3"
(effects
(font
(size 1.016 1.016)
)
)
)
)
(pin passive line
(at -10.16 0 0)
(length 5.08)
(name "4"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "4"
(effects
(font
(size 1.016 1.016)
)
)
)
)
(pin passive line
(at -10.16 -5.08 0)
(length 5.08)
(name "SHIELD"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "SH1"
(effects
(font
(size 1.016 1.016)
)
)
)
)
(pin passive line
(at -10.16 -5.08 0)
(length 5.08)
(name "SHIELD"
(effects
(font
(size 1.016 1.016)
)
)
)
(number "SH2"
(effects
(font
(size 1.016 1.016)
)
)
)
)
)
)
)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,32 @@
(footprint ADAFRUIT_4328 (layer F.Cu) (tedit 6623CA2B)
(descr "")
(attr smd)
(fp_text reference REF** (at -0.475 -3.535 0) (layer F.SilkS)
(effects (font (size 1.0 1.0) (thickness 0.15)))
)
(fp_text value ADAFRUIT_4328 (at 4.605 4.435 0) (layer F.Fab)
(effects (font (size 1.0 1.0) (thickness 0.15)))
)
(pad SH2 smd rect (at 2.8 -0.75) (size 1.2 1.8) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad SH1 smd rect (at -2.8 -0.75) (size 1.2 1.8) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad 4 smd rect (at 1.5 1.775) (size 0.6 1.55) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad 3 smd rect (at 0.5 1.775) (size 0.6 1.55) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad 2 smd rect (at -0.5 1.775) (size 0.6 1.55) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(pad 1 smd rect (at -1.5 1.775) (size 0.6 1.55) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
(fp_line (start 3.0 -1.45) (end 3.0 1.45) (layer F.Fab) (width 0.127))
(fp_line (start 3.0 1.45) (end -3.0 1.45) (layer F.Fab) (width 0.127))
(fp_line (start -3.0 1.45) (end -3.0 -1.45) (layer F.Fab) (width 0.127))
(fp_line (start -3.0 -1.45) (end 3.0 -1.45) (layer F.Fab) (width 0.127))
(fp_line (start 3.0 1.45) (end 3.0 0.47) (layer F.SilkS) (width 0.127))
(fp_line (start -2.12 1.45) (end -3.0 1.45) (layer F.SilkS) (width 0.127))
(fp_line (start 3.0 1.45) (end 2.12 1.45) (layer F.SilkS) (width 0.127))
(fp_line (start -3.0 1.45) (end -3.0 0.47) (layer F.SilkS) (width 0.127))
(fp_line (start -1.88 -1.45) (end 1.88 -1.45) (layer F.SilkS) (width 0.127))
(fp_line (start -3.65 -1.9) (end -3.65 2.8) (layer F.CrtYd) (width 0.05))
(fp_line (start -3.65 2.8) (end 3.65 2.8) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.65 2.8) (end 3.65 -1.9) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.65 -1.9) (end -3.65 -1.9) (layer F.CrtYd) (width 0.05))
(fp_circle (center -1.5 3.25) (end -1.4 3.25) (layer F.SilkS) (width 0.2))
(fp_circle (center -1.5 3.25) (end -1.4 3.25) (layer F.Fab) (width 0.2))
)

View File

@@ -0,0 +1 @@
<!DOCTYPE HTML><html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="refresh" content="0; url=https://www.snapeda.com/about/import/#"> <script type="text/javascript">window.location.href="https://www.snapeda.com/about/import/#" </script> <title>Page Redirection</title> </head> <body> If you are not redirected automatically, follow this <a href="https://www.snapeda.com/about/import/#">link to the import guide</a>. </body></html>

View File

@@ -0,0 +1,104 @@
<!--XSL style sheet to convert EESCHEMA XML Partlist Format to grouped CSV BOM Format
Copyright (C) 2014, Wolf Walter.
Copyright (C) 2013, Stefan Helmert.
Copyright (C) 2018, Kicad developers.
Copyright (C) 2019, arturo182.
GPL v2.
Functionality:
Generation of JLCPCB PCBA compatible BOM
How to use this is explained in eeschema.pdf chapter 14. You enter a command line into the
netlist exporter using a new (custom) tab in the netlist export dialog.
The command line is
xsltproc -o "%O.csv" "FullPathToFile/bom2grouped_csv_jlcpcb.xsl" "%I"
-->
<!--
@package
Generates a JLCPCB PCBA service compatible BOM
Functionality:
* Generate a comma separated value BOM list (csv file type).
* Components are sorted by ref and grouped by same value+footprint
One value per line
Fields are
Comment,Designator,Footprint,LCSC
The command line is
xsltproc -o "%O.csv" "full_path/bom2grouped_csv_jlcpcb.xsl" "%I"
-->
<!DOCTYPE xsl:stylesheet [
<!ENTITY nl "&#xd;&#xa;"> <!--new line CR, LF, or LF, your choice -->
]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:variable name="digits" select="'1234567890'" />
<!-- for matching grouping of footprint and value combination -->
<xsl:key name="partTypeByValueAndFootprint" match="comp" use="concat(footprint, '-', value)" />
<!-- for table head and empty table fields-->
<xsl:key name="headentr" match="field" use="@name"/>
<!-- main part -->
<xsl:template match="/export">
<xsl:text>Comment,Designator,Footprint,LCSC</xsl:text>
<!-- all table entries -->
<xsl:apply-templates select="components"/>
</xsl:template>
<xsl:template match="components">
<!-- for Muenchian grouping of footprint and value combination -->
<xsl:for-each select="comp[count(. | key('partTypeByValueAndFootprint', concat(footprint, '-', value))[1]) = 1]">
<xsl:sort select="@ref" />
<xsl:text>&nl;</xsl:text>
<xsl:text>"</xsl:text><xsl:value-of select="value"/><xsl:text>","</xsl:text>
<!-- list of all references -->
<xsl:for-each select="key('partTypeByValueAndFootprint', concat(footprint, '-', value))">
<!-- strip non-digits from reference and sort based on remaining number -->
<xsl:sort select="translate(@ref, translate(@ref, $digits, ''), '')" data-type="number" />
<xsl:value-of select="@ref"/>
<xsl:if test="position() != last()"><xsl:text>,</xsl:text></xsl:if>
</xsl:for-each>
<xsl:text>","</xsl:text>
<xsl:value-of select="footprint"/><xsl:text>","</xsl:text>
<xsl:value-of select="fields/field[@name='LCSC']"/><xsl:text>"</xsl:text>
</xsl:for-each>
</xsl:template>
<!-- table entries with dynamic table head -->
<xsl:template match="fields">
<!-- remember current fields section -->
<xsl:variable name="fieldvar" select="field"/>
<!-- for all existing head entries -->
<xsl:for-each select="/export/components/comp/fields/field[generate-id(.) = generate-id(key('headentr',@name)[1])]">
<xsl:variable name="allnames" select="@name"/>
<xsl:text>,"</xsl:text>
<!-- for all field entries in the remembered fields section -->
<xsl:for-each select="$fieldvar">
<!-- only if this field entry exists in this fields section -->
<xsl:if test="@name=$allnames">
<!-- content of the field -->
<xsl:value-of select="."/>
</xsl:if>
<!--
If it does not exist, use an empty cell in output for this row.
Every non-blank entry is assigned to its proper column.
-->
</xsl:for-each>
<xsl:text>"</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View File

@@ -4,32 +4,67 @@
*/ */
#pragma once #pragma once
#include <cstdint>
#include <array>
#include "PINOUT.h" #include "PINOUT.h"
#include "CubeStack.h" #include "BoardTypes.h"
#include "Vector3D.h"
// define some important buffer sizes
static constexpr uint32_t SERIAL_ARG_LENGTH{15};
static constexpr uint32_t SERIAL_CHAR_LENGTH{SERIAL_ARG_LENGTH*10};
// define the physical dimensions of the board // define the physical dimensions of the board
#define BOARD_WIDTH 3 static constexpr uint32_t BOARD_WIDTH{3};
#define BOARD_LENGTH 3 static constexpr uint32_t BOARD_LENGTH{3};
#define BOARD_HEIGHT 3 static constexpr uint32_t BOARD_HEIGHT{3};
static constexpr V3D<uint32_t> BOARD_DIMENSIONS{BOARD_WIDTH, BOARD_LENGTH, BOARD_HEIGHT};
// define the number of stacks // define the number of stacks
#define NUMBER_STACKS BOARD_WIDTH * BOARD_LENGTH static constexpr uint32_t NUMBER_STACKS{BOARD_WIDTH * BOARD_LENGTH};
// define the CubeStacks // define the CubeStacks
CubeStack stack1(STACK1_ADC_PIN, STACK1_LED_PIN, BOARD_HEIGHT); static BOARD_TYPES::CubeStack stack1{
CubeStack stack2(STACK2_ADC_PIN, STACK2_LED_PIN, BOARD_HEIGHT); .adcPin=STACK1_ADC_PIN,
CubeStack stack3(STACK3_ADC_PIN, STACK3_LED_PIN, BOARD_HEIGHT); .ledPin=STACK1_LED_PIN
CubeStack stack4(STACK4_ADC_PIN, STACK4_LED_PIN, BOARD_HEIGHT); };
CubeStack stack5(STACK5_ADC_PIN, STACK5_LED_PIN, BOARD_HEIGHT); static BOARD_TYPES::CubeStack stack2{
CubeStack stack6(STACK6_ADC_PIN, STACK6_LED_PIN, BOARD_HEIGHT); .adcPin=STACK2_ADC_PIN,
CubeStack stack7(STACK7_ADC_PIN, STACK7_LED_PIN, BOARD_HEIGHT); .ledPin=STACK2_LED_PIN
CubeStack stack8(STACK8_ADC_PIN, STACK8_LED_PIN, BOARD_HEIGHT); };
CubeStack stack9(STACK9_ADC_PIN, STACK9_LED_PIN, BOARD_HEIGHT); static BOARD_TYPES::CubeStack stack3{
.adcPin=STACK3_ADC_PIN,
// define the array of stacks .ledPin=STACK3_LED_PIN
CubeStack * stacks[] = { };
&stack1, &stack2, &stack3, static BOARD_TYPES::CubeStack stack4{
&stack4, &stack5, &stack6, .adcPin=STACK4_ADC_PIN,
&stack7, &stack8, &stack9 .ledPin=STACK4_LED_PIN
};
static BOARD_TYPES::CubeStack stack5{
.adcPin=STACK5_ADC_PIN,
.ledPin=STACK5_LED_PIN
};
static BOARD_TYPES::CubeStack stack6{
.adcPin=STACK6_ADC_PIN,
.ledPin=STACK6_LED_PIN
};
static BOARD_TYPES::CubeStack stack7{
.adcPin=STACK7_ADC_PIN,
.ledPin=STACK7_LED_PIN
};
static BOARD_TYPES::CubeStack stack8{
.adcPin=STACK8_ADC_PIN,
.ledPin=STACK8_LED_PIN
};
static BOARD_TYPES::CubeStack stack9{
.adcPin=STACK9_ADC_PIN,
.ledPin=STACK9_LED_PIN
};
static std::array<BOARD_TYPES::CubeStack, NUMBER_STACKS> stacks{
stack1, stack2, stack3,
stack4, stack5, stack6,
stack7, stack8, stack9
}; };

13
include/COMMANDS.h Normal file
View File

@@ -0,0 +1,13 @@
#pragma once
#include <cstdint>
/**
* @brief These are the serial commands that the board supports
*/
enum Commands : uint8_t{
BoardState = 0,
PING = 1,
SetStackColors = 2,
GoToIdle = 3
};

View File

@@ -5,40 +5,47 @@
#pragma once #pragma once
#include <cstdint>
// Stack pins
// Stack 1 pins // Stack 1 pins
#define STACK1_ADC_PIN 34 static constexpr uint8_t STACK1_ADC_PIN{6};
#define STACK1_LED_PIN 5 static constexpr uint8_t STACK1_LED_PIN{11};
// Stack 2 pins // Stack 2 pins
#define STACK2_ADC_PIN 39 static constexpr uint8_t STACK2_ADC_PIN{16};
#define STACK2_LED_PIN 18 static constexpr uint8_t STACK2_LED_PIN{14};
// Stack 3 pins // Stack 3 pins
#define STACK3_ADC_PIN 36 static constexpr uint8_t STACK3_ADC_PIN{8};
#define STACK3_LED_PIN 19 static constexpr uint8_t STACK3_LED_PIN{45};
// Stack 4 pins // Stack 4 pins
#define STACK4_ADC_PIN 35 static constexpr uint8_t STACK4_ADC_PIN{5};
#define STACK4_LED_PIN 17 static constexpr uint8_t STACK4_LED_PIN{10};
// Stack 5 pins // Stack 5 pins
#define STACK5_ADC_PIN 32 static constexpr uint8_t STACK5_ADC_PIN{15};
#define STACK5_LED_PIN 16 static constexpr uint8_t STACK5_LED_PIN{13};
// Stack 6 pins // Stack 6 pins
#define STACK6_ADC_PIN 33 static constexpr uint8_t STACK6_ADC_PIN{18};
#define STACK6_LED_PIN 4 static constexpr uint8_t STACK6_LED_PIN{38};
// Stack 7 pins // Stack 7 pins
#define STACK7_ADC_PIN 25 static constexpr uint8_t STACK7_ADC_PIN{4};
#define STACK7_LED_PIN 0 static constexpr uint8_t STACK7_LED_PIN{9};
// Stack 8 pins // Stack 8 pins
#define STACK8_ADC_PIN 26 static constexpr uint8_t STACK8_ADC_PIN{7};
#define STACK8_LED_PIN 2 static constexpr uint8_t STACK8_LED_PIN{12};
// Stack 9 pins // Stack 9 pins
#define STACK9_ADC_PIN 27 static constexpr uint8_t STACK9_ADC_PIN{17};
#define STACK9_LED_PIN 15 static constexpr uint8_t STACK9_LED_PIN{37};
// Bluetooth module configuration pins
static constexpr uint8_t BT_STATE_PIN{2};
static constexpr uint8_t BT_EN_PIN{3};

80
include/Vector3D.h Normal file
View File

@@ -0,0 +1,80 @@
#pragma once
#include <cstdint>
#include <cmath>
template <typename Type>
class V3D{
public:
constexpr V3D(const V3D& other):
x(other.x),
y(other.y),
z(other.z){
static_assert(std::is_arithmetic<Type>::value, "Type must be a number");
}
constexpr V3D(Type x=0, Type y=0, Type z=0):
x(x),
y(y),
z(z){
static_assert(std::is_arithmetic<Type>::value, "Type must be a number");
}
template <typename OtherType>
constexpr V3D(const V3D<OtherType> other):
x(static_cast<Type>(other.x)),
y(static_cast<Type>(other.y)),
z(static_cast<Type>(other.z)){
static_assert(std::is_arithmetic<Type>::value, "Type must be a number");
static_assert(std::is_arithmetic<OtherType>::value, "OtherType must be a number");
}
V3D& operator=(const V3D &other){
this->x = other.x;
this->y = other.y;
this->z = other.z;
return *this;
}
V3D& operator+=(const V3D &other){
this->x += other.x;
this->y += other.y;
this->z += other.z;
return *this;
}
V3D& operator-=(const V3D &other){
this->x -= other.x;
this->y -= other.y;
this->z -= other.z;
return *this;
}
V3D& operator/=(const Type scalar){
if(scalar == 0){
return *this;
}
this->x /= scalar;
this->y /= scalar;
this->z /= scalar;
return *this;
}
V3D& operator*=(const Type scalar){
this->x *= scalar;
this->y *= scalar;
this->z *= scalar;
return *this;
}
bool operator==(const V3D &other){
return this->x == other.x && this->y == other.y && this->z == other.z;
}
float magnitude(){
return std::sqrt(static_cast<float>(this->x * this->x + this->y * this->y + this->z * this->z));
}
Type x;
Type y;
Type z;
};

252
lib/Animator/Animation.h Normal file
View File

@@ -0,0 +1,252 @@
#pragma once
#include "AnimationTypes.h"
#include "Vector3D.h"
#include "Animator.h"
using namespace ANIMATION_TYPES;
namespace AnimationHelpers{
V3D<uint8_t> red{255,0,0};
V3D<uint8_t> green{0,255,0};
V3D<uint8_t> blue{0,0,255};
V3D<uint8_t> cyan{0,255,255};
V3D<uint8_t> magenta{255,0,255};
Cell CreateCell(float x_percent, float y_percent, float z_percent, const V3D<uint8_t> &color){
float continuousMaxValue{static_cast<float>(std::numeric_limits<uint32_t>::max())};
Cell cell{
.position = V3D<uint32_t>{
static_cast<uint32_t>(continuousMaxValue*x_percent),
static_cast<uint32_t>(continuousMaxValue*y_percent),
static_cast<uint32_t>(continuousMaxValue*z_percent)
},
.color = color
};
return cell;
}
}
namespace RotatingCubes{
using namespace AnimationHelpers;
AnimationFrame frame1{
.frame = {
CreateCell(0,0,0,red),
CreateCell(1,0.5,0,green),
CreateCell(0,1,0,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(1000)
};
AnimationFrame frame2{
.frame = {
CreateCell(0,0.5,0,red),
CreateCell(1,0,0,green),
CreateCell(0.5,1,0,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(500)
};
AnimationFrame frame3{
.frame = {
CreateCell(0,1,0,red),
CreateCell(0.5,0,0,green),
CreateCell(1,1,0,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(1000)
};
AnimationFrame frame4{
.frame = {
CreateCell(0.5,1,0,red),
CreateCell(0,0,0,green),
CreateCell(1,0.5,0,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(500)
};
AnimationFrame frame5{
.frame = {
CreateCell(1,1,0,red),
CreateCell(0,0.5,0,green),
CreateCell(1,0,0,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(1000)
};
AnimationFrame frame6{
.frame = {
CreateCell(1,0.5,0,red),
CreateCell(0,1,0,green),
CreateCell(0.5,0,0,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(500)
};
AnimationFrame frame7{
.frame = {
CreateCell(1,0,0,red),
CreateCell(0.5,1,0,green),
CreateCell(0,0,0,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(1000)
};
AnimationFrame frame8{
.frame = {
CreateCell(0.5,0,0,red),
CreateCell(1,1,0,green),
CreateCell(0,0.5,0,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(500)
};
AnimationFrame frame9{
.frame = {
CreateCell(0,0,0,red),
CreateCell(1,0.5,0,green),
CreateCell(0,1,0,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(1)
};
std::vector<AnimationFrame> rotating{
frame1, // 0
frame2, // 1
frame3, // 2
frame4, // 3
frame5, // 4
frame6, // 5
frame7, // 6
frame8, // 7
frame9, // 8
};
}
namespace RisingCubes{
using namespace AnimationHelpers;
AnimationFrame frame1{
.frame = {
CreateCell(0,0,0,cyan),
CreateCell(0,1,0.5,green),
CreateCell(1,0,1,blue),
CreateCell(0.5,0.5,0.5,red),
CreateCell(1,1,0,magenta)
},
.fillInterpolation = FillInterpolation::LINEAR_WEIGHTED_DISTANCE,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(800)
};
AnimationFrame frame2{
.frame = {
CreateCell(0,0,0.5,cyan),
CreateCell(0,1,1,green),
CreateCell(1,0,0.5,blue),
CreateCell(0.5,0.5,0,red),
CreateCell(1,1,0.5,magenta)
},
.fillInterpolation = FillInterpolation::LINEAR_WEIGHTED_DISTANCE,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(800)
};
AnimationFrame frame3{
.frame = {
CreateCell(0,0,1,cyan),
CreateCell(0,1,0.5,green),
CreateCell(1,0,0,blue),
CreateCell(0.5,0.5,0.5,red),
CreateCell(1,1,1,magenta)
},
.fillInterpolation = FillInterpolation::LINEAR_WEIGHTED_DISTANCE,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(800)
};
AnimationFrame frame4{
.frame = {
CreateCell(0,0,0.5,cyan),
CreateCell(0,1,0,green),
CreateCell(1,0,0.5,blue),
CreateCell(0.5,0.5,1,red),
CreateCell(1,1,0.5,magenta)
},
.fillInterpolation = FillInterpolation::LINEAR_WEIGHTED_DISTANCE,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(800)
};
AnimationFrame frame5{
.frame = {
CreateCell(0,0,0,cyan),
CreateCell(0,1,0.5,green),
CreateCell(1,0,1,blue),
CreateCell(0.5,0.5,0.5,red),
CreateCell(1,1,0,magenta)
},
.fillInterpolation = FillInterpolation::LINEAR_WEIGHTED_DISTANCE,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(1)
};
AnimationFrame frame00{
.frame = {
CreateCell(0.0,0.0,1.0,V3D<uint8_t>(128.0,128.0,255.0)),
CreateCell(0.5,0.0,1.0,V3D<uint8_t>(128.0,128.0,255.0)),
CreateCell(1.0,0.0,0.0,V3D<uint8_t>(255.0,118.0,205.0)),
CreateCell(1.0,0.0,0.5,V3D<uint8_t>(255.0,118.0,205.0)),
CreateCell(1.0,0.0,1.0,V3D<uint8_t>(255.0,116.0,0.0)),
CreateCell(1.0,0.5,1.0,V3D<uint8_t>(183.0,0.0,255.0)),
CreateCell(1.0,1.0,1.0,V3D<uint8_t>(183.0,0.0,255.0))
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(1000)
};
AnimationFrame frame01{
.frame = {
CreateCell(0.0,0.0,1.0,V3D<uint8_t>(255.0,255.0,171.0)),
CreateCell(0.5,0.0,1.0,V3D<uint8_t>(255.0,255.0,171.0)),
CreateCell(1.0,0.0,0.0,V3D<uint8_t>(0.0,195.0,88.0)),
CreateCell(1.0,0.0,0.5,V3D<uint8_t>(0.0,195.0,88.0)),
CreateCell(1.0,0.0,1.0,V3D<uint8_t>(0.0,195.0,88.0)),
CreateCell(1.0,0.5,1.0,V3D<uint8_t>(112.0,222.0,255.0)),
CreateCell(1.0,1.0,1.0,V3D<uint8_t>(112.0,222.0,255.0))
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(1000)
};
std::vector<AnimationFrame> rising{
frame00, frame01, frame00
// frame1, // 0
// frame2, // 1
// frame3, // 2
// frame4, // 3
// frame5
};
}

View File

@@ -0,0 +1,33 @@
#pragma once
#include "Vector3D.h"
#include <vector>
#include <chrono>
namespace ANIMATION_TYPES{
// for cube spots which aren't defined in a key frame,
// you can have the controller automatically interpolate a color
enum FillInterpolation{
NO_FILL, // if not specified, the cube color will be black
CLOSEST_COLOR, // The cube color will be the same color as the cube closest to it
LINEAR_WEIGHTED_DISTANCE, // the cube color will be an average of all specified cube colors weighted by the linear distance to this cube
SQUARE_WEIGHTED_DISTANCE // same as linear, but further colors have exponentially less impact on the color
};
enum FrameInterpolation{
SNAP, // After the delay, snap to the next key frame
FADE // over the course of the delay, fade to the next frame
};
struct Cell{
V3D<uint32_t> position;
V3D<uint32_t> color;
};
// this contains all of the information to specify exactly how a single frame should look and fade to the next frame
struct AnimationFrame{
std::vector<Cell> frame;
FillInterpolation fillInterpolation;
FrameInterpolation frameInterpolation;
std::chrono::milliseconds delay;
};
};

293
lib/Animator/Animator.h Normal file
View File

@@ -0,0 +1,293 @@
#pragma once
#include <cstdint>
#include <array>
#include <vector>
#include <chrono>
#include <cstring>
#include <cmath>
#include <climits>
#include "Vector3D.h"
#include "AnimationTypes.h"
using namespace ANIMATION_TYPES;
template <const V3D<uint32_t> &BOARD_DIMS>
class Animator{
public:
typedef std::array<std::array<std::array<V3D<uint32_t>, BOARD_DIMS.z>, BOARD_DIMS.y>, BOARD_DIMS.x> Frame;
void StartAnimation(const std::vector<AnimationFrame> *animationSequence);
void RunAnimation(const std::chrono::milliseconds& timePassed);
void SetLoop(bool isLooping);
Frame &GetInterpolatedFrame(){return this->interpolatedFrame;}
bool isEnabled{true};
bool interpolatedFrameHasChanged{false};
private:
bool isLooping{true};
// these are the uncompressed frames you get by following the key colors and interpolation instructions of an animation frame
Frame startFrame;
Frame interpolatedFrame;
Frame endFrame;
std::chrono::milliseconds timeElapsed;
const std::vector<AnimationFrame> *animationSequence;
uint32_t animationIndex{0};
void incrimentAnimationIndex();
void uncompressFrame(const AnimationFrame &keyFrame, Frame &frameBuffer);
void copyFrame(Frame &copyFrom, Frame &copyTo){
std::memcpy(&copyTo, &copyFrom, sizeof(Frame));
}
V3D<uint32_t> getInterpolatedColor(const AnimationFrame &keyFrame, V3D<uint32_t> position);
V3D<uint32_t> keyFrame2BoardCoords(const V3D<uint32_t> &keyFramePosition);
V3D<uint32_t> noFillInterpolate(const AnimationFrame &keyFrame, V3D<uint32_t> position);
V3D<uint32_t> closestColorInterpolate(const AnimationFrame &keyFrame, V3D<uint32_t> position);
V3D<uint32_t> linearInterpolate(const AnimationFrame &keyFrame, V3D<uint32_t> position);
V3D<uint32_t> squareInterpolate(const AnimationFrame &keyFrame, V3D<uint32_t> position);
void PrintUncompressedFrame(){
for(uint32_t x = 0; x < BOARD_DIMS.x; x++){
for(uint32_t y = 0; y < BOARD_DIMS.y; y++){
for(uint32_t z = 0; z < BOARD_DIMS.z; z++){
auto color = this->startFrame[x][y][z];
Serial.print("Cube X:" + String(x) + ",Y:" + String(y) + ",Z:" + String(z));
Serial.println("\tColor R:" + String(color.x) + ",G:" + String(color.y) + ",B:" + String(color.z));
}
}
}
}
};
template <const V3D<uint32_t> &BOARD_DIMS>
void Animator<BOARD_DIMS>::StartAnimation(const std::vector<AnimationFrame> *animationSequence){
this->animationSequence = animationSequence;
this->animationIndex = 0;
this->timeElapsed = std::chrono::milliseconds(0);
if(animationSequence->size() == 0){
return;
}
else if(animationSequence->size() == 1){
AnimationFrame frame{((*this->animationSequence)[0])};
this->uncompressFrame(frame, this->startFrame);
this->copyFrame(this->startFrame, this->interpolatedFrame);
this->copyFrame(this->startFrame, this->endFrame);
}
else{
this->uncompressFrame((*this->animationSequence)[0], this->startFrame);
this->copyFrame(this->startFrame, this->interpolatedFrame);
this->uncompressFrame((*this->animationSequence)[1], this->endFrame);
}
this->interpolatedFrameHasChanged = true;
}
template <const V3D<uint32_t> &BOARD_DIMS>
void Animator<BOARD_DIMS>::RunAnimation(const std::chrono::milliseconds& timePassed){
if(!(this->isEnabled)){
return;
}
auto delayTime = (*this->animationSequence)[this->animationIndex].delay;
this->timeElapsed += timePassed;
// load in the next frame if we're done with this transition
if(this->timeElapsed >= delayTime){
this->incrimentAnimationIndex();
}
// don't do frame interpolations if we're doing snap fades
if((*this->animationSequence)[this->animationIndex].frameInterpolation == FrameInterpolation::SNAP){
return;
}
// linearly interpolate between the two uncompressed frames
for(uint32_t x = 0; x < BOARD_DIMS.x; x++){
for(uint32_t y = 0; y < BOARD_DIMS.y; y++){
for(uint32_t z = 0; z < BOARD_DIMS.z; z++){
V3D<float> startColor{this->startFrame[x][y][z]};
V3D<float> endColor{this->endFrame[x][y][z]};
V3D<float> difference{endColor};
difference -= startColor;
V3D<float> interpolatedColor{difference};
interpolatedColor *= this->timeElapsed.count();
interpolatedColor /= delayTime.count();
interpolatedColor += startColor;
this->interpolatedFrame[x][y][z] = interpolatedColor;
}
}
}
this->interpolatedFrameHasChanged = true;
}
template <const V3D<uint32_t> &BOARD_DIMS>
void Animator<BOARD_DIMS>::SetLoop(bool isLooping){
this->isLooping = isLooping;
}
template <const V3D<uint32_t> &BOARD_DIMS>
void Animator<BOARD_DIMS>::incrimentAnimationIndex(){
if(this->animationIndex < this->animationSequence->size() - 2){
this->animationIndex++;
this->timeElapsed = std::chrono::milliseconds(0);
this->uncompressFrame((*this->animationSequence)[this->animationIndex], this->startFrame);
this->copyFrame(this->startFrame, this->interpolatedFrame);
this->uncompressFrame((*this->animationSequence)[this->animationIndex + 1], this->endFrame);
}
else{
this->StartAnimation(this->animationSequence);
}
this->interpolatedFrameHasChanged = true;
}
template <const V3D<uint32_t> &BOARD_DIMS>
void Animator<BOARD_DIMS>::uncompressFrame(const AnimationFrame &keyFrame, Frame &frameBuffer){
for(uint32_t x = 0; x < BOARD_DIMS.x; x++){
for(uint32_t y = 0; y < BOARD_DIMS.y; y++){
for(uint32_t z = 0; z < BOARD_DIMS.z; z++){
frameBuffer[x][y][z] = getInterpolatedColor(keyFrame, V3D<uint32_t>(x, y, z));
}
}
}
}
template <const V3D<uint32_t> &BOARD_DIMS>
V3D<uint32_t> Animator<BOARD_DIMS>::getInterpolatedColor(const AnimationFrame &keyFrame, V3D<uint32_t> position){
switch(keyFrame.fillInterpolation){
case FillInterpolation::NO_FILL:
return noFillInterpolate(keyFrame, position);
case FillInterpolation::CLOSEST_COLOR:
return closestColorInterpolate(keyFrame, position);
case FillInterpolation::LINEAR_WEIGHTED_DISTANCE:
return linearInterpolate(keyFrame, position);
case FillInterpolation::SQUARE_WEIGHTED_DISTANCE:
return squareInterpolate(keyFrame, position);
default:
V3D<uint32_t> black{};
return black;
}
}
template <const V3D<uint32_t> &BOARD_DIMS>
V3D<uint32_t> Animator<BOARD_DIMS>::keyFrame2BoardCoords(const V3D<uint32_t> &keyFramePosition){
V3D<uint32_t> returnValue{};
float maxValue{static_cast<float>(std::numeric_limits<uint32_t>::max())};
// scale the key frame values down to be within board coordinates
float keyFrame_X = static_cast<float>(BOARD_DIMS.x - 1) * static_cast<float>(keyFramePosition.x) / maxValue;
float keyFrame_Y = static_cast<float>(BOARD_DIMS.y - 1) * static_cast<float>(keyFramePosition.y) / maxValue;
float keyFrame_Z = static_cast<float>(BOARD_DIMS.z - 1) * static_cast<float>(keyFramePosition.z) / maxValue;
// carefully quantize the float values back into ints with a precise rounding operation
if(keyFrame_X - std::floor(keyFrame_X) < 0.5f){
returnValue.x = static_cast<uint32_t>(keyFrame_X);
}
else{
returnValue.x = static_cast<uint32_t>(keyFrame_X) + 1;
}
if(keyFrame_Y - std::floor(keyFrame_Y) < 0.5f){
returnValue.y = static_cast<uint32_t>(keyFrame_Y);
}
else{
returnValue.y = static_cast<uint32_t>(keyFrame_Y) + 1;
}
if(keyFrame_Z - std::floor(keyFrame_Z) < 0.5f){
returnValue.z = static_cast<uint32_t>(keyFrame_Z);
}
else{
returnValue.z = static_cast<uint32_t>(keyFrame_Z) + 1;
}
return returnValue;
}
template <const V3D<uint32_t> &BOARD_DIMS>
V3D<uint32_t> Animator<BOARD_DIMS>::noFillInterpolate(const AnimationFrame &keyFrame, V3D<uint32_t> position){
V3D<uint32_t> returnColor{};
for(Cell cell : keyFrame.frame){
if(keyFrame2BoardCoords(cell.position) == position){
returnColor = cell.color;
}
}
return returnColor;
}
template <const V3D<uint32_t> &BOARD_DIMS>
V3D<uint32_t> Animator<BOARD_DIMS>::closestColorInterpolate(const AnimationFrame &keyFrame, V3D<uint32_t> cubePosition){
V3D<uint32_t> returnColor{keyFrame.frame[0].color};
V3D<uint32_t> distance{keyFrame.frame[0].position};
distance -= cubePosition;
float closestDistance = distance.magnitude();
for(Cell cell : keyFrame.frame){
distance = keyFrame2BoardCoords(cell.position);
distance -= cubePosition;
float euclidDistance = distance.magnitude();
if(euclidDistance < closestDistance){
returnColor = cell.color;
closestDistance = euclidDistance;
}
}
return returnColor;
}
template <const V3D<uint32_t> &BOARD_DIMS>
V3D<uint32_t> Animator<BOARD_DIMS>::linearInterpolate(const AnimationFrame &keyFrame, V3D<uint32_t> position){
V3D<uint32_t> returnColor{};
for(Cell cell : keyFrame.frame){
V3D<uint32_t> vectorDistance{keyFrame2BoardCoords(cell.position)};
vectorDistance -= position;
float distance = vectorDistance.magnitude();
if(distance == 0) return cell.color;
returnColor += cell.color;
returnColor /= distance;
}
returnColor /= keyFrame.frame.size();
return returnColor;
}
template <const V3D<uint32_t> &BOARD_DIMS>
V3D<uint32_t> Animator<BOARD_DIMS>::squareInterpolate(const AnimationFrame &keyFrame, V3D<uint32_t> position){
V3D<uint32_t> returnColor{};
for(Cell cell : keyFrame.frame){
V3D<uint32_t> vectorDistance{keyFrame2BoardCoords(cell.position)};
vectorDistance -= position;
uint32_t distance = static_cast<uint32_t>(vectorDistance.magnitude());
distance *= distance;
if(distance == 0) return cell.color;
returnColor += cell.color;
returnColor /= distance;
}
returnColor /= keyFrame.frame.size();
return returnColor;
}

169
lib/Animator/TestFrames.h Normal file
View File

@@ -0,0 +1,169 @@
#pragma once
#include "AnimationTypes.h"
#include "Vector3D.h"
#include "Animator.h"
using namespace ANIMATION_TYPES;
namespace TestFrames{
V3D<uint32_t> red{255,0,0};
V3D<uint32_t> green{0,255,0};
V3D<uint32_t> blue{0,0,255};
uint32_t maxValue{std::numeric_limits<uint32_t>::max()};
Cell CreateCell(float x_percent, float y_percent, float z_percent, V3D<uint32_t> &color){
float continuousMaxValue{static_cast<float>(std::numeric_limits<uint32_t>::max())};
Cell cell{
.position = V3D<uint32_t>{
static_cast<uint32_t>(continuousMaxValue*x_percent),
static_cast<uint32_t>(continuousMaxValue*y_percent),
static_cast<uint32_t>(continuousMaxValue*z_percent)
},
.color = color
};
return cell;
}
AnimationFrame noFillFrame{
.frame = {
CreateCell(0,0,0,red),
CreateCell(0.5,0.5,0.5,green),
CreateCell(1,1,1,blue)
},
.fillInterpolation = FillInterpolation::NO_FILL,
.frameInterpolation = FrameInterpolation::SNAP,
.delay = std::chrono::milliseconds(10000)
};
AnimationFrame closestColorFrame{
.frame = {
CreateCell(0,0,0,red),
CreateCell(0.5,0.5,0.5,green),
CreateCell(1,1,1,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::SNAP,
.delay = std::chrono::milliseconds(10000)
};
AnimationFrame linearFillFrame{
.frame = {
CreateCell(0,0,0,red),
CreateCell(0.5,0.5,0.5,green),
CreateCell(1,1,1,blue)
},
.fillInterpolation = FillInterpolation::LINEAR_WEIGHTED_DISTANCE,
.frameInterpolation = FrameInterpolation::SNAP,
.delay = std::chrono::milliseconds(10000)
};
AnimationFrame squareFillFrame{
.frame = {
CreateCell(0,0,0,red),
CreateCell(0.5,0.5,0.5,green),
CreateCell(1,1,1,blue)
},
.fillInterpolation = FillInterpolation::SQUARE_WEIGHTED_DISTANCE,
.frameInterpolation = FrameInterpolation::SNAP,
.delay = std::chrono::milliseconds(10000)
};
AnimationFrame noFillFadeFrame{
.frame = {
CreateCell(0,0,0,red),
CreateCell(0.5,0.5,0.5,green),
CreateCell(1,1,1,blue)
},
.fillInterpolation = FillInterpolation::NO_FILL,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(10000)
};
AnimationFrame closestColorFadeFrame{
.frame = {
CreateCell(0,0,0,red),
CreateCell(0.5,0.5,0.5,green),
CreateCell(1,1,1,blue)
},
.fillInterpolation = FillInterpolation::CLOSEST_COLOR,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(10000)
};
AnimationFrame linearFillFadeFrame{
.frame = {
CreateCell(0,0,0,red),
CreateCell(0.5,0.5,0.5,green),
CreateCell(1,1,1,blue)
},
.fillInterpolation = FillInterpolation::LINEAR_WEIGHTED_DISTANCE,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(10000)
};
AnimationFrame squareFillFadeFrame{
.frame = {
CreateCell(0,0,0,red),
CreateCell(0.5,0.5,0.5,green),
CreateCell(1,1,1,blue)
},
.fillInterpolation = FillInterpolation::SQUARE_WEIGHTED_DISTANCE,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(10000)
};
std::vector<AnimationFrame> testAnimationSequence2{
noFillFrame, // 0
closestColorFrame, // 1
linearFillFrame, // 2
squareFillFrame, // 3
noFillFadeFrame, // 4
closestColorFadeFrame, // 5
linearFillFadeFrame, // 6
squareFillFadeFrame, // 7
noFillFrame // 8
};
AnimationFrame testFrame1{
.frame = {
CreateCell(0,0,0,red),
// CreateCell(0.5,0.5,0,green),
CreateCell(1,1,0,blue)
},
.fillInterpolation = FillInterpolation::NO_FILL,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(10000)
};
AnimationFrame testFrame2{
.frame = {
CreateCell(0,1,0,red),
// CreateCell(0.5,0.5,0,green),
CreateCell(1,0,0,green)
},
.fillInterpolation = FillInterpolation::NO_FILL,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(10000)
};
AnimationFrame testFrame3{
.frame = {
CreateCell(0.5,0.5,0,red),
// CreateCell(0.5,0.5,0,green),
CreateCell(0,1,0,blue)
},
.fillInterpolation = FillInterpolation::NO_FILL,
.frameInterpolation = FrameInterpolation::FADE,
.delay = std::chrono::milliseconds(10000)
};
std::vector<AnimationFrame> testAnimationSequence1{
testFrame1,
testFrame2,
testFrame3,
testFrame1
};
}

205
lib/Board/Board.h Normal file
View File

@@ -0,0 +1,205 @@
/**
* @file Board.h
* @brief The Board class is meant to store data about each cube on the board and
* provide an easy way to organize and access that data in a 3-dimensional context.
*/
#pragma once
#include <cstdint>
#include <array>
#include <WString.h>
#include "BoardTypes.h"
#include "Vector3D.h"
template <const V3D<uint32_t> &BOARD_DIMS>
class Board{
public:
Board() = default;
~Board() = default;
constexpr const V3D<uint32_t> &GetSize() const{return BOARD_DIMS;}
constexpr uint32_t GetNumberCubes() const{return BOARD_DIMS.x * BOARD_DIMS.y * BOARD_DIMS.z;}
constexpr uint32_t GetMaxDimension(){return std::max(std::max(BOARD_DIMS.x, BOARD_DIMS.y), BOARD_DIMS.z);}
/**
* @brief Returns a string in the format:
* !a,b,c,d,e,f,g,h,i;
* Where each letter is the number of cubes in a given position's stack
* @param stringBuffer the buffer to write the string into
*/
void ToStackString(String& stringBuffer) const;
/**
* @brief fill the entire board with the given color
* @param color the color to fill the board with
*/
void FillColor(const V3D<uint32_t> &color);
/**
* @brief Set the color of the cube at the given position.
* Even if the cube is not occupied, it will remember this color
* and turn that color if it becomes occupied.
* @param position the position of the cube.
* @param color the color you want the cube to be
*/
void SetCubeColor(const V3D<uint32_t> &position, const V3D<uint32_t> &color);
/**
* @brief Set the occupation status of the cube at a given position
* @param position the position of the cube
* @param the occupation status of the cube
* @post if the new occupation status of the cube is different than
* the old occupation status, this will enable boardStateHasChanged.
*/
void SetCubeOccupation(const V3D<uint32_t> &position, bool occupation);
/**
* @returns true if the board state has changed since this flag was last set to false
*/
bool BoardStateChanged(){return this->boardStateHasChanged;}
/**
* @brief set the board state status.
* @note you should probably only use this to clear the baordState flag
*/
void SetStateChanged(bool boardState){this->boardStateHasChanged = boardState;}
/**
* @brief Get a column along any axis read into the sliceBuffer
* @param column .z specifies the normal direction of the plane (see PLANE_NORMAL), and
* the x,y values specify the location of the column in that plane
* to fill. IE To fill one stack at 0,2 I would say give V3D<uint32_t>(0,2,PLANE_NORMAL::Z)
* @param sliceBuffer an array of pointers to the cubes along that column
* @returns the number of elements written into the slice buffer
* @note That array is stored locally and will be overwritten everytime this function is called.
* Also, any unused spots at the end of the array will be nullptrs
* @warning allocate the size of the slice buffer using GetMaxDimension if you don't know what you're doing!
*/
uint32_t SliceBoard(const V3D<uint32_t> &column, BOARD_TYPES::Cube ** sliceBuffer);
void PrintEntireBoard() const;
void UpdateAllColors(const std::array<std::array<std::array<V3D<uint32_t>, BOARD_DIMS.z>, BOARD_DIMS.y>, BOARD_DIMS.x>& colorFrame){
for(uint32_t x = 0; x < BOARD_DIMS.x; x++){
for(uint32_t y = 0; y < BOARD_DIMS.y; y++){
for(uint32_t z = 0; z < BOARD_DIMS.z; z++){
this->cubes[x][y][z].color = colorFrame[x][y][z];
}
}
}
}
private:
// this is a 3d array of cubes to represent the board. Good luck visualizing it
/* _____________
/ /|
/ / |
/ / |
/____________/ |
| | |
| | /
| | /
|____________|/
*/
std::array<std::array<std::array<BOARD_TYPES::Cube, BOARD_DIMS.z>, BOARD_DIMS.y>, BOARD_DIMS.x> cubes;
bool boardStateHasChanged;
};
template <const V3D<uint32_t> &BOARD_DIMS>
void Board<BOARD_DIMS>::ToStackString(String &stringBuffer) const{
std::array<uint32_t, BOARD_DIMS.x * BOARD_DIMS.y> linearizedBoard;
for(uint32_t x{0}; x < BOARD_DIMS.x; x++){
for(uint32_t y{0}; y < BOARD_DIMS.y; y++){
uint32_t boardIndex{x + y*3};
linearizedBoard[boardIndex] = 0;
for(uint32_t z{0}; z < BOARD_DIMS.z; z++){
linearizedBoard[boardIndex] += this->cubes[x][y][z].isOccupied;
}
}
}
stringBuffer += String(linearizedBoard[0]);
for(uint32_t i = 1; i < BOARD_DIMS.x * BOARD_DIMS.y; i++){
stringBuffer += "," + String(linearizedBoard[i]);
}
}
template <const V3D<uint32_t> &BOARD_DIMS>
void Board<BOARD_DIMS>::FillColor(const V3D<uint32_t> &color){
for(uint32_t x{0}; x < BOARD_DIMS.x; x++){
for(uint32_t y{0}; y < BOARD_DIMS.y; y++){
for(uint32_t z{0}; z < BOARD_DIMS.z; z++){
this->cubes[x][y][z].color = color;
}
}
}
}
template <const V3D<uint32_t> &BOARD_DIMS>
void Board<BOARD_DIMS>::SetCubeColor(const V3D<uint32_t> &position, const V3D<uint32_t> &color){
this->cubes[position.x][position.y][position.z].color = color;
}
template <const V3D<uint32_t> &BOARD_DIMS>
void Board<BOARD_DIMS>::SetCubeOccupation(const V3D<uint32_t> &position, bool occupation){
bool oldOccupation{this->cubes[position.x][position.y][position.z].isOccupied};
this->cubes[position.x][position.y][position.z].isOccupied = occupation;
if(occupation != oldOccupation) this->boardStateHasChanged = true;
}
template <const V3D<uint32_t> &BOARD_DIMS>
uint32_t Board<BOARD_DIMS>::SliceBoard(const V3D<uint32_t> &column, BOARD_TYPES::Cube ** sliceBuffer){
uint32_t columnLength{0};
V3D<uint32_t> indexIncrimentVector{};
V3D<uint32_t> indexVector{};
switch(column.z){
case BOARD_TYPES::PLANE_NORMAL::X:
columnLength = BOARD_DIMS.x;
indexIncrimentVector.x = 1;
indexVector.z = column.x;
indexVector.y = column.y;
break;
case BOARD_TYPES::PLANE_NORMAL::Y:
columnLength = BOARD_DIMS.y;
indexIncrimentVector.y = 1;
indexVector.x = column.x;
indexVector.z = column.y;
break;
default:
case BOARD_TYPES::PLANE_NORMAL::Z:
columnLength = BOARD_DIMS.z;
indexIncrimentVector.z = 1;
indexVector.x = column.x;
indexVector.y = column.y;
break;
}
for(uint32_t i = 0; i < columnLength; i++){
if(indexVector.x >= BOARD_DIMS.x || indexVector.y >= BOARD_DIMS.y || indexVector.z >= BOARD_DIMS.z){
Serial.println("Board::SliceBoard: Index Out of Bounds:" + String(indexVector.x) + "," + String(indexVector.y) + "," + String(indexVector.z));
return 0;
}
sliceBuffer[i] = &(this->cubes[indexVector.x][indexVector.y][indexVector.z]);
indexVector += indexIncrimentVector;
}
return columnLength;
}
template <const V3D<uint32_t> &BOARD_DIMS>
void Board<BOARD_DIMS>::PrintEntireBoard() const{
for(uint32_t x = 0; x < BOARD_DIMS.x; x++){
for(uint32_t y = 0; y < BOARD_DIMS.y; y++){
for(uint32_t z = 0; z < BOARD_DIMS.z; z++){
const BOARD_TYPES::Cube &cube = this->cubes[x][y][z];
Serial.print("Cube X:" + String(x) + ",Y:" + String(y) + ",Z:" + String(z));
Serial.print("\tColor R:" + String(cube.color.x) + ",G:" + String(cube.color.y) + ",B:" + String(cube.color.z));
Serial.println("\tOccupied? " + String(cube.isOccupied));
}
}
}
}

187
lib/Board/BoardDriver.h Normal file
View File

@@ -0,0 +1,187 @@
/**
* @file BoardDriver.h
* @brief the board driver provides helpful methods to read the physical board's state,
* filter those results, and send color data to the board
*/
#pragma once
#include <cstdint>
#include <array>
#include <Adafruit_NeoPixel.h>
#include <Arduino.h>
#include "BoardTypes.h"
#include "BoardTypes.h"
template <uint32_t NUM_STACKS>
class BoardDriver{
public:
/**
* @param stacks a reference to an array which contains information about the pins which control each cube stack.
* @param pixelController a reference to a pre-constructed neopixel controller which will allow this driver to control neopixels
*/
BoardDriver(
std::array<BOARD_TYPES::CubeStack, NUM_STACKS> &stacks,
Adafruit_NeoPixel &pixelController
);
~BoardDriver() = default;
/**
* @brief Initializes all of the pins necessary to read/write to the board
*/
void Init();
/**
* @param numXStacks the width of the board along the x dimension.
* @param X_COORD the x coordinate of the stack you want information about
* @param Y_COORD the y coordinate of the stack you want information about
* @returns Get the number of cubes present in a stack
*/
uint32_t GetNumberCubes(uint32_t numXStacks, uint32_t X_COORD, uint32_t Y_COORD);
/**
* @param stackIndex the index of the stack that you want to know the height of
* @returns Get the number of cubes present in a stack
*/
uint32_t GetNumberCubes(uint32_t stackIndex);
/**
* @brief stream data to a single cube stack on the board
* @param numXStacks the width of the board along the x dimension.
* @param X_COORD the x coordinate of the stack you want information about
* @param Y_COORD the y coordinate of the stack you want information about
* @param cubes an array of cube pointers which contain the color data you want to stream
* @param numCubes the number of cubes in the cubes array
*/
void UpdateStackLEDs(
uint32_t numXStacks,
uint32_t X_COORD,
uint32_t Y_COORD,
BOARD_TYPES::Cube* cubes[],
uint32_t numCubes
);
/**
* @brief stream data to a single cube stack on the board
* @param stackIndex the index of the stack you want to update the color of
* @param cubes an array of cube pointers which contain the color data you want to stream
* @param numCubes the number of cubes in the cubes array
*/
void UpdateStackLEDs(
uint32_t stackIndex,
BOARD_TYPES::Cube* cubes[],
uint32_t numCubes
);
private:
std::array<BOARD_TYPES::CubeStack, NUM_STACKS> &stacks;
Adafruit_NeoPixel &pixelController;
std::array<uint16_t, NUM_STACKS> filteredReadings;
uint32_t xy2StackIndex(uint32_t x_coord, uint32_t y_coord, uint32_t numXStacks){
return x_coord + y_coord*numXStacks;
}
};
template<uint32_t NUM_STACKS>
void BoardDriver<NUM_STACKS>::Init(){
for(uint32_t i = 0; i < NUM_STACKS; i++){
pinMode(this->stacks[i].ledPin, OUTPUT);
filteredReadings[i] = 0;
}
// begin doesn't really do anything besides setting the pinmode
this->pixelController.begin();
}
template<uint32_t NUM_STACKS>
BoardDriver<NUM_STACKS>::BoardDriver(
std::array<BOARD_TYPES::CubeStack, NUM_STACKS> &stacks,
Adafruit_NeoPixel &pixelController
):
stacks(stacks),
pixelController(pixelController)
{
for(uint32_t i = 0; i < NUM_STACKS; i++){
this->filteredReadings[i] = 0;
}
}
template<uint32_t NUM_STACKS>
void BoardDriver<NUM_STACKS>::UpdateStackLEDs(
uint32_t numXStacks,
uint32_t X_COORD,
uint32_t Y_COORD,
BOARD_TYPES::Cube* cubes[],
uint32_t numCubes
){
this->UpdateStackLEDs(this->xy2StackIndex(X_COORD, Y_COORD, numXStacks), cubes, numCubes);
}
template<uint32_t NUM_STACKS>
void BoardDriver<NUM_STACKS>::UpdateStackLEDs(
uint32_t stackIndex,
BOARD_TYPES::Cube* cubes[],
uint32_t numCubes
){
this->pixelController.setPin(this->stacks[stackIndex].ledPin);
for(int i = 0; i < numCubes; i++){
V3D<uint32_t> color{cubes[i]->color};
this->pixelController.setPixelColor(i*2, this->pixelController.Color(color.x, color.y, color.z));
this->pixelController.setPixelColor((i*2 + 1), this->pixelController.Color(color.x, color.y, color.z));
}
this->pixelController.show();
}
template<uint32_t NUM_STACKS>
uint32_t BoardDriver<NUM_STACKS>::GetNumberCubes(
uint32_t numXStacks,
uint32_t X_COORD,
uint32_t Y_COORD
){
return this->GetNumberCubes(this->xy2StackIndex(X_COORD, Y_COORD, numXStacks));
}
template<uint32_t NUM_STACKS>
uint32_t BoardDriver<NUM_STACKS>::GetNumberCubes(uint32_t stackIndex){
// read the ADC and return the number of cubes
/*
0 cubes: 1 : 4095-3400
1 cube: 1/2 3400-2500
2 cubes: 1/3 2500-1850
3 cubes: 1/4 1850-0
*/
uint16_t value = analogRead(this->stacks[stackIndex].adcPin);
uint16_t lowPassADCRead =
static_cast<uint16_t>(
(static_cast<float>(this->filteredReadings[stackIndex]) * 0.9)
+ (static_cast<float>(value) * 0.1)
);
// temporary definitions to define value ranges:
uint16_t zeroCubesHigh = 4095;
uint16_t zeroCubesLow = 3400;
uint16_t oneCubeLow = 2500;
uint16_t twoCubesLow = 1850;
uint16_t threeCubesLow = 0;
uint8_t stackHeight = 0;
if(lowPassADCRead >= zeroCubesLow && lowPassADCRead <= zeroCubesHigh){
stackHeight = 0;
}
else if(lowPassADCRead >= oneCubeLow){
stackHeight = 1;
}
else if(lowPassADCRead >= twoCubesLow){
stackHeight = 2;
}
else if(lowPassADCRead >= threeCubesLow){
stackHeight = 3;
}
this->filteredReadings[stackIndex] = lowPassADCRead;
return stackHeight;
}

View File

@@ -1,38 +0,0 @@
#include "BoardLayout.h"
uint8_t BoardLayout::GetNumberStacks(){
return this->boardWidth * this->boardHeight;
}
void BoardLayout::SetStackColors(uint8_t stackNum, Color * colors){
CubeStack * stack = this->stacks[stackNum];
stack->SetLEDColors(colors, this->boardHeight);
}
bool BoardLayout::BoardStateHasChanged(){
uint16_t boardState[this->boardWidth * this->boardLength];
this->GetBoardState(boardState);
// compare the board state to the last board state
for(int i = 0; i < (this->boardWidth * this->boardLength); i++){
uint16_t stackState = boardState[i];
uint16_t lastStackState = (this->lastBoardState)[i];
if(stackState != lastStackState){
// copy the board state into the last board state
for(int k = 0; k < (this->boardWidth * this->boardLength); k++){
this->lastBoardState[k] = boardState[k];
}
return true;
}
}
return false;
}
void BoardLayout::GetBoardState(uint16_t * boardStateBuffer){
for(int i = 0; i < (this->boardLength * this->boardWidth); i++){
CubeStack * stack = this->stacks[i];
stack->SendLEDData(); // Enable this if you want to constantly stream LED data
boardStateBuffer[i] = stack->GetNumberCubes();
}
}

View File

@@ -1,69 +0,0 @@
/**
* @brief This is the full board manager which handles the state of every stack on the board
*/
#pragma once
#include "CubeStack.h"
#include "Color.h"
class BoardLayout{
public:
/**
* @brief BoardLayout COnstructor
*/
BoardLayout(uint8_t boardWidth, uint8_t boardLength, uint8_t boardHeight, CubeStack ** stacks) :
boardWidth(boardWidth),
boardLength(boardLength),
boardHeight(boardHeight),
stacks(stacks)
{
this->lastBoardState = new uint16_t[boardWidth * boardLength];
}
/**
* @brief Check if our board state has changed
* @return true if the board state has changed, false otherwise
*/
bool BoardStateHasChanged();
/**
* @brief Get the Number of Stacks
* @return the number of stacks
*/
uint8_t GetNumberStacks();
/**
* @brief Set the LED Colors
* @param stackNum the stack index you would like to address.
* From top left to bottom right, the stack numbers are as follows:
* | 0 1 2 |
* | 3 4 5 |
* | 6 7 8 |
* @param Colors the array of colors to set the LEDs in a stack to
*/
void SetStackColors(uint8_t stackNum, Color * colors);
/**
* @brief Get the board population state
* @param boardStateBuffer the buffer to write the board state to. It must be at least boardWidth * boardLength in length
*/
void GetBoardState(uint16_t * boardStateBuffer);
private:
uint8_t boardWidth;
uint8_t boardLength;
uint8_t boardHeight;
/*
An array of arrays of stacks
[ [stack1, stack2, stack3],
[stack4, stack5, stack6],
[stack7, stack8, stack9] ]
etc
*/
CubeStack ** stacks;
// records the last known board state
uint16_t * lastBoardState;
};

197
lib/Board/BoardManager.h Normal file
View File

@@ -0,0 +1,197 @@
/**
* @file BoardManager.h
* @brief Provides an easy way to manage a board
*/
#pragma once
#include "Board.h"
#include "BoardDriver.h"
#include "Vector3D.h"
#include "Animator.h"
template <const V3D<uint32_t> &BOARD_DIMS>
class BoardManager{
public:
BoardManager(BoardDriver<BOARD_WIDTH*BOARD_LENGTH> &boardDriver, Animator<BOARD_DIMS> &animator);
~BoardManager() = default;
/**
* @brief Initialize the board control. This hsould be called during setup
*/
void Init();
/**
* @brief Read the board state and update the LED colors
*/
void Update();
/**
* @brief Set the color of one cube
* @param position the position of the cube
* @param color the oclor you want the cube to be
*/
void SetCubeColor(const V3D<uint32_t> &position, const V3D<uint32_t> &color);
/**
* @brief Set the color of one column of cubes.
* A column is defined as x,y,z where z is the normal vector direction to a plane.
* x,y is the column coordinate on the plane.
* @param column the column vector
* @param color the color you want the column to be
*/
void SetColumnColors(const V3D<uint32_t> &column, const V3D<uint32_t> *color, uint32_t numColors);
/**
* @brief Fill a column along any axis with a color
* @param column .z specifies the normal direction of the plane (see PLANE_NORMAL), and
* the x,y values specify the location of the column in that plane
* to fill. IE To fill one stack at 0,2 I would say give V3D<uint32_t>(0,2,PLANE_NORMAL::Z)
* @param color the color you want to fill the column with
*/
void FillColumnColor(const V3D<uint32_t> &column, const V3D<uint32_t> &color);
/**
* @returns true if the board has changed state
*/
bool HasBoardChanged();
/**
* @brief Clear the board state changed flag
*/
void ClearBoardChanged();
/**
* @brief Get the board occupation state returned in the format a,b,c,d....
*/
void Board2StackString(String& messageBuffer);
void FillColor(const V3D<uint32_t> &color){this->board.FillColor(color);}
void PrintColorState(){this->board.PrintEntireBoard();}
private:
BoardDriver<BOARD_WIDTH*BOARD_LENGTH> &driver;
Board<BOARD_DIMS> board{};
Animator<BOARD_DIMS> &animator;
void updateStackColors(const V3D<uint32_t> &column);
uint32_t getColumnHeight(BOARD_TYPES::PLANE_NORMAL normal){
switch(normal){
case BOARD_TYPES::PLANE_NORMAL::X:
return BOARD_DIMS.x;
break;
case BOARD_TYPES::PLANE_NORMAL::Y:
return BOARD_DIMS.y;
break;
case BOARD_TYPES::PLANE_NORMAL::Z:
return BOARD_DIMS.z;
break;
default:
return 0;
}
}
void updateColorsFromAnimator();
};
template <const V3D<uint32_t> &BOARD_DIMS>
void BoardManager<BOARD_DIMS>::updateColorsFromAnimator(){
if(this->animator.interpolatedFrameHasChanged){
this->board.UpdateAllColors(this->animator.GetInterpolatedFrame());
this->animator.interpolatedFrameHasChanged = false;
}
}
template <const V3D<uint32_t> &BOARD_DIMS>
BoardManager<BOARD_DIMS>::BoardManager(BoardDriver<BOARD_WIDTH*BOARD_LENGTH> &boardDriver, Animator<BOARD_DIMS> &animator):
driver(boardDriver),
animator(animator){}
template <const V3D<uint32_t> &BOARD_DIMS>
void BoardManager<BOARD_DIMS>::Init(){
this->driver.Init();
}
template <const V3D<uint32_t> &BOARD_DIMS>
void BoardManager<BOARD_DIMS>::Update(){
this->updateColorsFromAnimator();
// update the occupied cubes on the board and the cube colors
for(uint32_t x = 0; x < BOARD_DIMS.x; x++){
for(uint32_t y = 0; y < BOARD_DIMS.y; y++){
uint32_t stackIndex{y * BOARD_DIMS.x + x};
uint32_t numCubes{this->driver.GetNumberCubes(stackIndex)};
for(uint32_t z = 0; z < BOARD_DIMS.z; z++){
V3D<uint32_t> cubePosition{x, y, z};
// update the cube's occupation
this->board.SetCubeOccupation(cubePosition, z < numCubes);
}
// create the column vector for the slice direction
V3D<uint32_t> sliceVector{x,y,BOARD_TYPES::PLANE_NORMAL::Z};
// create a cube slice array buffer
BOARD_TYPES::Cube* sliceBuffer[BOARD_DIMS.z];
// have the board slice get read into our buffer
this->board.SliceBoard(sliceVector, sliceBuffer);
// send the board slice to the driver to update its LED colors
this->driver.UpdateStackLEDs(stackIndex, sliceBuffer, BOARD_DIMS.z);
}
}
}
template <const V3D<uint32_t> &BOARD_DIMS>
void BoardManager<BOARD_DIMS>::updateStackColors(const V3D<uint32_t> &column){
// the only column type allowed here is z.
V3D<uint32_t> sliceVector{column.x, column.y, BOARD_TYPES::Z};
// create a buffer for slice board to write the cube slice into
BOARD_TYPES::Cube * cubeSlice[BOARD_DIMS.z];
this->board.SliceBoard(column, cubeSlice);
uint32_t numCubes{this->getColumnHeight(static_cast<BOARD_TYPES::PLANE_NORMAL>(column.z))};
this->driver.UpdateStackLEDs(BOARD_DIMS.x, cubeSlice, numCubes);
}
template <const V3D<uint32_t> &BOARD_DIMS>
void BoardManager<BOARD_DIMS>::SetCubeColor(const V3D<uint32_t> &position, const V3D<uint32_t> &color){
this->board.SetCubeColor(position, color);
V3D<uint32_t> slice{position.x, position.y, BOARD_TYPES::PLANE_NORMAL::Z};
this->updateStackColors(slice);
}
template <const V3D<uint32_t> &BOARD_DIMS>
void BoardManager<BOARD_DIMS>::SetColumnColors(const V3D<uint32_t> &column, const V3D<uint32_t> *color, uint32_t numColors){
uint32_t columnHeight{this->getColumnHeight(static_cast<BOARD_TYPES::PLANE_NORMAL>(column.z))};
// create a cube pointer buffer and store a board slice into it
BOARD_TYPES::Cube * slicedBoard[columnHeight];
uint32_t sliceLength{this->board.SliceBoard(column, slicedBoard)};
uint32_t maxIndex{std::min(numColors, columnHeight)};
for(uint32_t i = 0; i < maxIndex; i++){
slicedBoard[i]->color = color[i];
}
}
template <const V3D<uint32_t> &BOARD_DIMS>
void BoardManager<BOARD_DIMS>::FillColumnColor(const V3D<uint32_t> &column, const V3D<uint32_t> &color){
uint32_t columnHeight{this->getColumnHeight(column.z)};
V3D<uint32_t> colors[columnHeight];
for(uint32_t i = 0; i < columnHeight; i++){
colors[i] = color;
}
this->SetColumnColors(column, colors);
}
template <const V3D<uint32_t> &BOARD_DIMS>
bool BoardManager<BOARD_DIMS>::HasBoardChanged(){return this->board.BoardStateChanged();}
template <const V3D<uint32_t> &BOARD_DIMS>
void BoardManager<BOARD_DIMS>::ClearBoardChanged(){this->board.SetStateChanged(false);}
template <const V3D<uint32_t> &BOARD_DIMS>
void BoardManager<BOARD_DIMS>::Board2StackString(String& messageBuffer){
this->board.ToStackString(messageBuffer);
}

26
lib/Board/BoardTypes.h Normal file
View File

@@ -0,0 +1,26 @@
/**
* @file BoardTypes.h
* @brief Some types to that you'll need to define and control the board
*/
#pragma once
#include <cstdint>
#include "Vector3D.h"
namespace BOARD_TYPES{
struct CubeStack{
uint8_t adcPin;
uint8_t ledPin;
};
enum PLANE_NORMAL : uint32_t{
X = 0,
Y,
Z
};
struct Cube{
V3D<uint32_t> color;
bool isOccupied{false};
};
};

View File

@@ -1,21 +0,0 @@
/**
* @file Color.h
* @brief This file contains the color struct
*/
#pragma once
#include <Arduino.h>
// store a color
struct Color{
// create a constructor for this struct
Color(uint8_t red, uint8_t green, uint8_t blue) :
red(red),
green(green),
blue(blue)
{}
Color() = default;
uint8_t red{0};
uint8_t green{0};
uint8_t blue{0};
};

View File

@@ -1,77 +0,0 @@
#include "CubeStack.h"
CubeStack::CubeStack(uint16_t ADCPin, uint16_t ledPin, uint8_t numLEDs){
this->ADCPin = ADCPin;
this->blockLights = *(new Adafruit_NeoPixel(numLEDs*2, ledPin, NEO_GRB + NEO_KHZ800));
this->ledColors = new Color[numLEDs];
this->numLEDs = numLEDs;
// initialize the LED colors to off
for(int i = 0; i < numLEDs; i++){
this->ledColors[i] = *(new Color(0, 0, 0));
}
};
uint8_t CubeStack::GetNumberCubes(){
// read the ADC and return the number of cubes
/*
0 cubes: 1 : 4095-3071
1 cube: 1/2 3070-1706
2 cubes: 1/3 1705-1195
3 cubes: 1/4 1195-0
*/
uint16_t value = analogRead(this->ADCPin);
this->lowPassADCRead = static_cast<uint16_t>((static_cast<float>(this->lowPassADCRead) * 0.9) + (static_cast<float>(value) * 0.1));
// temporary definitions to define value ranges:
uint16_t zeroCubesHigh = 4095;
uint16_t zeroCubesLow = 3071;
uint16_t oneCubeLow = 1706;
uint16_t twoCubesLow = 1000;
uint16_t threeCubesLow = 0;
uint8_t stackHeight = 0;
if(this->lowPassADCRead >= zeroCubesLow && this->lowPassADCRead <= zeroCubesHigh){
stackHeight = 0;
}
else if(this->lowPassADCRead >= oneCubeLow){
stackHeight = 1;
}
else if(this->lowPassADCRead >= twoCubesLow){
stackHeight = 2;
}
else if(this->lowPassADCRead >= threeCubesLow){
stackHeight = 3;
}
if(this->lastStackHeight != stackHeight){
this->lastStackHeight = stackHeight;
this->SendLEDData();
}
return stackHeight;
}
void CubeStack::SetLEDColors(Color * colors, uint8_t numColors){
// copy the colors into the ledColors array
for(int i = 0; i < numColors; i++){
this->ledColors[i].red = colors[i].red;
this->ledColors[i].green = colors[i].green;
this->ledColors[i].blue = colors[i].blue;
}
this->SendLEDData();
}
void CubeStack::SendLEDData(){
// we always initialize before we do anything because other CubeStacks could be hogging the hardware
// between our writes
this->blockLights.begin();
// set the LED colors
for(int i = 0; i < this->numLEDs; i++){
this->blockLights.setPixelColor(i*2, this->blockLights.Color(this->ledColors[i].red, this->ledColors[i].green, this->ledColors[i].blue));
this->blockLights.setPixelColor((i*2 + 1), this->blockLights.Color(this->ledColors[i].red, this->ledColors[i].green, this->ledColors[i].blue));
}
this->blockLights.show();
}

View File

@@ -1,52 +0,0 @@
/**
* @brief this manages a single cube stack and the lighting / detecting of how many cubes
*/
#pragma once
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#include "Color.h"
class CubeStack{
public:
/**
* @brief Construct a new Cube Stack object
* @param ADCPin the pin that the ADC is connected to
* @param ledPin the pin that the LED is connected to
*/
CubeStack(uint16_t ADCPin, uint16_t ledPin, uint8_t numLEDs);
/**
* @brief Returns the number of cubes in the stack
* @return the number of cubes in the stack
*/
uint8_t GetNumberCubes();
/**
* @brief Set the led color array and then send the data to the LED strip
* @param colors the array of colors to set the LEDs to
* @param numColors the number of colors in the array
*/
void SetLEDColors(Color * colors, uint8_t numColors);
/**
* @brief sends the LED data to the LED strip
*/
void SendLEDData();
private:
uint8_t ADCPin;
// we will probably need a pointer to a fastled object here
Adafruit_NeoPixel blockLights;
uint16_t lowPassADCRead{0};
// store the Color of each LED
Color * ledColors;
uint8_t numLEDs;
uint8_t lastStackHeight{0};
};

View File

@@ -1,48 +0,0 @@
#include "ColorManager.h"
void ColorManager::Update(){
if(!(this->enabled)){
return;
}
// go through our colors and have them fade from r->g->b->r
for(uint8_t i = 0; i < 9; i++){
for(uint8_t j = 0; j < 3; j++){
Color * color = this->colors[i][j];
// fade from red to green
if(color->red > 0 && color->green >= 0 && color->blue == 0){
color->red--;
color->green++;
}
// fade from green to blue
else if(color->green > 0 && color->blue >= 0 && color->red == 0){
color->green--;
color->blue++;
}
// fade from blue to red
else if(color->blue > 0 && color->red >= 0 && color->green == 0){
color->blue--;
color->red++;
}
}
}
// set the colors
for(uint8_t i = 0; i < 9; i++){
Color temp_colors[3] = {*(this->colors[i][0]), *(this->colors[i][1]), *(this->colors[i][2])};
this->board->SetStackColors(i, temp_colors);
}
}
void ColorManager::Enable(bool enable){
this->enabled = enable;
if(this->enabled == false){
// set all the colors to black
Color black(0, 0, 0);
Color temp_colors[3] = {black, black, black};
// set the colors
for(uint8_t i = 0; i < 9; i++){
this->board->SetStackColors(i, temp_colors);
}
}
}

View File

@@ -1,44 +0,0 @@
/**
* @file ColorManager.h
* @brief Generate pretty colors for the board and make it do something when unity isn't controlling it
*/
#pragma once
#include "BoardLayout.h"
#include "Color.h"
class ColorManager{
public:
ColorManager(BoardLayout * board) :
board(board)
{}
/**
* @brief Allows the color manager to update the board colors
*/
void Update();
/**
* @brief Enables or disables the color manager
* @param enable true to enable, false to disable
*/
void Enable(bool enable);
private:
BoardLayout * board;
bool enabled{true};
Color * colors[9][3] = {
{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255)},
{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255)},
{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255)},
{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255)},
{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255)},
{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255)},
{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255)},
{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255)},
{new Color(255, 0, 0), new Color(0, 255, 0), new Color(0, 0, 255)}
};
};

View File

@@ -0,0 +1,28 @@
/**
* @file GlobalPrint.h
* @brief a method of printing serial data to all outgoing communication methods
*/
#pragma once
#include <Arduino.h>
namespace GlobalPrint{
static void Print(const char * s){
Serial.print(s);
}
static void Print(const String &s){
GlobalPrint::Print(s.c_str());
}
static void Println(const char * s){
GlobalPrint::Print(s);
GlobalPrint::Print("\n");
}
static void Println(const String &s){
GlobalPrint::Println(s.c_str());
}
}

1
lib/SerialMessage Submodule

Submodule lib/SerialMessage added at a0bb93624d

View File

@@ -1,58 +0,0 @@
#include "BluetoothSerialMessage.h"
BluetoothSerialMessage::BluetoothSerialMessage(BluetoothSerial *serial){
this->serial = serial;
}
void BluetoothSerialMessage::Init(unsigned int baud_rate){
// Don't need to do anything here, just let the user init bluetooth serial
}
void BluetoothSerialMessage::PrintArgs(){
serial->print("Current number of args: ");
serial->println(populated_args);
for (int i = 0; i < populated_args; i++) {
serial->print(args[i]);
serial->print(" ");
}
serial->println();
}
void BluetoothSerialMessage::readSerial(){
boolean recvInProgress = false;
byte ndx = 0;
char c;
// read the incoming serial data:
while (serial->available() > 0 && data_recieved == false) {
// get the neext character in the serial buffer
c = serial->read();
Serial.print(c);
// only execute this if the startMarker has been received
if (recvInProgress == true) {
// if the incoming character is not the endMarker...
if (c != endMarker) {
// add it to the data array
data[ndx] = c;
ndx++; // increment the data array index
// if the index is greater than the maximum data array size,
// keep overwriting the last element until the endMarker is received.
if (ndx >= num_chars) {
ndx = num_chars - 1;
}
}
// if the incoming character is the endMarker clean up and set the flags
else {
data[ndx] = '\0'; // terminate the string
recvInProgress = false;
ndx = 0;
data_recieved = true;
}
}
// if the incoming character is the startMarker, set the recvInProgress flag
else if (c == startMarker) {
recvInProgress = true;
}
}
}

View File

@@ -1,31 +0,0 @@
#pragma once
#include "SerialMessage.h"
#include <BluetoothSerial.h>
class BluetoothSerialMessage : public SerialMessage{
public:
/**
* @brief Construct a new Bluetooth Serial Message object
*/
BluetoothSerialMessage(BluetoothSerial *serial);
/**
* @brief Initialize the BluetoothSerialMessage object
*/
void Init(unsigned int baud_rate = 115200) override;
/**
* @brief prints the args array to the serial monitor
*/
void PrintArgs() override;
private:
/**
* @brief reads the serial data and stores it in the data array
*/
void readSerial() override;
BluetoothSerial *serial;
};

View File

@@ -1,111 +0,0 @@
/**
* @file SerialMessage.cpp
* @brief This file contains the SerialMessage class
* @details This file contains the SerialMessage class which is used to parse serial messages
* @version 1.0.0
* @author Quinn Henthorne. Contact: quinn.henthorne@gmail.com
*/
#include "SerialMessage.h"
SerialMessage::SerialMessage(HardwareSerial *serial) :
serial(serial){}
void SerialMessage::Init(unsigned int baud_rate){
serial->begin(baud_rate);
}
void SerialMessage::readSerial(){
char c;
// read the incoming serial data:
while (serial->available() > 0 && data_recieved == false) {
// get the neext character in the serial buffer
c = serial->read();
// only execute this if the startMarker has been received
// if the incoming character is the endMarker clean up and set the flags
if (recvInProgress == true) {
if (c == endMarker) {
data[ndx] = '\0'; // terminate the string
recvInProgress = false;
ndx = 0;
data_recieved = true;
}
// if the incoming character is not the endMarker
else {
// add it to the data array
data[ndx] = c;
ndx++; // increment the data array index
// if the index is greater than the maximum data array size,
// keep overwriting the last element until the endMarker is received.
if (ndx >= num_chars) {
ndx = num_chars - 1;
}
}
}
// if the incoming character is the startMarker, set the recvInProgress flag
else if (c == startMarker) {
recvInProgress = true;
}
}
}
void SerialMessage::parseData() { // split the data into its parts
this->populated_args = 0; // reset the populated args counter
char * indx; // this is used by strtok() as an index
int i = 0;
indx = strtok(temp_data, ","); // get the first part - the string
while(indx != NULL){
this->args[i] = atoi(indx);
populated_args++;
i++;
indx = strtok(NULL, ","); // this continues where the previous call left off
}
}
void SerialMessage::Update(){
readSerial();
if (data_recieved == true) {
// for debug only:
// Serial.print("Received:");
// Serial.print(data);
// Serial.println(":End");
strcpy(temp_data, data);
// this temporary copy is necessary to protect the original data
// because strtok() used in parseData() replaces the commas with \0
parseData();
//PrintArgs();
data_recieved = false;
new_data = true;
}
}
bool SerialMessage::IsNewData(){
return new_data;
}
void SerialMessage::ClearNewData(){
new_data = false;
}
int * SerialMessage::GetArgs(){
return args;
}
int SerialMessage::GetArgsLength(){
return args_length;
}
int SerialMessage::GetPopulatedArgs(){
return populated_args;
}
void SerialMessage::PrintArgs(){
serial->print("Current number of args: ");
serial->println(populated_args);
for (int i = 0; i < populated_args; i++) {
serial->print(args[i]);
serial->print(" ");
}
serial->println();
}

View File

@@ -1,87 +0,0 @@
/**
* @file SerialMessage.h
* @brief This file contains the SerialMessage class
* @details This file contains the SerialMessage class which is used to parse serial messages
* @version 1.0.0
* @author Quinn Henthorne. Contact: quinn.henthorne@gmail.com
*/
#ifndef SERIALMESSAGE_H
#define SERIALMESSAGE_H
#include "Arduino.h"
#define num_chars 500
class SerialMessage{
public:
/**
* @brief Construct a new Serial Message object
*/
SerialMessage(HardwareSerial *serial = &Serial);
/**
* @brief Initialize the SerialMessage object
*/
virtual void Init(unsigned int baud_rate = 115200);
/**
* @brief Update the SerialMessage object and parse any data that's available
*/
void Update();
/**
* @brief Returns true if there is new data available
* @return true if there is new data available
*/
bool IsNewData();
/**
* @brief Clears the new data flag
*/
virtual void ClearNewData();
/**
* @brief Return a pointer to the args array
* @return a pointer to the args array
*/
int * GetArgs();
/**
* @brief Returns the number of args that have been populated for the current message
* @return the number of args that have been populated for the current message
*/
int GetArgsLength();
/**
* @brief Returns the number of args that have been populated for the current message
* @return the number of args that have been populated for the current message
*/
int GetPopulatedArgs();
/**
* @brief Prints the args array to the serial monitor
*/
virtual void PrintArgs();
protected:
virtual void readSerial();
virtual void parseData();
bool new_data = false;
bool data_recieved = false;
bool recvInProgress = false;
char data[num_chars]; // an array to store the received data
char temp_data[num_chars]; // an array that will be used with strtok()
uint16_t ndx = 0;
const static int args_length = 30;
int populated_args = 0; // the number of args that have been populated for the current message
int args[args_length];
const char startMarker = '!';
const char endMarker = ';';
private:
HardwareSerial *serial;
};
#endif

View File

@@ -8,9 +8,36 @@
; Please visit documentation for the other options and examples ; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html ; https://docs.platformio.org/page/projectconf.html
[env:denky32] [platformio]
platform = espressif32 default_envs = esp32s3_release
board = denky32 extra_configs = platformio-local.ini
[env]
upload_protocol = esptool
platform = https://github.com/platformio/platform-espressif32.git
board = esp32-s3-devkitc-1
framework = arduino framework = arduino
monitor_speed = 115200 build_flags = -Iinclude
lib_deps = adafruit/Adafruit NeoPixel@^1.12.0 monitor_speed = 9600
monitor_filters = colorize, send_on_enter
upload_speed = 2000000
lib_deps =
adafruit/Adafruit NeoPixel@^1.12.3
fastled/FastLED@^3.7.3
[env:esp32s3_release]
build_type = release
monitor_port = COM21
upload_port = COM20
[env:esp32s3_debug]
debug_init_break = tbreak setup
debug_tool = esp-builtin
build_type = debug
debug_speed = 20000
build_flags =
-D DEBUG = 1
-I include
monitor_port = COM21
upload_port = COM20

View File

@@ -1,141 +1,235 @@
// Other peoples libraries // Other peoples libraries
#include <Arduino.h> #include <Arduino.h>
#include <BluetoothSerial.h> #include <BluetoothSerial.h>
#include <FreeRTOS.h>
#include <Adafruit_NeoPixel.h>
#include <chrono>
#include <array>
// Static Defines
#include "PINOUT.h"
#include "BOARD-DEFINITIONS.h"
#include "COMMANDS.h"
// project specific libraries // project specific libraries
#include "BluetoothSerialMessage.h" #include "BluetoothSerial.h"
#include "BoardLayout.h" #include "SerialMessage.h"
#include "BOARD-DEFINITIONS.h" #include "GlobalPrint.h"
#include "Color.h"
#include "ColorManager.h"
// -------------------------------------------------- #include "BoardManager.h"
// ----------------- Types ---------------------- #include "BoardDriver.h"
// -------------------------------------------------- #include "BoardTypes.h"
enum Commands : uint8_t{
BoardState = 0,
PING = 1,
SetStackColors = 2,
GoToIdle = 3
};
// -------------------------------------------------- #include "Animator.h"
// ------------- OBJECT DEFINITIONS ----------------- #include "TestFrames.h"
// -------------------------------------------------- #include "Animation.h"
BluetoothSerial SerialBT;
BluetoothSerialMessage serialMessageBT(&SerialBT);
SerialMessage serialMessage(&Serial);
BoardLayout board(BOARD_WIDTH, BOARD_LENGTH, BOARD_HEIGHT, stacks);
// Temporary thing until we can get bluetooth color management working on the quest
ColorManager colorManager(&board);
// -------------------------------------------------- // --------------------------------------------------
// ----------------- VARIABLES ---------------------- // ----------------- VARIABLES ----------------------
// -------------------------------------------------- // --------------------------------------------------
TaskHandle_t updateCommunicaitonTask;
TaskHandle_t updateBoardTask;
// WARNING! This array size should always be equal to the number of entries in it!!
std::array<std::vector<AnimationFrame>*, 1> animations = {
&RisingCubes::rising,
// &RotatingCubes::rotating,
};
// BluetoothSerial SerialBT;
// BluetoothSerialMessage serialMessageBT(&SerialBT);
SerialMessage<SERIAL_CHAR_LENGTH, SERIAL_ARG_LENGTH> serialMessage(&Serial);
Adafruit_NeoPixel pixelController{BOARD_HEIGHT*2, STACK1_LED_PIN, NEO_GRB + NEO_KHZ800};
Animator<BOARD_DIMENSIONS> animator{};
BoardDriver<BOARD_WIDTH*BOARD_LENGTH> boardDriver{stacks, pixelController};
BoardManager<BOARD_DIMENSIONS> boardManager{boardDriver, animator};
// -------------------------------------------------- // --------------------------------------------------
// ----------------- FUNCTIONS ---------------------- // ----------------- FUNCTIONS ----------------------
// -------------------------------------------------- // --------------------------------------------------
/**
* @brief Send programming commands to the serial to bluetooth adapter so
* it is set up as expected for the VR headset
* @post the serial baud rate will be set to 9600
*/
void SetupBluetoothModule(){
Serial.begin(38400);
Serial.print("AT+UART=9600,0,0\r\n"); // set baud rate to 9600
delay(100);
Serial.print("AT+NAME=blockPartyBT-v01\r\n"); // set name to blockPartyBT-v0.1
delay(100);
Serial.print("AT+PSWD=1234\r\n"); // set password to 1234
delay(100);
Serial.print("AT+ROLE=0\r\n"); // set to slave
delay(100);
// exit at mode and go into pairing mode
Serial.print("AT+INIT\r\n");
Serial.begin(9600);
delay(100);
}
void printBoardState(){ void printBoardState(){
// create a buffer to hold the board state GlobalPrint::Print("!0,");
uint16_t boardState[BOARD_WIDTH * BOARD_LENGTH]; String boardString;
// read in the board state boardManager.Board2StackString(boardString);
board.GetBoardState(boardState); GlobalPrint::Print(boardString);
GlobalPrint::Println(";");
Serial.print("!0,");
SerialBT.print("!0,");
for(int i = 0; i < (BOARD_WIDTH * BOARD_LENGTH); i++){
Serial.print(boardState[i]);
SerialBT.print(boardState[i]);
if(i == (BOARD_WIDTH * BOARD_LENGTH) - 1){
break;
}
Serial.print(",");
SerialBT.print(",");
} }
Serial.println(";"); void SetStackColor(uint32_t * args, int argsLength){
SerialBT.println(";"); uint32_t stackNum = args[1];
uint32_t X_COORD{stackNum};
while(X_COORD > BOARD_DIMENSIONS.x - 1){
X_COORD -= BOARD_DIMENSIONS.x;
} }
uint32_t Y_COORD{(stackNum - X_COORD) / BOARD_DIMENSIONS.y};
void setStackColor(int * args, int argsLength){ uint32_t numColors = (argsLength - 2) / 3;
int stackNum = args[1]; V3D<uint32_t> colors[numColors];
int numColors = (argsLength - 2) / 3;
Color colors[numColors];
for(int i = 0; i < numColors; i++){ for(int i = 0; i < numColors; i++){
int red = args[2 + (i * 3)]; uint32_t red = args[2 + (i * 3)];
int green = args[3 + (i * 3)]; uint32_t green = args[3 + (i * 3)];
int blue = args[4 + (i * 3)]; uint32_t blue = args[4 + (i * 3)];
colors[i] = Color(red, green, blue); colors[i] = V3D<uint32_t>{red, green, blue};
}
boardManager.SetColumnColors(V3D<uint32_t>{X_COORD, Y_COORD, BOARD_TYPES::PLANE_NORMAL::Z}, colors, numColors);
} }
board.SetStackColors(stackNum, colors); void parseData(Message<SERIAL_CHAR_LENGTH, SERIAL_ARG_LENGTH> &message){
int32_t * args{message.GetArgs()};
uint32_t argsLength{message.GetPopulatedArgs()};
} uint32_t command = args[0];
void parseData(int * args, int argsLength){
int command = args[0];
switch(command){ switch(command){
case Commands::BoardState: case Commands::BoardState:{
printBoardState(); printBoardState();
break; break;
case Commands::PING: }
Serial.print("!"); case Commands::PING:{
SerialBT.print("!"); GlobalPrint::Println("!" + String(Commands::PING) + ";");
Serial.print(Commands::PING); boardManager.PrintColorState();
SerialBT.print(Commands::PING);
Serial.println(";");
SerialBT.println(";");
break; break;
case Commands::SetStackColors: }
Serial.println("!2;"); case Commands::SetStackColors:{
SerialBT.println("!2;"); GlobalPrint::Println("!2;");
colorManager.Enable(false); animator.isEnabled = false;
setStackColor(args, argsLength); V3D<uint32_t> black{};
boardManager.FillColor(black);
SetStackColor(reinterpret_cast<uint32_t *>(args), argsLength);
break; break;
case Commands::GoToIdle: }
Serial.println("!3;"); case Commands::GoToIdle:{
SerialBT.println("!3;"); GlobalPrint::Println("!3;");
colorManager.Enable(true); animator.isEnabled = true;
break; break;
default: }
Serial.println("INVALID COMMAND"); default:{
SerialBT.println("INVALID COMMAND"); GlobalPrint::Println("INVALID COMMAND");
break; break;
} }
} }
// now that we have run the command we can clear the data for the next command.
serialMessage.ClearNewData();
}
// --------------------------------------------------
// ----------------- FREERTOS TASKS -----------------
// --------------------------------------------------
void UpdateCommunication(void * params){
Serial.println("Spawning UpdateCommunication task");
for(;;){
// DO serial processing
serialMessage.Update();
if(serialMessage.IsNewData()){
parseData(serialMessage);
}
// serialMessageBT.Update();
// if(serialMessageBT.IsNewData()){
// parseData(serialMessageBT.GetArgs(), serialMessageBT.GetArgsLength());
// serialMessageBT.ClearNewData();
// }
vTaskDelay(3);
}
Serial.println("UpdateCommunication task has ended unexpectedly!");
}
void UpdateBoard(void * params){
Serial.println("Spawning UpdateBoard task");
auto updateTickRate{std::chrono::milliseconds(8)};
auto boardStateTimer{std::chrono::milliseconds(0)};
auto boardStateMaxUpdatePeriod{std::chrono::milliseconds(34)}; // this is a little slower than 30fps
unsigned long accurateTimer{millis()};
auto changeAnimationTimer{std::chrono::milliseconds(0)};
uint8_t currentAnimation{0};
for(;;){
auto actualTimePassed{std::chrono::milliseconds(millis() - accurateTimer)};
accurateTimer = millis();
if(boardStateTimer >= boardStateMaxUpdatePeriod && boardManager.HasBoardChanged()){
printBoardState();
boardManager.ClearBoardChanged();
boardStateTimer = std::chrono::milliseconds(0);
}
if(changeAnimationTimer >= std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::minutes(1))){
changeAnimationTimer = std::chrono::milliseconds(0);
currentAnimation++;
if(currentAnimation >= animations.size()){
currentAnimation = 0;
}
animator.StartAnimation(animations[currentAnimation]);
}
animator.RunAnimation(actualTimePassed);
boardManager.Update();
boardStateTimer += actualTimePassed;
changeAnimationTimer += actualTimePassed;
vTaskDelay(updateTickRate.count());
}
Serial.println("UpdateBoard task has ended unexpectedly!");
}
// -------------------------------------------------- // --------------------------------------------------
// ----------------- SETUP AND LOOP ----------------- // ----------------- SETUP AND LOOP -----------------
// -------------------------------------------------- // --------------------------------------------------
void setup() {
Serial.begin(115200);
SerialBT.begin("blockPartyBT");
Color colors[] = {Color(255, 0, 0), Color(0, 0, 0), Color(0, 0, 0)};
board.SetStackColors(2, colors);
void setup() {
// delay a little bit to get the serial monitor a chance to capture the next log messages.
delay(1000);
Serial.begin(9600);
Serial.println("Beginning Setup");
Serial.println("Configuring Bluetooth Adapter");
SetupBluetoothModule();
Serial.begin(9600);
Serial.println("Configuring communication methods");
serialMessage.Init(9600);
// SerialBT.begin("blockPartyBT");
xTaskCreate(UpdateCommunication, "UpdateCommunication", 10000, NULL, 0, &updateCommunicaitonTask);
Serial.println("Beginning Board Initializaiton");
boardManager.Init();
animator.SetLoop(true);
animator.StartAnimation(animations[0]);
xTaskCreate(UpdateBoard, "UpdateBoard", 10000, NULL, 0, &updateBoardTask);
Serial.println("Setup Complete");
} }
void loop() { void loop() {
if(board.BoardStateHasChanged()){ // delete the loop task because we don't use it
printBoardState(); vTaskDelete(NULL);
}
// DO serial processing
serialMessage.Update();
if(serialMessage.IsNewData()){
parseData(serialMessage.GetArgs(), serialMessage.GetArgsLength());
serialMessage.ClearNewData();
}
serialMessageBT.Update();
if(serialMessageBT.IsNewData()){
parseData(serialMessageBT.GetArgs(), serialMessageBT.GetArgsLength());
serialMessageBT.ClearNewData();
}
colorManager.Update();
} }

Some files were not shown because too many files have changed in this diff Show More