Merge branch 'main' into main
5
.gitmodules
vendored
|
|
@ -14,4 +14,7 @@
|
|||
branch = ambrylight
|
||||
[submodule "hackpads/n16-remote"]
|
||||
path = hackpads/n16-remote
|
||||
url = https://github.com/DJ-Laser/n16-remote
|
||||
url = https://github.com/DJ-Laser/n16-remot
|
||||
[submodule "hackpads/shrekpad"]
|
||||
path = hackpads/shrekpad
|
||||
url = https://github.com/daamin909/shrekpad
|
||||
|
|
|
|||
164019
My cool hackpad kubas fake calculator/CAD/hacpad everything.step
Normal file
81
My cool hackpad kubas fake calculator/Firmware/main.py
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import board
|
||||
import time
|
||||
from kmk.kmk_keyboard import KMKKeyboard
|
||||
from kmk.scanners.keypad import MatrixScanner
|
||||
from kmk.keys import KC
|
||||
from kmk.modules.rotary_encoder import RotaryEncoderHandler
|
||||
from kmk.extensions.peg_rgb_matrix import Rgb_matrix
|
||||
|
||||
keyboard = KMKKeyboard()
|
||||
|
||||
rgb = Rgb_matrix()
|
||||
keyboard.extensions.append(rgb)
|
||||
|
||||
|
||||
keyboard.matrix = MatrixScanner(
|
||||
column_pins=[board.GP3, board.GP4, board.GP2, board.GP1],
|
||||
row_pins=[board.GP27, board.GP28, board.G29],
|
||||
value_when_pressed=False,
|
||||
)
|
||||
|
||||
keyboard.keymap = [
|
||||
#layer0
|
||||
[
|
||||
[KC.F13, KC.F14, KC.F15, KC.F16,],
|
||||
[KC.F17, KC.F18, KC.F19, KC.F20,],
|
||||
[KC.F21, KC.F22, KC.F23, KC.F24,],
|
||||
],
|
||||
#layer1
|
||||
[
|
||||
[KC.F25, KC.F26, KC.F27, KC.F28,],
|
||||
[KC.F29, KC.F30, KC.F31, KC.F32,],
|
||||
[KC.F33, KC.F34, KC.F35, KC.F36,],
|
||||
],
|
||||
#layer2
|
||||
[
|
||||
[KC.F37, KC.F38, KC.F39, KC.F40,],
|
||||
[KC.F41, KC.F42, KC.F43, KC.F44,],
|
||||
[KC.F45, KC.F46, KC.F47, KC.F48,],
|
||||
],
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
def switch_layer(layer):
|
||||
keyboard.active_layers = [layer]
|
||||
if layer == 0:
|
||||
keyboard.set_pixel(0, 255, 0, 0)
|
||||
keyboard.set_pixel(1, 255, 1, 1)
|
||||
keyboard.set_pixel(2, 255, 2, 2)
|
||||
keyboard.set_pixel(3, 255, 3, 3)
|
||||
elif layer == 1:
|
||||
keyboard.set_pixel(0, 0, 255, 0)
|
||||
keyboard.set_pixel(1, 1, 255, 1)
|
||||
keyboard.set_pixel(2, 2, 255, 2)
|
||||
keyboard.set_pixel(3, 3, 255, 3)
|
||||
elif layer == 2:
|
||||
keyboard.set_pixel(0, 0, 0, 255)
|
||||
keyboard.set_pixel(1, 1, 1, 255)
|
||||
keyboard.set_pixel(2, 2, 2, 255)
|
||||
keyboard.set_pixel(3, 3, 3, 255)
|
||||
rgb.write()
|
||||
|
||||
current_layer = 0
|
||||
switch_layer(current_layer)
|
||||
|
||||
encoder = RotaryEncoderHandler(pin_a=board.GP7, pin_b=board.GP6,pin_S1=board.GP1)
|
||||
encoder.rotation_cw = KC.VOLU
|
||||
encoder.rotation_ccw = KC.VOLD
|
||||
keyboard.modules.append(encoder)
|
||||
|
||||
while True:
|
||||
keyboard.update()
|
||||
if keyboard.matrix.is_pressed(0, 0):
|
||||
current_layer = (current_layer + 1) % 3
|
||||
switch_layer(current_layer)
|
||||
time.sleep(0.3)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
keyboard.go()
|
||||
|
|
@ -0,0 +1,579 @@
|
|||
{
|
||||
"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.05,
|
||||
"copper_line_width": 0.2,
|
||||
"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.05,
|
||||
"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.1,
|
||||
"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.1,
|
||||
"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.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"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",
|
||||
"holes_co_located": "warning",
|
||||
"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.5,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"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": "kubas fake calculator.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.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "../../gerbers/",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "kubas fake calculator final.step",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "",
|
||||
"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
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"name": "Grouped By Value",
|
||||
"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": [],
|
||||
"text_variables": {}
|
||||
}
|
||||
5015
My cool hackpad kubas fake calculator/PCB/pcb_fake calculator.step
Normal file
22315
My cool hackpad kubas fake calculator/Production/case bottom part_.step
Normal file
26161
My cool hackpad kubas fake calculator/Production/case top part.step
Normal file
BIN
My cool hackpad kubas fake calculator/Production/gerbers.zip
Normal file
81
My cool hackpad kubas fake calculator/Production/main.py
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import board
|
||||
import time
|
||||
from kmk.kmk_keyboard import KMKKeyboard
|
||||
from kmk.scanners.keypad import MatrixScanner
|
||||
from kmk.keys import KC
|
||||
from kmk.modules.rotary_encoder import RotaryEncoderHandler
|
||||
from kmk.extensions.peg_rgb_matrix import Rgb_matrix
|
||||
|
||||
keyboard = KMKKeyboard()
|
||||
|
||||
rgb = Rgb_matrix()
|
||||
keyboard.extensions.append(rgb)
|
||||
|
||||
|
||||
keyboard.matrix = MatrixScanner(
|
||||
column_pins=[board.GP3, board.GP4, board.GP2, board.GP1],
|
||||
row_pins=[board.GP27, board.GP28, board.G29],
|
||||
value_when_pressed=False,
|
||||
)
|
||||
|
||||
keyboard.keymap = [
|
||||
#layer0
|
||||
[
|
||||
[KC.F13, KC.F14, KC.F15, KC.F16,],
|
||||
[KC.F17, KC.F18, KC.F19, KC.F20,],
|
||||
[KC.F21, KC.F22, KC.F23, KC.F24,],
|
||||
],
|
||||
#layer1
|
||||
[
|
||||
[KC.F25, KC.F26, KC.F27, KC.F28,],
|
||||
[KC.F29, KC.F30, KC.F31, KC.F32,],
|
||||
[KC.F33, KC.F34, KC.F35, KC.F36,],
|
||||
],
|
||||
#layer2
|
||||
[
|
||||
[KC.F37, KC.F38, KC.F39, KC.F40,],
|
||||
[KC.F41, KC.F42, KC.F43, KC.F44,],
|
||||
[KC.F45, KC.F46, KC.F47, KC.F48,],
|
||||
],
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
def switch_layer(layer):
|
||||
keyboard.active_layers = [layer]
|
||||
if layer == 0:
|
||||
keyboard.set_pixel(0, 255, 0, 0)
|
||||
keyboard.set_pixel(1, 255, 1, 1)
|
||||
keyboard.set_pixel(2, 255, 2, 2)
|
||||
keyboard.set_pixel(3, 255, 3, 3)
|
||||
elif layer == 1:
|
||||
keyboard.set_pixel(0, 0, 255, 0)
|
||||
keyboard.set_pixel(1, 1, 255, 1)
|
||||
keyboard.set_pixel(2, 2, 255, 2)
|
||||
keyboard.set_pixel(3, 3, 255, 3)
|
||||
elif layer == 2:
|
||||
keyboard.set_pixel(0, 0, 0, 255)
|
||||
keyboard.set_pixel(1, 1, 1, 255)
|
||||
keyboard.set_pixel(2, 2, 2, 255)
|
||||
keyboard.set_pixel(3, 3, 3, 255)
|
||||
rgb.write()
|
||||
|
||||
current_layer = 0
|
||||
switch_layer(current_layer)
|
||||
|
||||
encoder = RotaryEncoderHandler(pin_a=board.GP7, pin_b=board.GP6,pin_S1=board.GP1)
|
||||
encoder.rotation_cw = KC.VOLU
|
||||
encoder.rotation_ccw = KC.VOLD
|
||||
keyboard.modules.append(encoder)
|
||||
|
||||
while True:
|
||||
keyboard.update()
|
||||
if keyboard.matrix.is_pressed(0, 0):
|
||||
current_layer = (current_layer + 1) % 3
|
||||
switch_layer(current_layer)
|
||||
time.sleep(0.3)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
keyboard.go()
|
||||
51
My cool hackpad kubas fake calculator/README.md
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
## Project - Kuba's fake calculator
|
||||
|
||||
When I heard about this chalange I knew I had to try to build my own macropad. I had never create a electronic thing like this, so it was absolutely new experience to me. I learned a lot about designing a pcb and I hope this knowlege will be uesfull in the future. Overall it was a really good time but I struggled a litlle with fusion 360 program but i managed to use it.
|
||||
|
||||
## Design
|
||||
|
||||
my hackpad uses 9 switches and 4 rgb diodes and 1 rotary encoder switch
|
||||

|
||||
|
||||
## Speciications
|
||||
### BOM
|
||||
|
||||
12x Cherry MX switches
|
||||
1x EC11 Rotary Encoder
|
||||
4x SK6812 MINI LED
|
||||
4x M3x16mm screws
|
||||
1x XIAO-RP2040-DIP
|
||||
1x case (2 printed parts)
|
||||
1x custom pcb
|
||||
12x DSA keycaps (black if possible)
|
||||
12x 1N4148 diodes
|
||||
|
||||
Firmware
|
||||
case top part
|
||||
case bottom part
|
||||
|
||||
|
||||
## Here are imagesof my pcb in KiCad
|
||||
|
||||
### Schematic
|
||||
|
||||

|
||||
|
||||
### Pcb
|
||||
|
||||

|
||||
|
||||
|
||||
## Here are images of my case
|
||||
|
||||
(im sorry for having do diodes in case but my fusion skils arent that good)
|
||||

|
||||

|
||||

|
||||
|
||||
## Firmware
|
||||
by macropad is desugned for having 3 layers and with this I have 36 keybinds instead of 12. User know which layer is he on because of diodes that tell him which layer is he using
|
||||
|
||||
|
||||
### Others
|
||||
It was nicely spent time and if I would able to I would take part in that project again
|
||||
BIN
My cool hackpad kubas fake calculator/assets/all.png
Normal file
|
After Width: | Height: | Size: 326 KiB |
BIN
My cool hackpad kubas fake calculator/assets/bottom.png
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
My cool hackpad kubas fake calculator/assets/casetop.png
Normal file
|
After Width: | Height: | Size: 285 KiB |
BIN
My cool hackpad kubas fake calculator/assets/design.png
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
My cool hackpad kubas fake calculator/assets/pcb.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
My cool hackpad kubas fake calculator/assets/schematic.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
|
|
@ -1,3 +1,21 @@
|
|||
# hackboard, genesis
|
||||
|
||||
This is the repo for hackboard!
|
||||
This is the repo for hackboard!
|
||||
|
||||
|
||||
Has 2-USB A ports at the top, facing vertically.
|
||||
|
||||
USB A connectors:
|
||||
USB
|
||||
|
||||
BOM:
|
||||
- EC11 x1
|
||||
- SL2.1A USB 2.0 HUB
|
||||
- 2 vertical USB-A ports w/ LED indicators - transistors detect currenta flowing
|
||||
|
||||
LED filament: https://www.aliexpress.us/item/3256807786837402.html
|
||||
Pogo pins for a USB device:
|
||||
ESD Protection diodes on D+ and D- for pogo pins
|
||||
|
||||
neopixels?? idfk - might throw a couple in
|
||||
OLED status indicator would be cool
|
||||
BIN
hackpads/AIR75/CAD/Air75 v1.3mf
Normal file
BIN
hackpads/AIR75/CAD/Air75 v1.f3d
Normal file
153584
hackpads/AIR75/CAD/Air75 v1.step
Normal file
4195
hackpads/AIR75/CAD/Bottom Case.step
Normal file
3771
hackpads/AIR75/CAD/Top Case.step
Normal file
68
hackpads/AIR75/Firmware/firmware.py
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
import board
|
||||
import busio
|
||||
import time
|
||||
from kmk.kmk_keyboard import KMKKeyboard
|
||||
from kmk.scanners.keypad import MatrixScanner
|
||||
from kmk.keys import KC
|
||||
from kmk.modules.rotary_encoder import RotaryEncoderHandler
|
||||
from kmk.modules.layers import Layers
|
||||
from kmk.extensions.display import Display, SSD1306, TextEntry, ImageEntry
|
||||
|
||||
keyboard = KMKKeyboard()
|
||||
|
||||
keyboard.matrix = MatrixScanner(
|
||||
column_pins=[board.GP26, board.GP27, board.GP28, board.GP29], # Columns
|
||||
row_pins=[board.GP2, board.GP4, board.GP3], # Rows
|
||||
value_when_pressed=False,
|
||||
)
|
||||
|
||||
# Define Keymap
|
||||
keyboard.keymap = [
|
||||
[
|
||||
KC.ENTER, KC.NO, KC.NO, KC.PSSCREEN,
|
||||
KC.F1, KC.F2, KC.F3, KC.F4,
|
||||
KC.F5, KC.F6, KC.F7, KC.F8,
|
||||
]
|
||||
]
|
||||
|
||||
encoder = RotaryEncoderHandler(pin_a=board.GP0, pin_b=board.GP1)
|
||||
encoder.rotation_cw = KC.VOLU # Volume Up
|
||||
encoder.rotation_ccw = KC.VOLD # Volume Down
|
||||
keyboard.modules.append(encoder)
|
||||
|
||||
# Display
|
||||
layers = Layers()
|
||||
keyboard.modules.append(layers)
|
||||
|
||||
i2c_bus = busio.I2C(board.GP6, board.GP7)
|
||||
display_driver = SSD1306(
|
||||
i2c=i2c_bus,
|
||||
# Optional device_addres argument. Default is 0x3C.
|
||||
# device_address=0x3C,
|
||||
)
|
||||
|
||||
display = Display(
|
||||
display=display_driver,
|
||||
entries=[
|
||||
TextEntry(text='Layer: ', x=0, y=32, y_anchor='B'),
|
||||
TextEntry(text='BASE', x=40, y=32, y_anchor='B', layer=0),
|
||||
TextEntry(text='NUM', x=40, y=32, y_anchor='B', layer=1),
|
||||
TextEntry(text='NAV', x=40, y=32, y_anchor='B', layer=2),
|
||||
TextEntry(text='0 1 2', x=0, y=4),
|
||||
TextEntry(text='0', x=0, y=4, inverted=True, layer=0),
|
||||
TextEntry(text='1', x=12, y=4, inverted=True, layer=1),
|
||||
TextEntry(text='2', x=24, y=4, inverted=True, layer=2),
|
||||
],
|
||||
# Optional width argument. Default is 128.
|
||||
# width=128,
|
||||
height=64,
|
||||
dim_time=10,
|
||||
dim_target=0.2,
|
||||
off_time=1200,
|
||||
brightness=1,
|
||||
)
|
||||
|
||||
keyboard.extensions.append(display)
|
||||
|
||||
if __name__ == '__main__':
|
||||
keyboard.go()
|
||||
12062
hackpads/AIR75/PCB/Air75.kicad_pcb
Normal file
83
hackpads/AIR75/PCB/Air75.kicad_prl
Normal 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": "Air75.kicad_prl",
|
||||
"version": 3
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
}
|
||||
}
|
||||
584
hackpads/AIR75/PCB/Air75.kicad_pro
Normal file
|
|
@ -0,0 +1,584 @@
|
|||
{
|
||||
"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.05,
|
||||
"copper_line_width": 0.2,
|
||||
"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.05,
|
||||
"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.1,
|
||||
"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.1,
|
||||
"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.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"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",
|
||||
"holes_co_located": "warning",
|
||||
"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.5,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"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": "Air75.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.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"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": "Air75.step",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "",
|
||||
"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
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"name": "Grouped By Value",
|
||||
"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": [
|
||||
[
|
||||
"bce8e358-5f96-4db5-80a5-39c099add008",
|
||||
"Root"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
}
|
||||
4408
hackpads/AIR75/PCB/Air75.kicad_sch
Normal file
160708
hackpads/AIR75/PCB/Air75.step
Normal file
1
hackpads/AIR75/PCB/fabrication-toolkit-options.json
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"EXTRA_LAYERS": "", "ALL_ACTIVE_LAYERS": false, "EXTEND_EDGE_CUT": false, "ALTERNATIVE_EDGE_CUT": false, "AUTO TRANSLATE": true, "AUTO FILL": true, "EXCLUDE DNP": false}
|
||||
15
hackpads/AIR75/PCB/fp-info-cache
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
3472245298083
|
||||
Audio_Module
|
||||
Reverb_BTDR-1H
|
||||
Digital Reverberation Unit, http://www.belton.co.kr/inc/downfile.php?seq=17&file=pdf (footprint from http://www.uk-electronic.de/PDF/BTDR-1.pdf)
|
||||
audio belton reverb
|
||||
0
|
||||
7
|
||||
7
|
||||
Audio_Module
|
||||
Reverb_BTDR-1V
|
||||
Digital Reverberation Unit, http://www.belton.co.kr/inc/downfile.php?seq=17&file=pdf (footprint from http://www.uk-electronic.de/PDF/BTDR-1.pdf)
|
||||
audio belton reverb
|
||||
0
|
||||
7
|
||||
7
|
||||
4195
hackpads/AIR75/Production/Bottom Case.step
Normal file
3771
hackpads/AIR75/Production/Top Case.step
Normal file
68
hackpads/AIR75/Production/firmware.py
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
import board
|
||||
import busio
|
||||
import time
|
||||
from kmk.kmk_keyboard import KMKKeyboard
|
||||
from kmk.scanners.keypad import MatrixScanner
|
||||
from kmk.keys import KC
|
||||
from kmk.modules.rotary_encoder import RotaryEncoderHandler
|
||||
from kmk.modules.layers import Layers
|
||||
from kmk.extensions.display import Display, SSD1306, TextEntry, ImageEntry
|
||||
|
||||
keyboard = KMKKeyboard()
|
||||
|
||||
keyboard.matrix = MatrixScanner(
|
||||
column_pins=[board.GP26, board.GP27, board.GP28, board.GP29], # Columns
|
||||
row_pins=[board.GP2, board.GP4, board.GP3], # Rows
|
||||
value_when_pressed=False,
|
||||
)
|
||||
|
||||
# Define Keymap
|
||||
keyboard.keymap = [
|
||||
[
|
||||
KC.ENTER, KC.NO, KC.NO, KC.PSSCREEN,
|
||||
KC.F1, KC.F2, KC.F3, KC.F4,
|
||||
KC.F5, KC.F6, KC.F7, KC.F8,
|
||||
]
|
||||
]
|
||||
|
||||
encoder = RotaryEncoderHandler(pin_a=board.GP0, pin_b=board.GP1)
|
||||
encoder.rotation_cw = KC.VOLU # Volume Up
|
||||
encoder.rotation_ccw = KC.VOLD # Volume Down
|
||||
keyboard.modules.append(encoder)
|
||||
|
||||
# Display
|
||||
layers = Layers()
|
||||
keyboard.modules.append(layers)
|
||||
|
||||
i2c_bus = busio.I2C(board.GP6, board.GP7)
|
||||
display_driver = SSD1306(
|
||||
i2c=i2c_bus,
|
||||
# Optional device_addres argument. Default is 0x3C.
|
||||
# device_address=0x3C,
|
||||
)
|
||||
|
||||
display = Display(
|
||||
display=display_driver,
|
||||
entries=[
|
||||
TextEntry(text='Layer: ', x=0, y=32, y_anchor='B'),
|
||||
TextEntry(text='BASE', x=40, y=32, y_anchor='B', layer=0),
|
||||
TextEntry(text='NUM', x=40, y=32, y_anchor='B', layer=1),
|
||||
TextEntry(text='NAV', x=40, y=32, y_anchor='B', layer=2),
|
||||
TextEntry(text='0 1 2', x=0, y=4),
|
||||
TextEntry(text='0', x=0, y=4, inverted=True, layer=0),
|
||||
TextEntry(text='1', x=12, y=4, inverted=True, layer=1),
|
||||
TextEntry(text='2', x=24, y=4, inverted=True, layer=2),
|
||||
],
|
||||
# Optional width argument. Default is 128.
|
||||
# width=128,
|
||||
height=64,
|
||||
dim_time=10,
|
||||
dim_target=0.2,
|
||||
off_time=1200,
|
||||
brightness=1,
|
||||
)
|
||||
|
||||
keyboard.extensions.append(display)
|
||||
|
||||
if __name__ == '__main__':
|
||||
keyboard.go()
|
||||
BIN
hackpads/AIR75/Production/gerbers.zip
Normal file
25
hackpads/AIR75/README.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Air 75 (mini)
|
||||
|
||||
A Macro Pad with rotary encoders and OLED display.
|
||||
|
||||
## Specifications
|
||||
|
||||
### BOM
|
||||
- 9x Cherry MX Switches
|
||||
- 9x Blank DSA Keycaps (1x Red, 4x White, 4x Black)
|
||||
- 1x Rotary Encoder
|
||||
- 1x 128x32 OLED Display
|
||||
- 10x 1N4148 Diodes
|
||||
- 1x XIAO RP2040
|
||||
- 4x M3x16 Bolt
|
||||
|
||||
### Other Resources
|
||||
- [PCB](PCB)
|
||||
- [Images](images)
|
||||
|
||||
| Schematic | PCB | Case |
|
||||
| :--------------------------------: | :--------------------: | :----------------------: |
|
||||
|  |  |  |
|
||||
|
||||
## Author
|
||||
- [Krish](https://github.com/ikrishagarwal)
|
||||
BIN
hackpads/AIR75/images/case.png
Normal file
|
After Width: | Height: | Size: 417 KiB |
BIN
hackpads/AIR75/images/components.png
Normal file
|
After Width: | Height: | Size: 384 KiB |
BIN
hackpads/AIR75/images/pcb.png
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
hackpads/AIR75/images/schematics.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
|
|
@ -46,10 +46,11 @@ The biggest challenge I faced was getting used to KiCad, as my transition from e
|
|||
## BOM
|
||||
|
||||
- 1x XIAO RP2040 (Wihout header pins)
|
||||
- 12x Generic Red Switch (With clear case)
|
||||
- 12x Generic White DSA Keycaps (I won't mind HC keycaps :3)
|
||||
- 12x Red Linear MX-Style Switches (The ones that allow leds to shine through)
|
||||
- 12x Generic White DSA Keycaps
|
||||
- 1x SSD1306 128x32 0.91" OLED
|
||||
- 12x 1N4148 Diodes
|
||||
- 12x SK6812 MINI-E LED
|
||||
- 2x 4.7k resistor
|
||||
- 4x M3x16mm SHCS Bolts
|
||||
- 4x M3x5x4 Heatset inserts
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ cturing Information (PMI)---4.0---2014-10-13'),
|
|||
/* implementation_level */ '2;1');
|
||||
|
||||
FILE_NAME(
|
||||
/* name */ 'LowerCase.step',
|
||||
/* time_stamp */ '2025-02-16T23:00:59+08:00',
|
||||
/* name */ 'Anson''s HackPad v27.step',
|
||||
/* time_stamp */ '2025-02-19T18:11:29+08:00',
|
||||
/* author */ (''),
|
||||
/* organization */ (''),
|
||||
/* preprocessor_version */ 'ST-DEVELOPER v20',
|
||||
|
|
@ -17257,16 +17257,16 @@ SOLID_ANGLE_UNIT()
|
|||
#14253=PRODUCT_DEFINITION_SHAPE('',$,#14256);
|
||||
#14254=SHAPE_REPRESENTATION('',(#7164),#14246);
|
||||
#14255=PRODUCT_DEFINITION_CONTEXT('part definition',#14260,'design');
|
||||
#14256=PRODUCT_DEFINITION('Anson''s HackPad','Anson''s HackPad v26',#14257,
|
||||
#14256=PRODUCT_DEFINITION('Anson''s HackPad','Anson''s HackPad v27',#14257,
|
||||
#14255);
|
||||
#14257=PRODUCT_DEFINITION_FORMATION('',$,#14262);
|
||||
#14258=PRODUCT_RELATED_PRODUCT_CATEGORY('Anson''s HackPad v26',
|
||||
'Anson''s HackPad v26',(#14262));
|
||||
#14258=PRODUCT_RELATED_PRODUCT_CATEGORY('Anson''s HackPad v27',
|
||||
'Anson''s HackPad v27',(#14262));
|
||||
#14259=APPLICATION_PROTOCOL_DEFINITION('international standard',
|
||||
'ap242_managed_model_based_3d_engineering',2011,#14260);
|
||||
#14260=APPLICATION_CONTEXT('Managed model based 3d engineering');
|
||||
#14261=PRODUCT_CONTEXT('part definition',#14260,'mechanical');
|
||||
#14262=PRODUCT('Anson''s HackPad','Anson''s HackPad v26',$,(#14261));
|
||||
#14262=PRODUCT('Anson''s HackPad','Anson''s HackPad v27',$,(#14261));
|
||||
#14263=PRESENTATION_STYLE_ASSIGNMENT((#14264));
|
||||
#14264=SURFACE_STYLE_USAGE(.BOTH.,#14265);
|
||||
#14265=SURFACE_SIDE_STYLE('',(#14266));
|
||||
|
|
|
|||
25
hackpads/Bat-Board/BOM.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
## BOM
|
||||
- 13x Cherry MX Switches
|
||||
- 4x SK6812 MINI Leds
|
||||
- 1x XIAO RP2040
|
||||
- 4x Blank DSA Keycaps
|
||||
- 9x M3x16 Bolt
|
||||
- 9x M3 Heatset
|
||||
- 1x 0.91" 128x32 OLED Display
|
||||
- 13x Through-hole 1N4148 Diodes
|
||||
- 1x Red Blank DSA keycaps
|
||||
- 4x White Blank DSA keycaps
|
||||
- 9x Black Blank DSA keycaps
|
||||
- 9x M3 hex nuts
|
||||
|
||||
Extras:-
|
||||
- Few Jump Wires
|
||||
- Breadboard
|
||||
- A soldering iron and its required materials
|
||||
For testing before placing
|
||||
- a sd card
|
||||
|
||||
Others:
|
||||
- KMK Firmware
|
||||
- Top Case.stl
|
||||
- Bottom Case.stl
|
||||
35366
hackpads/Bat-Board/CAD/3DShell_3DShell_Macropad 2_B.stl
Normal file
21646
hackpads/Bat-Board/CAD/3DShell_3DShell_Macropad 2_T.stl
Normal file
35366
hackpads/Bat-Board/CAD/3DShell_Macropad_Box_B.stl
Normal file
21646
hackpads/Bat-Board/CAD/3DShell_Macropad_Box_T.stl
Normal file
8
hackpads/Bat-Board/Firmware/QMK/config.h
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
#define I2C1_SDA_PIN GP6
|
||||
#define I2C1_SCL_PIN GP7 // Define which pins are SDA and SCL on your microcontroller model. Remember to change GP to your pin indicator if you aren't using the RP2040
|
||||
#define OLED_DRIVER_ENABLE
|
||||
|
||||
// You may need to add these if the OLED doesn't work at first.
|
||||
|
||||
#define OLED_I2C_ADDRESS 0x3C // or 0x3D, depending on your OLED
|
||||
#define OLED_DISPLAY_ON 1
|
||||
1
hackpads/Bat-Board/Firmware/QMK/default_keyboard.h
Normal file
|
|
@ -0,0 +1 @@
|
|||
#define LAYOUT_ortho_5x3(k0A, k1A, k1B, k1C, k2A, k2B, k2C, k3A, k3B, k3C, k4A, k4B, k4C) { \
|
||||
11
hackpads/Bat-Board/Firmware/QMK/info.json
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
"layouts": {
|
||||
"LAYOUT_ortho_5x3": {
|
||||
"layout": [
|
||||
{ "x":0, "y":0 }, { "x":1, "y":0 }, { "x":2, "y":0 },
|
||||
{ "x":0, "y":1 }, { "x":1, "y":1 }, { "x":2, "y":1 },
|
||||
{ "x":0, "y":2 }, { "x":1, "y":2 }, { "x":2, "y":2 },
|
||||
{ "x":0, "y":3 }, { "x":1, "y":3 }, { "x":2, "y":3 },
|
||||
{ "x":1, "y":4 }
|
||||
]
|
||||
}
|
||||
}
|
||||
45
hackpads/Bat-Board/Firmware/QMK/keyboard.json
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"manufacturer": "Bhavya",
|
||||
"keyboard_name": "Bat-Boaad",
|
||||
"maintainer": "Bhavya",
|
||||
"bootloader": "rp2040",
|
||||
"diode_direction": "ROW2COL",
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"command": false,
|
||||
"console": false,
|
||||
"extrakey": true,
|
||||
"mousekey": false,
|
||||
"nkro": true
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["GP4", "GP2", "GP1"],
|
||||
"rows": ["GP0", "GP29","GP27", "GP28","GP26"]
|
||||
},
|
||||
"processor": "RP2040",
|
||||
"url": "(optional, leave blank otherwise)URL to an info page, i.e https://github.com/exampleuser/example, https://example.com.",
|
||||
"usb": {
|
||||
"device_version": "1.0.0",
|
||||
"pid": "0x0000",
|
||||
"vid": "0xFEED"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_ortho_5x3": {
|
||||
"layout": [
|
||||
{"matrix":[0,0],"x":0,"y":0},
|
||||
{"matrix":[1,0],"x":0,"y":1},
|
||||
{"matrix":[1,1],"x":1,"y":1},
|
||||
{"matrix":[1,2],"x":2,"y":1},
|
||||
{"matrix":[2,0],"x":0,"y":2},
|
||||
{"matrix":[2,1],"x":1,"y":2},
|
||||
{"matrix":[2,2],"x":2,"y":2},
|
||||
{"matrix":[3,0],"x":0,"y":3},
|
||||
{"matrix":[3,1],"x":1,"y":3},
|
||||
{"matrix":[3,2],"x":2,"y":3},
|
||||
{"matrix":[4,0],"x":0,"y":4},
|
||||
{"matrix":[4,1],"x":1,"y":4},
|
||||
{"matrix":[4,2],"x":2,"y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
22
hackpads/Bat-Board/Firmware/QMK/keymaps/default/keymap.c
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT_ortho_5x3(
|
||||
KC_LEFT_CTRL,
|
||||
KC_ESCAPE, KC_LEFT_GUI, KC_BACKSPACE,
|
||||
KC_TAB, KC_NUM_LOCK, KC_RIGHT_ALT,
|
||||
KC_LEFT_CTRL, KC_A, KC_ENTER,
|
||||
KC_B, KC_C, KC_D
|
||||
)
|
||||
};
|
||||
#ifdef OLED_ENABLE
|
||||
|
||||
bool oled_task_user() {
|
||||
oled_clear();
|
||||
oled_write_P(PSTR("Testing OLED!"), false); // Replace THIS line with whatever you'd like the OLED to display.
|
||||
// There are more details in the OLED page!
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
2
hackpads/Bat-Board/Firmware/QMK/keymaps/via/README.md
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
# VIA Support
|
||||
Not complete.
|
||||
56
hackpads/Bat-Board/Firmware/QMK/keymaps/via/keymap.c
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/*
|
||||
* ┬───┐
|
||||
* │ 2 │
|
||||
* ├───┼───┼───┤
|
||||
* │ 3 │ 5 │ 6 │
|
||||
* └───┴───┴───┘
|
||||
*/
|
||||
|
||||
/*
|
||||
The wiring is a little convoluted - refer to the diagram below:
|
||||
|
||||
*/
|
||||
[_BASE] = LAYOUT(
|
||||
KC_P7, KC_P8, KC_P4,
|
||||
KC_P5, KC_P6
|
||||
)
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM encoder_map[][1][2] = {
|
||||
[0] = { ENCODER_CCW_CW(MS_WHLU, MS_WHLD) },
|
||||
};
|
||||
|
||||
|
||||
#ifdef OLED_ENABLE
|
||||
bool oled_task_user(void) {
|
||||
// Host Keyboard Layer Status
|
||||
oled_write_P(PSTR("Layer: "), false);
|
||||
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _BASE:
|
||||
oled_write_P(PSTR("Default\n"), false);
|
||||
break;
|
||||
default:
|
||||
// Or use the write_ln shortcut over adding '\n' to the end of your string
|
||||
oled_write_ln_P(PSTR("Undefined"), false);
|
||||
}
|
||||
|
||||
// Host Keyboard LED Status
|
||||
led_t led_state = host_keyboard_led_state();
|
||||
oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
|
||||
oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
|
||||
oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
1
hackpads/Bat-Board/Firmware/QMK/keymaps/via/rules.mk
Normal file
|
|
@ -0,0 +1 @@
|
|||
VIA_ENABLE = yes
|
||||
0
hackpads/Bat-Board/Firmware/QMK/readme.md
Normal file
4
hackpads/Bat-Board/Firmware/QMK/rules.mk
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
OLED_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
||||
CONSOLE_ENABLE = yes
|
||||
DEBUG_MATRIX_SCAN_RATE = yes
|
||||
6
hackpads/Bat-Board/Firmware/README.md
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
# Firmware
|
||||
|
||||
|
||||
|
||||
|
||||
**QMK:** This is a port of Bat-Board to QMK firmware. Very primitive setup currently, but it works!
|
||||
BIN
hackpads/Bat-Board/Images/cad_3d.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
hackpads/Bat-Board/Images/cad_3d_2.png
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
hackpads/Bat-Board/Images/cad_3d_3.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
hackpads/Bat-Board/Images/pcb_3d_b.png
Normal file
|
After Width: | Height: | Size: 111 KiB |
BIN
hackpads/Bat-Board/Images/pcb_3d_f.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
hackpads/Bat-Board/Images/pcb_b.png
Normal file
|
After Width: | Height: | Size: 143 KiB |
BIN
hackpads/Bat-Board/Images/pcb_f.png
Normal file
|
After Width: | Height: | Size: 162 KiB |
BIN
hackpads/Bat-Board/Images/schematics.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
20650
hackpads/Bat-Board/PCB/Macropad 2.kicad_pcb
Normal file
83
hackpads/Bat-Board/PCB/Macropad 2.kicad_prl
Normal 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": "Macropad 2.kicad_prl",
|
||||
"version": 3
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
}
|
||||
}
|
||||
584
hackpads/Bat-Board/PCB/Macropad 2.kicad_pro
Normal file
|
|
@ -0,0 +1,584 @@
|
|||
{
|
||||
"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.05,
|
||||
"copper_line_width": 0.2,
|
||||
"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.05,
|
||||
"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.1,
|
||||
"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.1,
|
||||
"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.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"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",
|
||||
"holes_co_located": "warning",
|
||||
"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.5,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"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": "Macropad 2.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.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "../../../Kicad/",
|
||||
"plot": "D:/Macropad/",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "",
|
||||
"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
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"name": "Grouped By Value",
|
||||
"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": [
|
||||
[
|
||||
"78f51236-0545-46dd-bba1-14a80158c8bf",
|
||||
"Root"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
}
|
||||
5487
hackpads/Bat-Board/PCB/Macropad 2.kicad_sch
Normal file
BIN
hackpads/Bat-Board/PCB/Macropad.zip
Normal file
5400
hackpads/Bat-Board/PCB/Macropad_Schematics.pdf
Normal file
35366
hackpads/Bat-Board/Production/Case/3DShell_3DShell_Macropad 2_B.stl
Normal file
21646
hackpads/Bat-Board/Production/Case/3DShell_3DShell_Macropad 2_T.stl
Normal file
35366
hackpads/Bat-Board/Production/Case/3DShell_Macropad_Box_B.stl
Normal file
21646
hackpads/Bat-Board/Production/Case/3DShell_Macropad_Box_T.stl
Normal file
BIN
hackpads/Bat-Board/Production/Macropad.zip
Normal file
72
hackpads/Bat-Board/Readme.md
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
# Bat-Board
|
||||
|
||||
Bat-Board is a 12 key macropad with an OLED Display. It uses QMK firmware, easy to use and customize macro
|
||||
|
||||
I tried to make a multipupose and multi layer macropad. 1 layer for 1 purpose. I tried to make somthing like adafruit or protodesigns macropad. It will work like them but need a better case more like acrylic. I have used all of this first time. It was fun somtimes and sometimes frustrating. If think i need to add a stand like system in the case but building it is a liitle hard for me.
|
||||
|
||||
## Features:
|
||||
- Multilayer Functionality.
|
||||
- 128x32 OLED Display
|
||||
- First key for main controller or for whatever you want
|
||||
- 12 Keys
|
||||
|
||||
|
||||
|
||||
## PCB
|
||||
Here's my PCB! It was made in KiCad. I was thing of using a silkscreen but didn't like anything .
|
||||
|
||||
<img src=Images/pcb_f.png alt="Pcb" width="300"/>
|
||||
<img src=Images/pcb_b.png alt="Pcb" width="300"/>
|
||||
<img src=Images/pcb_3d_f.png alt="Pcb" width="300"/>
|
||||
<img src=Images/pcb_3d_b.png alt="Pcb" width="300"/>
|
||||
|
||||
Schematic
|
||||
- [Schematics](/PCB/Macropad_Schematics.pdf)
|
||||
|
||||
<img src=Images/schematics.png alt="schematics" width="300"/>
|
||||
|
||||
|
||||
## Firmware Overview
|
||||
This hackpad uses [QMK](https://qmk.fm/) firmware for everything.
|
||||
|
||||
- The main left button is for contol purpose works as togle and to switch between layers and more. More like ctrl button of keyboard
|
||||
- Last 4 white keys will be the arrow keys of keyboard. Other keys are custom set macros and links.
|
||||
- The OLED is Not decided yet but i am thing of something from naruto or demon slayer
|
||||
|
||||
|
||||
I might add more in the future! That's it for now
|
||||
|
||||
## CAD:
|
||||
|
||||
<img src=Images/cad_3d.png alt="Cad" width="300"/>
|
||||
<img src=Images/cad_3d_2.png alt="Cad" width="300"/>
|
||||
<img src=Images/cad_3d_3.png alt="Cad" width="300"/>
|
||||
|
||||
## BOM:
|
||||
|
||||
Here should be everything you need to make this hackpad
|
||||
|
||||
- 13x Cherry MX Switches
|
||||
- 4x SK6812 MINI Leds
|
||||
- 1x XIAO RP2040
|
||||
- 4x Blank DSA Keycaps
|
||||
- 9x M3x16 Bolt
|
||||
- 9x M3 Heatset
|
||||
- 1x 0.91" 128x32 OLED Display
|
||||
- 13x Through-hole 1N4148 Diodes
|
||||
- 1x Red Blank DSA keycaps
|
||||
- 4x White Blank DSA keycaps
|
||||
- 9x Black Blank DSA keycaps
|
||||
- 9x M3 hex nuts
|
||||
|
||||
Extras:-
|
||||
- Few Jump Wires
|
||||
- Breadboard
|
||||
- A soldering iron and its required materials
|
||||
For testing before placing
|
||||
- a sd card
|
||||
|
||||
Others:
|
||||
- KMK Firmware
|
||||
- Top Case.stl
|
||||
- Bottom Case.stl
|
||||
19
hackpads/Bat-Board/test.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"version": 1,
|
||||
"notes": "",
|
||||
"documentation": "This file is a QMK Configurator export. You can import this at <https://config.qmk.fm>. It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: <https://docs.qmk.fm/#/newbs>\n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`",
|
||||
"keyboard": "my_custom_keyboard",
|
||||
"keymap": "default",
|
||||
"layout": "LAYOUT_custom",
|
||||
"layers": [
|
||||
[
|
||||
"KC_ESC", // k0: Isolated key
|
||||
"KC_Q", "KC_W", "KC_E", // Row 1
|
||||
"KC_A", "KC_S", "KC_D", // Row 2
|
||||
"KC_Z", "KC_X", "KC_C", // Row 3
|
||||
"KC_1", "KC_2", "KC_3" // Row 4
|
||||
],
|
||||
|
||||
],
|
||||
"author": ""
|
||||
}
|
||||
107691
hackpads/BluePunia's hackpad/CAD/how_the_hackpad_should_look.step
Normal file
9160
hackpads/BluePunia's hackpad/PCB/projekt.kicad_pcb
Normal file
608
hackpads/BluePunia's hackpad/PCB/projekt.kicad_pro
Normal file
|
|
@ -0,0 +1,608 @@
|
|||
{
|
||||
"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.05,
|
||||
"copper_line_width": 0.2,
|
||||
"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.05,
|
||||
"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.1,
|
||||
"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.1,
|
||||
"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.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.1,
|
||||
"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",
|
||||
"holes_co_located": "warning",
|
||||
"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.5,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"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": "projekt.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.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
"netclass_patterns": []
|
||||
},
|
||||
"pcbnew": {
|
||||
"last_paths": {
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "../pcb gerbers/",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "projekt.step",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "",
|
||||
"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": "Sim.Device",
|
||||
"name": "Sim.Device",
|
||||
"show": false
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Sim.Pins",
|
||||
"name": "Sim.Pins",
|
||||
"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": [
|
||||
[
|
||||
"75fff938-4637-4fc9-9588-e755eafbab70",
|
||||
"Root"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
}
|
||||
3905
hackpads/BluePunia's hackpad/PCB/projekt.kicad_sch
Normal file
49
hackpads/BluePunia's hackpad/README.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
# BluePunia's hackpad
|
||||
## INSPIRATION
|
||||
I wanted to create something PCB-related for the first time in my life - wanted to learn something new.
|
||||
|
||||
I created a rather simple design, yet it was challenging for me cause I've never used KiCad or Fusion 360 before.
|
||||
|
||||
## Design:
|
||||
My hackpad uses 9 switches and 3 RGB diodes, it's simple but also very useful for programmers or streamers.
|
||||

|
||||
|
||||
## Schematic:
|
||||

|
||||
|
||||
## PCB:
|
||||

|
||||
|
||||
## Case:
|
||||

|
||||

|
||||
|
||||
(It's branded on the very bottom)
|
||||
|
||||
## BOM:
|
||||
9x Cherry MX Switches
|
||||
|
||||
9x DSA keycaps (white if possible)
|
||||
|
||||
4x M3x16mm bolts
|
||||
|
||||
3x 1N4148 diodes
|
||||
|
||||
1x XIAO RP2040
|
||||
|
||||
1x case (2 printed parts)
|
||||
|
||||
1x custom PCB
|
||||
|
||||
## Firmware
|
||||
|
||||
The macropad is designed to have 3 layers, so basically instead of 9 binds I have 27. The user knows on which layer he is by looking at the RGB diodes, each one of them turned on tells the user on which layer he's on.
|
||||
|
||||
## Others:
|
||||
It was an amazing journey making this hackpad, fortunately my friends helped me a bit.
|
||||
(I couldn't import the 3d model of the 1N4148 diode into the 3D view of the entire hackpad, Sorry :33)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
BIN
hackpads/BluePunia's hackpad/assets/image-1.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
hackpads/BluePunia's hackpad/assets/image-2.png
Normal file
|
After Width: | Height: | Size: 290 KiB |
BIN
hackpads/BluePunia's hackpad/assets/image-3.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
hackpads/BluePunia's hackpad/assets/image-4.png
Normal file
|
After Width: | Height: | Size: 115 KiB |
BIN
hackpads/BluePunia's hackpad/assets/image.png
Normal file
|
After Width: | Height: | Size: 404 KiB |
71
hackpads/BluePunia's hackpad/firmware/main.py
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
import board
|
||||
import time
|
||||
from kmk.kmk_keyboard import KMKKeyboard
|
||||
from kmk.kmk.scanners.keypad import MatrixScanner
|
||||
from kmk.keys import KC
|
||||
from kmk.extensions.peg_rgb_matrix import Rgb_matrix
|
||||
|
||||
keyboard = KMKKeyboard()
|
||||
|
||||
# Initialize the RGB matrix
|
||||
rgb = Rgb_matrix()
|
||||
keyboard.extensions.append(rgb)
|
||||
|
||||
keyboard.matrix = MatrixScanner(
|
||||
column_pins=[board.GP4, board.GP2, board.GP1],
|
||||
row_pins=[board.GP6, board.GP7, board.GP0],
|
||||
value_when_pressed=False,
|
||||
)
|
||||
|
||||
keyboard.keymap = [
|
||||
# Layer 0
|
||||
[
|
||||
[KC.F13, KC.F14, KC.F15],
|
||||
[KC.F16, KC.F17, KC.F18],
|
||||
[KC.F19, KC.F20, KC.F21],
|
||||
],
|
||||
# Layer 1
|
||||
[
|
||||
[KC.F13, KC.F23, KC.F24],
|
||||
[KC.F25, KC.F26, KC.F27],
|
||||
[KC.F28, KC.F29, KC.F30],
|
||||
],
|
||||
# Layer 2
|
||||
[
|
||||
[KC.F13, KC.F32, KC.F33],
|
||||
[KC.F34, KC.F35, KC.F36],
|
||||
[KC.F37, KC.F38, KC.F39],
|
||||
],
|
||||
]
|
||||
|
||||
# Function to switch layers and control LEDs
|
||||
def switch_layer(layer):
|
||||
keyboard.active_layers = [layer]
|
||||
if layer == 0:
|
||||
rgb.set_pixel(0, 255, 0, 0) # Red for layer 0
|
||||
rgb.set_pixel(1, 0, 0, 0) # Off for other LEDs
|
||||
rgb.set_pixel(2, 0, 0, 0)
|
||||
elif layer == 1:
|
||||
rgb.set_pixel(0, 0, 0, 0) # Off for other LEDs
|
||||
rgb.set_pixel(1, 0, 255, 0) # Green for layer 1
|
||||
rgb.set_pixel(2, 0, 0, 0)
|
||||
elif layer == 2:
|
||||
rgb.set_pixel(0, 0, 0, 0) # Off for other LEDs
|
||||
rgb.set_pixel(1, 0, 0, 0)
|
||||
rgb.set_pixel(2, 0, 0, 255) # Blue for layer 2
|
||||
rgb.write()
|
||||
|
||||
# Set initial layer and LED state
|
||||
current_layer = 0
|
||||
switch_layer(current_layer)
|
||||
|
||||
# Main loop to handle key events
|
||||
while True:
|
||||
keyboard.update()
|
||||
if keyboard.matrix.is_pressed(0, 0): # Check if the first key is pressed
|
||||
current_layer = (current_layer + 1) % 3 # Cycle through layers 0, 1, 2
|
||||
switch_layer(current_layer)
|
||||
time.sleep(0.3) # Debounce delay
|
||||
|
||||
if __name__ == '__main__':
|
||||
keyboard.go()
|
||||
10795
hackpads/BluePunia's hackpad/production/BluePunia's.bottomside v2.step
Normal file
3383
hackpads/BluePunia's hackpad/production/BluePunia's_topside.step
Normal file
BIN
hackpads/BluePunia's hackpad/production/gerbers.zip.zip
Normal file
71
hackpads/BluePunia's hackpad/production/main.py
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
import board
|
||||
import time
|
||||
from kmk.kmk_keyboard import KMKKeyboard
|
||||
from kmk.kmk.scanners.keypad import MatrixScanner
|
||||
from kmk.keys import KC
|
||||
from kmk.extensions.peg_rgb_matrix import Rgb_matrix
|
||||
|
||||
keyboard = KMKKeyboard()
|
||||
|
||||
# Initialize the RGB matrix
|
||||
rgb = Rgb_matrix()
|
||||
keyboard.extensions.append(rgb)
|
||||
|
||||
keyboard.matrix = MatrixScanner(
|
||||
column_pins=[board.GP4, board.GP2, board.GP1],
|
||||
row_pins=[board.GP6, board.GP7, board.GP0],
|
||||
value_when_pressed=False,
|
||||
)
|
||||
|
||||
keyboard.keymap = [
|
||||
# Layer 0
|
||||
[
|
||||
[KC.F13, KC.F14, KC.F15],
|
||||
[KC.F16, KC.F17, KC.F18],
|
||||
[KC.F19, KC.F20, KC.F21],
|
||||
],
|
||||
# Layer 1
|
||||
[
|
||||
[KC.F13, KC.F23, KC.F24],
|
||||
[KC.F25, KC.F26, KC.F27],
|
||||
[KC.F28, KC.F29, KC.F30],
|
||||
],
|
||||
# Layer 2
|
||||
[
|
||||
[KC.F13, KC.F32, KC.F33],
|
||||
[KC.F34, KC.F35, KC.F36],
|
||||
[KC.F37, KC.F38, KC.F39],
|
||||
],
|
||||
]
|
||||
|
||||
# Function to switch layers and control LEDs
|
||||
def switch_layer(layer):
|
||||
keyboard.active_layers = [layer]
|
||||
if layer == 0:
|
||||
rgb.set_pixel(0, 255, 0, 0) # Red for layer 0
|
||||
rgb.set_pixel(1, 0, 0, 0) # Off for other LEDs
|
||||
rgb.set_pixel(2, 0, 0, 0)
|
||||
elif layer == 1:
|
||||
rgb.set_pixel(0, 0, 0, 0) # Off for other LEDs
|
||||
rgb.set_pixel(1, 0, 255, 0) # Green for layer 1
|
||||
rgb.set_pixel(2, 0, 0, 0)
|
||||
elif layer == 2:
|
||||
rgb.set_pixel(0, 0, 0, 0) # Off for other LEDs
|
||||
rgb.set_pixel(1, 0, 0, 0)
|
||||
rgb.set_pixel(2, 0, 0, 255) # Blue for layer 2
|
||||
rgb.write()
|
||||
|
||||
# Set initial layer and LED state
|
||||
current_layer = 0
|
||||
switch_layer(current_layer)
|
||||
|
||||
# Main loop to handle key events
|
||||
while True:
|
||||
keyboard.update()
|
||||
if keyboard.matrix.is_pressed(0, 0): # Check if the first key is pressed
|
||||
current_layer = (current_layer + 1) % 3 # Cycle through layers 0, 1, 2
|
||||
switch_layer(current_layer)
|
||||
time.sleep(0.3) # Debounce delay
|
||||
|
||||
if __name__ == '__main__':
|
||||
keyboard.go()
|
||||
BIN
hackpads/CT5_Macropad/BottomPlate.png
Normal file
|
After Width: | Height: | Size: 107 KiB |