Compare commits

...

16 Commits

36 changed files with 124359 additions and 19 deletions

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

92107
HW/timer_button/fp-info-cache Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,29 @@
Designator,Footprint,Quantity,Value,LCSC Part #
BZ1,Buzzer_12x9.5RM7.6,1,Buzzer,
"C1, C10, C11, C12, C17, C2, C4, C5, C6, C7, C8, C9",0805,12,100n,
"C13, C14",0805,2,1u,
"C15, C16",0805,2,12p,
C3,0805,1,10n,
D1,WSON-6-1EP_3x3mm_P0.95mm,1,TPD3E001DRSR,
"D10, D11, D12, D3, D4, D5, D6, D7, D8, D9",LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm,10,WS2812B,
D2,1206,1,LED,
J1,USB_C_Receptacle_HRO_TYPE-C-31-M-12,1,USB_C_Receptacle_USB2.0_16P,
J2,PinHeader_1x02_P2.54mm_Vertical,1,Conn_01x02,
"J3, J8, J9",PinHeader_1x03_P2.54mm_Vertical,3,Conn_01x03,
J4,PinHeader_1x06_P2.54mm_Vertical,1,Conn_01x06,
"J5, J6",PinHeader_1x04_P2.54mm_Vertical,2,Conn_01x04,
J7,PinHeader_2x05_P2.54mm_Vertical,1,Conn_02x05_Odd_Even,
JP1,SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm,1,Jumper_2_Open,
"Q1, Q3",SOT-23,2,BSS123T-HF,
Q2,TSOP-6_1.65x3.05mm_P0.95mm,1,PMN30XPEAX,
"R1, R7",0805,2,5k1,
"R10, R11, R12, R13, R15, R2, R4, R8",0805,8,10k,
R14,0805,1,560R,
"R3, R9",0805,2,1k,
"R5, R6",0805,2,27R,
SW1,SW_Cherry_MX_1.00u_PCB,1,SW_Push,
"SW2, SW3",SW_SPST_TL3342,2,SW_Push,
U1,QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm,1,RP2040,
U2,SOIC-8_5.23x5.23mm_P1.27mm,1,W25Q128JVS,
U3,SOT-23-5_HandSoldering,1,SP6205EM5-L-3-3,
Y1,Crystal_SMD_5032-2Pin_5.0x3.2mm,1,12MHz,
1 Designator Footprint Quantity Value LCSC Part #
2 BZ1 Buzzer_12x9.5RM7.6 1 Buzzer
3 C1, C10, C11, C12, C17, C2, C4, C5, C6, C7, C8, C9 0805 12 100n
4 C13, C14 0805 2 1u
5 C15, C16 0805 2 12p
6 C3 0805 1 10n
7 D1 WSON-6-1EP_3x3mm_P0.95mm 1 TPD3E001DRSR
8 D10, D11, D12, D3, D4, D5, D6, D7, D8, D9 LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm 10 WS2812B
9 D2 1206 1 LED
10 J1 USB_C_Receptacle_HRO_TYPE-C-31-M-12 1 USB_C_Receptacle_USB2.0_16P
11 J2 PinHeader_1x02_P2.54mm_Vertical 1 Conn_01x02
12 J3, J8, J9 PinHeader_1x03_P2.54mm_Vertical 3 Conn_01x03
13 J4 PinHeader_1x06_P2.54mm_Vertical 1 Conn_01x06
14 J5, J6 PinHeader_1x04_P2.54mm_Vertical 2 Conn_01x04
15 J7 PinHeader_2x05_P2.54mm_Vertical 1 Conn_02x05_Odd_Even
16 JP1 SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm 1 Jumper_2_Open
17 Q1, Q3 SOT-23 2 BSS123T-HF
18 Q2 TSOP-6_1.65x3.05mm_P0.95mm 1 PMN30XPEAX
19 R1, R7 0805 2 5k1
20 R10, R11, R12, R13, R15, R2, R4, R8 0805 8 10k
21 R14 0805 1 560R
22 R3, R9 0805 2 1k
23 R5, R6 0805 2 27R
24 SW1 SW_Cherry_MX_1.00u_PCB 1 SW_Push
25 SW2, SW3 SW_SPST_TL3342 2 SW_Push
26 U1 QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mm 1 RP2040
27 U2 SOIC-8_5.23x5.23mm_P1.27mm 1 W25Q128JVS
28 U3 SOT-23-5_HandSoldering 1 SP6205EM5-L-3-3
29 Y1 Crystal_SMD_5032-2Pin_5.0x3.2mm 1 12MHz

View File

@@ -0,0 +1,66 @@
BZ1:1
C1:1
C10:1
C11:1
C12:1
C13:1
C14:1
C15:1
C16:1
C17:1
C2:1
C3:1
C4:1
C5:1
C6:1
C7:1
C8:1
C9:1
D1:1
D10:1
D11:1
D12:1
D2:1
D3:1
D4:1
D5:1
D6:1
D7:1
D8:1
D9:1
J1:1
J2:1
J3:1
J4:1
J5:1
J6:1
J7:1
J8:1
J9:1
JP1:1
Q1:1
Q2:1
Q3:1
R1:1
R10:1
R11:1
R12:1
R13:1
R14:1
R15:1
R2:1
R3:1
R4:1
R5:1
R6:1
R7:1
R8:1
R9:1
REF**:1
SW1:1
SW2:1
SW3:1
U1:1
U2:1
U3:1
Y1:1
1 BZ1:1
2 C1:1
3 C10:1
4 C11:1
5 C12:1
6 C13:1
7 C14:1
8 C15:1
9 C16:1
10 C17:1
11 C2:1
12 C3:1
13 C4:1
14 C5:1
15 C6:1
16 C7:1
17 C8:1
18 C9:1
19 D1:1
20 D10:1
21 D11:1
22 D12:1
23 D2:1
24 D3:1
25 D4:1
26 D5:1
27 D6:1
28 D7:1
29 D8:1
30 D9:1
31 J1:1
32 J2:1
33 J3:1
34 J4:1
35 J5:1
36 J6:1
37 J7:1
38 J8:1
39 J9:1
40 JP1:1
41 Q1:1
42 Q2:1
43 Q3:1
44 R1:1
45 R10:1
46 R11:1
47 R12:1
48 R13:1
49 R14:1
50 R15:1
51 R2:1
52 R3:1
53 R4:1
54 R5:1
55 R6:1
56 R7:1
57 R8:1
58 R9:1
59 REF**:1
60 SW1:1
61 SW2:1
62 SW3:1
63 U1:1
64 U2:1
65 U3:1
66 Y1:1

Binary file not shown.

View File

@@ -0,0 +1,353 @@
P CODE 00
P UNITS CUST 0
P arrayDim N
317GND VIA MD0157PA00X+052283Y-035827X0315Y0000R000S3
317GND VIA MD0157PA00X+053701Y-035827X0315Y0000R000S3
317GND VIA MD0157PA00X+057323Y-029921X0315Y0000R000S3
317GND VIA MD0157PA00X+053307Y-034409X0315Y0000R000S3
317GND VIA MD0157PA00X+054252Y-033622X0315Y0000R000S3
317+1V1 VIA MD0157PA00X+056929Y-033701X0315Y0000R000S3
317GND VIA MD0157PA00X+054882Y-044173X0315Y0000R000S3
317GND VIA MD0157PA00X+055433Y-043071X0315Y0000R000S3
317GND VIA MD0157PA00X+061181Y-028425X0315Y0000R000S3
317NET-(D2-A) VIA MD0157PA00X+053189Y-037165X0315Y0000R000S3
317NET-(D2-A) VIA MD0157PA00X+050945Y-036772X0315Y0000R000S3
317VCC VIA MD0157PA00X+061496Y-037083X0315Y0000R000S3
317/RST VIA MD0157PA00X+061969Y-036142X0315Y0000R000S3
317/RST VIA MD0157PA00X+060295Y-041142X0315Y0000R000S3
317+BATT VIA MD0157PA00X+055433Y-046530X0315Y0000R000S3
317/BUZZ VIA MD0157PA00X+062205Y-042520X0315Y0000R000S3
317/NEOPIXEL VIA MD0157PA00X+062598Y-042205X0315Y0000R000S3
317/NEOPIXEL VIA MD0157PA00X+060020Y-048957X0315Y0000R000S3
317/TX VIA MD0157PA00X+066772Y-036540X0315Y0000R000S3
317/RX VIA MD0157PA00X+066494Y-036262X0315Y0000R000S3
317/NEOPIXEL VIA MD0157PA00X+066260Y-035933X0315Y0000R000S3
317/BUZZ VIA MD0157PA00X+065938Y-035706X0315Y0000R000S3
317/SDA VIA MD0157PA00X+065660Y-035428X0315Y0000R000S3
317/SCL VIA MD0157PA00X+065382Y-035149X0315Y0000R000S3
317NET-(D8-DOUT) VIA MD0157PA00X+063848Y-029490X0315Y0000R000S3
317/CHRG VIA MD0157PA00X+051260Y-042520X0315Y0000R000S3
317NET-(D10-DOUT) VIA MD0157PA00X+070080Y-041182X0315Y0000R000S3
317NET-(D10-DOUT) VIA MD0157PA00X+068456Y-041433X0315Y0000R000S3
317NET-(D10-DIN) VIA MD0157PA00X+067879Y-035476X0315Y0000R000S3
317NET-(D10-DIN) VIA MD0157PA00X+067795Y-033622X0315Y0000R000S3
317NET-(D8-DOUT) VIA MD0157PA00X+060079Y-028425X0315Y0000R000S3
317NET-(D7-DOUT) VIA MD0157PA00X+058031Y-029055X0315Y0000R000S3
317NET-(D7-DOUT) VIA MD0157PA00X+058094Y-029780X0315Y0000R000S3
317NET-(D5-DOUT) VIA MD0157PA00X+047638Y-038504X0315Y0000R000S3
317NET-(D5-DOUT) VIA MD0157PA00X+049632Y-037346X0315Y0000R000S3
317NET-(D4-DOUT) VIA MD0157PA00X+050709Y-045197X0315Y0000R000S3
317NET-(D4-DOUT) VIA MD0157PA00X+050235Y-043244X0315Y0000R000S3
317/BOOT VIA MD0157PA00X+052480Y-035118X0315Y0000R000S3
317NET-(C16-PAD1) VIA MD0157PA00X+063071Y-034961X0315Y0000R000S3
317NET-(U1-XIN) VIA MD0157PA00X+063071Y-033465X0315Y0000R000S3
317VCC VIA MD0157PA00X+054252Y-032677X0315Y0000R000S3
317T-(U1-QSPI_SS) VIA MD0157PA00X+054488Y-030157X0315Y0000R000S3
317T-(U1-QSPI_SS) VIA MD0157PA00X+055669Y-030157X0315Y0000R000S3
317-(U1-QSPI_SD1) VIA MD0157PA00X+054961Y-030433X0315Y0000R000S3
317-(U1-QSPI_SD1) VIA MD0157PA00X+055948Y-030436X0315Y0000R000S3
317GND VIA MD0157PA00X+049741Y-038789X0315Y0000R000S3
317+5V VIA MD0157PA00X+049909Y-038433X0315Y0000R000S3
317NET-(D1-IO2) VIA MD0157PA00X+050000Y-039134X0315Y0000R000S3
317NET-(D1-IO1) VIA MD0157PA00X+050000Y-039606X0315Y0000R000S3
317VCC VIA MD0157PA00X+058031Y-032913X0315Y0000R000S3
317VCC VIA MD0157PA00X+057323Y-034316X0315Y0000R000S3
317+1V1 VIA MD0157PA00X+056378Y-032874X0315Y0000R000S3
317+1V1 VIA MD0157PA00X+055748Y-034316X0315Y0000R000S3
317VCC VIA MD0157PA00X+059372Y-031804X0315Y0000R000S3
317VCC VIA MD0157PA00X+058189Y-031811X0315Y0000R000S3
317NET-(J9-PIN_3) VIA MD0157PA00X+053251Y-036641X0315Y0000R000S3
317NET-(J9-PIN_2) VIA MD0157PA00X+053622Y-036772X0315Y0000R000S3
317/V_BATT VIA MD0157PA00X+054882Y-038110X0315Y0000R000S3
317/V_BATT VIA MD0157PA00X+054862Y-037480X0315Y0000R000S3
317VCC VIA MD0157PA00X+061102Y-038268X0315Y0000R000S3
317NET-(J8-PIN_2) VIA MD0157PA00X+059802Y-036648X0315Y0000R000S3
317NET-(J8-PIN_3) VIA MD0157PA00X+059409Y-036614X0315Y0000R000S3
317/CHRG VIA MD0157PA00X+059329Y-037049X0315Y0000R000S3
317VCC VIA MD0157PA00X+059449Y-033701X0315Y0000R000S3
317/CS VIA MD0157PA00X+061890Y-038268X0315Y0000R000S3
317/CS VIA MD0157PA00X+061890Y-036929X0315Y0000R000S3
317/MISO VIA MD0157PA00X+062283Y-038268X0315Y0000R000S3
317/MISO VIA MD0157PA00X+062283Y-036929X0315Y0000R000S3
317GND VIA MD0394PA00X+059055Y-032756X0787Y0000R000S3
317/RST VIA MD0157PA00X+061614Y-033391X0315Y0000R000S3
317/SWDIO VIA MD0157PA00X+060945Y-033268X0315Y0000R000S3
317/SWCLK VIA MD0157PA00X+061339Y-033110X0315Y0000R000S3
317VCC VIA MD0157PA00X+061890Y-034316X0315Y0000R000S3
317+1V1 VIA MD0157PA00X+060000Y-032992X0315Y0000R000S3
367N/C REF** D1260UA00X+062992Y-045669X1260Y0000R000S3
327GND C1 -1 A02X+058553Y-038189X0463Y0571R000S1
327ET-(U1-GPIO24) C1 -2 A02X+059370Y-038189X0463Y0571R000S1
327/RST SW3 -1 A02X+060295Y-041142X0669Y0394R180S1
327/RST SW3 -1 A02X+057815Y-041142X0669Y0394R180S1
327GND SW3 -2 A02X+057815Y-042638X0669Y0394R180S1
327GND SW3 -2 A02X+060295Y-042638X0669Y0394R180S1
327/BOOT SW2 -1 A02X+051443Y-033414X0669Y0394R315S1
327/BOOT SW2 -1 A02X+053197Y-031660X0669Y0394R315S1
327GND SW2 -2 A02X+052139Y-030602X0669Y0394R315S1
327GND SW2 -2 A02X+050385Y-032356X0669Y0394R315S1
327NET-(U1-XIN) Y1 -1 A01X+063071Y-033504X0787Y0945R090S2
327NET-(C16-PAD1) Y1 -2 A01X+063071Y-034961X0787Y0945R090S2
327+BATT U3 -1 A02X+056122Y-045748X0614Y0256R270S1
327GND U3 -2 A02X+055748Y-045748X0614Y0256R270S1
327+BATT U3 -3 A02X+055374Y-045748X0614Y0256R270S1
327NET-(U3-NC) U3 -4 A02X+055374Y-044685X0614Y0256R270S1
327VCC U3 -5 A02X+056122Y-044685X0614Y0256R270S1
327T-(U1-QSPI_SS) U2 -1 A02X+054289Y-029213X0630Y0236R090S1
327-(U1-QSPI_SD1) U2 -2 A02X+054789Y-029213X0630Y0236R090S1
327-(U1-QSPI_SD2) U2 -3 A02X+055289Y-029213X0630Y0236R090S1
327GND U2 -4 A02X+055789Y-029213X0630Y0236R090S1
327-(U1-QSPI_SD0) U2 -5 A02X+055789Y-032047X0630Y0236R090S1
327(U1-QSPI_SCLK) U2 -6 A02X+055289Y-032047X0630Y0236R090S1
327-(U1-QSPI_SD3) U2 -7 A02X+054789Y-032047X0630Y0236R090S1
327VCC U2 -8 A02X+054289Y-032047X0630Y0236R090S1
327VCC U1 -1 A02X+058031Y-031403X0344Y0079R090S1
327/TX U1 -2 A02X+058189Y-031403X0344Y0079R090S1
327/RX U1 -3 A02X+058346Y-031403X0344Y0079R090S1
327/NEOPIXEL U1 -4 A02X+058504Y-031403X0344Y0079R090S1
327/BUZZ U1 -5 A02X+058661Y-031403X0344Y0079R090S1
327/SDA U1 -6 A02X+058819Y-031403X0344Y0079R090S1
327/SCL U1 -7 A02X+058976Y-031403X0344Y0079R090S1
327ET-(J7-PIN_10) U1 -8 A02X+059134Y-031403X0344Y0079R090S1
327NET-(J7-PIN_8) U1 -9 A02X+059291Y-031403X0344Y0079R090S1
327VCC U1 -10 A02X+059449Y-031403X0344Y0079R090S1
327NET-(J7-PIN_6) U1 -11 A02X+059606Y-031403X0344Y0079R090S1
327NET-(J7-PIN_4) U1 -12 A02X+059764Y-031403X0344Y0079R090S1
327NET-(J7-PIN_2) U1 -13 A02X+059921Y-031403X0344Y0079R090S1
327NET-(J7-PIN_1) U1 -14 A02X+060079Y-031403X0344Y0079R090S1
327NET-(J7-PIN_3) U1 -15 A02X+060408Y-031732X0079Y0344R090S1
327NET-(J7-PIN_5) U1 -16 A02X+060408Y-031890X0079Y0344R090S1
327NET-(J7-PIN_7) U1 -17 A02X+060408Y-032047X0079Y0344R090S1
327NET-(J7-PIN_9) U1 -18 A02X+060408Y-032205X0079Y0344R090S1
327GND U1 -19 A02X+060408Y-032362X0079Y0344R090S1
327NET-(U1-XIN) U1 -20 A02X+060408Y-032520X0079Y0344R090S1
327NET-(U1-XOUT) U1 -21 A02X+060408Y-032677X0079Y0344R090S1
327VCC U1 -22 A02X+060408Y-032835X0079Y0344R090S1
327+1V1 U1 -23 A02X+060408Y-032992X0079Y0344R090S1
327/SWCLK U1 -24 A02X+060408Y-033150X0079Y0344R090S1
327/SWDIO U1 -25 A02X+060408Y-033307X0079Y0344R090S1
327/RST U1 -26 A02X+060408Y-033465X0079Y0344R090S1
327/MISO U1 -27 A02X+060408Y-033622X0079Y0344R090S1
327/CS U1 -28 A02X+060408Y-033780X0079Y0344R090S1
327/CLK U1 -29 A02X+060079Y-034109X0344Y0079R090S1
327/MOSI U1 -30 A02X+059921Y-034109X0344Y0079R090S1
327NET-(J8-PIN_1) U1 -31 A02X+059764Y-034109X0344Y0079R090S1
327NET-(J8-PIN_2) U1 -32 A02X+059606Y-034109X0344Y0079R090S1
327VCC U1 -33 A02X+059449Y-034109X0344Y0079R090S1
327NET-(J8-PIN_3) U1 -34 A02X+059291Y-034109X0344Y0079R090S1
327/CHRG U1 -35 A02X+059134Y-034109X0344Y0079R090S1
327ET-(U1-GPIO24) U1 -36 A02X+058976Y-034109X0344Y0079R090S1
327NET-(D2-A) U1 -37 A02X+058819Y-034109X0344Y0079R090S1
327/V_BATT U1 -38 A02X+058661Y-034109X0344Y0079R090S1
327NET-(J9-PIN_1) U1 -39 A02X+058504Y-034109X0344Y0079R090S1
327NET-(J9-PIN_2) U1 -40 A02X+058346Y-034109X0344Y0079R090S1
327NET-(J9-PIN_3) U1 -41 A02X+058189Y-034109X0344Y0079R090S1
327VCC U1 -42 A02X+058031Y-034109X0344Y0079R090S1
327VCC U1 -43 A02X+057702Y-033780X0079Y0344R090S1
327VCC U1 -44 A02X+057702Y-033622X0079Y0344R090S1
327+1V1 U1 -45 A02X+057702Y-033465X0079Y0344R090S1
327/DN U1 -46 A02X+057702Y-033307X0079Y0344R090S1
327/DP U1 -47 A02X+057702Y-033150X0079Y0344R090S1
327VCC U1 -48 A02X+057702Y-032992X0079Y0344R090S1
327VCC U1 -49 A02X+057702Y-032835X0079Y0344R090S1
327+1V1 U1 -50 A02X+057702Y-032677X0079Y0344R090S1
327-(U1-QSPI_SD3) U1 -51 A02X+057702Y-032520X0079Y0344R090S1
327(U1-QSPI_SCLK) U1 -52 A02X+057702Y-032362X0079Y0344R090S1
327-(U1-QSPI_SD0) U1 -53 A02X+057702Y-032205X0079Y0344R090S1
327-(U1-QSPI_SD2) U1 -54 A02X+057702Y-032047X0079Y0344R090S1
327-(U1-QSPI_SD1) U1 -55 A02X+057702Y-031890X0079Y0344R090S1
327T-(U1-QSPI_SS) U1 -56 A02X+057702Y-031732X0079Y0344R090S1
327GND U1 -57 A02X+059055Y-032756X1260Y1260R090S1
367N/C SW1 D1575UA00X+059055Y-039370X1575Y0000R000S0
367N/C SW1 D0669UA00X+057055Y-039370X0669Y0000R000S0
367N/C SW1 D0669UA00X+061055Y-039370X0669Y0000R000S0
317ET-(U1-GPIO24) SW1 -1 D0591PA00X+060055Y-037370X0866Y0000R000S0
317GND SW1 -2 D0591PA00X+057555Y-038370X0866Y0000R000S0
327/BUZZ R15 -1 A02X+058425Y-044646X0472Y0551R000S1
327GND R15 -2 A02X+059213Y-044646X0472Y0551R000S1
327NET-(D2-K) R14 -1 A02X+049055Y-036772X0472Y0551R180S1
327GND R14 -2 A02X+048268Y-036772X0472Y0551R180S1
327VCC R13 -1 A02X+061102Y-038268X0472Y0551R180S1
327ET-(U1-GPIO24) R13 -2 A02X+060315Y-038268X0472Y0551R180S1
327NET-(Q1-D) R12 -1 A02X+051496Y-041890X0472Y0551R000S1
327+5V R12 -2 A02X+052283Y-041890X0472Y0551R000S1
327/CHRG R11 -1 A02X+049134Y-042598X0472Y0551R270S1
327GND R11 -2 A02X+049134Y-041811X0472Y0551R270S1
327/V_BATT R10 -1 A02X+053465Y-044094X0472Y0551R000S1
327GND R10 -2 A02X+054252Y-044094X0472Y0551R000S1
327/BOOT R9 -1 A01X+054173Y-035118X0472Y0551R270S2
327T-(U1-QSPI_SS) R9 -2 A01X+054173Y-034331X0472Y0551R270S2
327T-(U1-QSPI_SS) R8 -1 A01X+055039Y-033465X0472Y0551R270S2
327VCC R8 -2 A01X+055039Y-032677X0472Y0551R270S2
327GND R7 -1 A02X+051732Y-037402X0472Y0551R090S1
327NET-(J1-CC2) R7 -2 A02X+051732Y-038189X0472Y0551R090S1
327/DP R6 -1 A02X+052756Y-038898X0472Y0551R180S1
327NET-(D1-IO2) R6 -2 A02X+051969Y-038898X0472Y0551R180S1
327NET-(D1-IO1) R5 -1 A02X+051969Y-039685X0472Y0551R000S1
327/DN R5 -2 A02X+052756Y-039685X0472Y0551R000S1
327/RST R4 -2 A01X+061811Y-033465X0472Y0551R090S2
327VCC R4 -1 A01X+061811Y-032677X0472Y0551R090S2
327NET-(C16-PAD1) R3 -1 A02X+062520Y-033937X0472Y0551R270S1
327NET-(U1-XOUT) R3 -2 A02X+062520Y-033150X0472Y0551R270S1
327+BATT R2 -1 A02X+051969Y-044094X0472Y0551R000S1
327/V_BATT R2 -2 A02X+052756Y-044094X0472Y0551R000S1
327GND R1 -1 A02X+051732Y-041181X0472Y0551R270S1
327NET-(J1-CC1) R1 -2 A02X+051732Y-040394X0472Y0551R270S1
327/BUZZ Q3 -1 A02X+058898Y-046181X0581Y0236R000S1
327GND Q3 -2 A02X+058898Y-045433X0581Y0236R000S1
327NET-(BZ1--) Q3 -3 A02X+059636Y-045807X0581Y0236R000S1
327+BATT Q2 -1 A02X+051843Y-043346X0276Y0201R000S1
327+BATT Q2 -2 A02X+051843Y-042972X0276Y0201R000S1
327NET-(Q1-D) Q2 -3 A02X+051843Y-042598X0276Y0201R000S1
327+5V Q2 -4 A02X+052756Y-042598X0276Y0201R000S1
327+BATT Q2 -5 A02X+052756Y-042972X0276Y0201R000S1
327+BATT Q2 -6 A02X+052756Y-043346X0276Y0201R000S1
327/CHRG Q1 -1 A02X+049970Y-042579X0581Y0236R000S1
327GND Q1 -2 A02X+049970Y-041831X0581Y0236R000S1
327NET-(Q1-D) Q1 -3 A02X+050709Y-042205X0581Y0236R000S1
327+5V JP1 -1 A02X+053543Y-042736X0394Y0197R090S1
327+BATT JP1 -2 A02X+053543Y-043248X0394Y0197R090S1
317NET-(J9-PIN_1) J9 -1 D0394PA00X+054094Y-037352X0669Y0669R000S0
317NET-(J9-PIN_2) J9 -2 D0394PA00X+054094Y-038352X0669Y0669R000S0
317NET-(J9-PIN_3) J9 -3 D0394PA00X+054094Y-039352X0669Y0669R000S0
317NET-(J8-PIN_1) J8 -1 D0394PA00X+055591Y-039323X0669Y0669R180S0
317NET-(J8-PIN_2) J8 -2 D0394PA00X+055591Y-038323X0669Y0669R180S0
317NET-(J8-PIN_3) J8 -3 D0394PA00X+055591Y-037323X0669Y0669R180S0
317NET-(J7-PIN_1) J7 -1 D0394PA00X+069299Y-038898X0669Y0669R090S0
317NET-(J7-PIN_2) J7 -2 D0394PA00X+069299Y-039898X0669Y0669R090S0
317NET-(J7-PIN_3) J7 -3 D0394PA00X+068299Y-038898X0669Y0669R090S0
317NET-(J7-PIN_4) J7 -4 D0394PA00X+068299Y-039898X0669Y0669R090S0
317NET-(J7-PIN_5) J7 -5 D0394PA00X+067299Y-038898X0669Y0669R090S0
317NET-(J7-PIN_6) J7 -6 D0394PA00X+067299Y-039898X0669Y0669R090S0
317NET-(J7-PIN_7) J7 -7 D0394PA00X+066299Y-038898X0669Y0669R090S0
317NET-(J7-PIN_8) J7 -8 D0394PA00X+066299Y-039898X0669Y0669R090S0
317NET-(J7-PIN_9) J7 -9 D0394PA00X+065299Y-038898X0669Y0669R090S0
317ET-(J7-PIN_10) J7 -10 D0394PA00X+065299Y-039898X0669Y0669R090S0
317VCC J6 -1 D0394PA00X+066535Y-041417X0669Y0669R000S0
317/RX J6 -2 D0394PA00X+066535Y-042417X0669Y0669R000S0
317/TX J6 -3 D0394PA00X+066535Y-043417X0669Y0669R000S0
317GND J6 -4 D0394PA00X+066535Y-044417X0669Y0669R000S0
317GND J5 -4 D0394PA00X+065118Y-044417X0669Y0669R000S0
317/SDA J5 -3 D0394PA00X+065118Y-043417X0669Y0669R000S0
317/SCL J5 -2 D0394PA00X+065118Y-042417X0669Y0669R000S0
317VCC J5 -1 D0394PA00X+065118Y-041417X0669Y0669R000S0
317VCC J4 -1 D0394PA00X+063701Y-036811X0669Y0669R000S0
317/MOSI J4 -2 D0394PA00X+063701Y-037811X0669Y0669R000S0
317/CLK J4 -3 D0394PA00X+063701Y-038811X0669Y0669R000S0
317/CS J4 -4 D0394PA00X+063701Y-039811X0669Y0669R000S0
317/MISO J4 -5 D0394PA00X+063701Y-040811X0669Y0669R000S0
317GND J4 -6 D0394PA00X+063701Y-041811X0669Y0669R000S0
317/SWCLK J3 -1 D0394PA00X+063278Y-029370X0669Y0669R090S0
317GND J3 -2 D0394PA00X+062278Y-029370X0669Y0669R090S0
317/SWDIO J3 -3 D0394PA00X+061278Y-029370X0669Y0669R090S0
317+BATT J2 -1 D0394PA00X+052701Y-044961X0669Y0669R270S0
317GND J2 -2 D0394PA00X+053701Y-044961X0669Y0669R270S0
367N/C J1 D0256UA00X+050236Y-038232X0256Y0000R270S0
367N/C J1 D0256UA00X+050236Y-040508X0256Y0000R270S0
327GND J1 -A1 A02X+050805Y-040650X0236Y0571R270S1
327+5V J1 -A4 A02X+050805Y-040335X0236Y0571R270S1
327NET-(J1-CC1) J1 -A5 A02X+050805Y-039862X0118Y0571R270S1
327NET-(D1-IO2) J1 -A6 A02X+050805Y-039469X0118Y0571R270S1
327NET-(D1-IO1) J1 -A7 A02X+050805Y-039272X0118Y0571R270S1
327J1-SBU1-PADA8) J1 -A8 A02X+050805Y-038878X0118Y0571R270S1
327+5V J1 -A9 A02X+050805Y-038406X0236Y0571R270S1
327GND J1 -A12 A02X+050805Y-038091X0236Y0571R270S1
327GND J1 -B1 A02X+050805Y-038091X0236Y0571R270S1
327+5V J1 -B4 A02X+050805Y-038406X0236Y0571R270S1
327NET-(J1-CC2) J1 -B5 A02X+050805Y-038681X0118Y0571R270S1
327NET-(D1-IO2) J1 -B6 A02X+050805Y-039075X0118Y0571R270S1
327NET-(D1-IO1) J1 -B7 A02X+050805Y-039665X0118Y0571R270S1
327J1-SBU2-PADB8) J1 -B8 A02X+050805Y-040059X0118Y0571R270S1
327+5V J1 -B9 A02X+050805Y-040335X0236Y0571R270S1
327GND J1 -B12 A02X+050805Y-040650X0236Y0571R270S1
317GND J1 -S1 D0236PA00X+048799Y-041071X0394Y0630R270S0
317GND J1 -S1 D0236PA00X+050445Y-041071X0394Y0827R270S0
317GND J1 -S1 D0236PA00X+050445Y-037669X0394Y0827R270S0
317GND J1 -S1 D0236PA00X+048799Y-037669X0394Y0630R270S0
327+BATT D12 -1 A01X+063909Y-047691X0591Y0354R324S2
327D12-DOUT-PAD2) D12 -2 A01X+064672Y-048742X0591Y0354R324S2
327GND D12 -3 A01X+066233Y-047608X0591Y0354R324S2
327NET-(D11-DOUT) D12 -4 A01X+065469Y-046557X0591Y0354R324S2
327+BATT D11 -1 A01X+067860Y-043268X0591Y0354R288S2
327NET-(D11-DOUT) D11 -2 A01X+069095Y-043669X0591Y0354R288S2
327GND D11 -3 A01X+069691Y-041835X0591Y0354R288S2
327NET-(D10-DOUT) D11 -4 A01X+068456Y-041433X0591Y0354R288S2
327+BATT D10 -1 A01X+068476Y-037311X0591Y0354R252S2
327NET-(D10-DOUT) D10 -2 A01X+069711Y-036910X0591Y0354R252S2
327GND D10 -3 A01X+069115Y-035075X0591Y0354R252S2
327NET-(D10-DIN) D10 -4 A01X+067879Y-035476X0591Y0354R252S2
327+BATT D9 -1 A01X+065477Y-032191X0591Y0354R216S2
327NET-(D10-DIN) D9 -2 A01X+066241Y-031140X0591Y0354R216S2
327GND D9 -3 A01X+064680Y-030006X0591Y0354R216S2
327NET-(D8-DOUT) D9 -4 A01X+063917Y-031057X0591Y0354R216S2
327+BATT D8 -1 A01X+060024Y-029780X0591Y0354R180S2
327NET-(D8-DOUT) D8 -2 A01X+060024Y-028480X0591Y0354R180S2
327GND D8 -3 A01X+058094Y-028480X0591Y0354R180S2
327NET-(D7-DOUT) D8 -4 A01X+058094Y-029780X0591Y0354R180S2
327+BATT D7 -1 A01X+054190Y-031049X0591Y0354R144S2
327NET-(D7-DOUT) D7 -2 A01X+053426Y-029998X0591Y0354R144S2
327GND D7 -3 A01X+051865Y-031132X0591Y0354R144S2
327NET-(D6-DOUT) D7 -4 A01X+052629Y-032183X0591Y0354R144S2
327+BATT D6 -1 A01X+050235Y-035484X0591Y0354R108S2
327NET-(D6-DOUT) D6 -2 A01X+048999Y-035083X0591Y0354R108S2
327GND D6 -3 A01X+048403Y-036917X0591Y0354R108S2
327NET-(D5-DOUT) D6 -4 A01X+049639Y-037319X0591Y0354R108S2
327+BATT D5 -1 A01X+049639Y-041409X0591Y0354R072S2
327NET-(D5-DOUT) D5 -2 A01X+048403Y-041811X0591Y0354R072S2
327GND D5 -3 A01X+048999Y-043646X0591Y0354R072S2
327NET-(D4-DOUT) D5 -4 A01X+050235Y-043244X0591Y0354R072S2
327+BATT D4 -1 A01X+052645Y-046530X0591Y0354R036S2
327NET-(D4-DOUT) D4 -2 A01X+051881Y-047581X0591Y0354R036S2
327GND D4 -3 A01X+053442Y-048715X0591Y0354R036S2
327NET-(D3-DOUT) D4 -4 A01X+054205Y-047663X0591Y0354R036S2
327+BATT D3 -1 A01X+058091Y-048957X0591Y0354R000S2
327NET-(D3-DOUT) D3 -2 A01X+058091Y-050256X0591Y0354R000S2
327GND D3 -3 A01X+060020Y-050256X0591Y0354R000S2
327/NEOPIXEL D3 -4 A01X+060020Y-048957X0591Y0354R000S2
327NET-(D2-A) D2 -2 A02X+050945Y-036772X0492Y0689R000S1
327NET-(D2-K) D2 -1 A02X+049843Y-036772X0492Y0689R000S1
327NET-(D1-IO1) D1 -1 A01X+049504Y-039557X0248Y0177R180S2
327NET-(D1-IO2) D1 -2 A01X+049504Y-039183X0248Y0177R180S2
327GND D1 -3 A01X+049504Y-038809X0248Y0177R180S2
327-(D1-IO3-PAD4) D1 -4 A01X+048449Y-038809X0248Y0177R180S2
327+5V D1 -5 A01X+048449Y-039183X0248Y0177R180S2
327N/C D1 -6 A01X+048449Y-039557X0248Y0177R180S2
327N/C D1 -7 A01X+049134Y-039390X0315Y0413R180S2
327N/C D1 -7 A01X+048819Y-038976X0315Y0413R180S2
327N/C D1 -7 A01X+048819Y-039390X0315Y0413R180S2
327N/C D1 -7 A01X+049134Y-038976X0315Y0413R180S2
327GND C17 -2 A01X+054252Y-033479X0463Y0571R090S2
327VCC C17 -1 A01X+054252Y-032662X0463Y0571R090S2
327NET-(C16-PAD1) C16 -1 A01X+064252Y-035290X0463Y0571R270S2
327GND C16 -2 A01X+064252Y-034473X0463Y0571R270S2
327NET-(U1-XIN) C15 -1 A01X+064252Y-032977X0463Y0571R090S2
327GND C15 -2 A01X+064252Y-033794X0463Y0571R090S2
327GND C14 -1 A01X+058110Y-035133X0463Y0571R270S2
327VCC C14 -2 A01X+058110Y-034316X0463Y0571R270S2
327GND C13 -1 A01X+054961Y-035133X0463Y0571R270S2
327+1V1 C13 -2 A01X+054961Y-034316X0463Y0571R270S2
327GND C12 -1 A01X+057323Y-035133X0463Y0571R270S2
327VCC C12 -2 A01X+057323Y-034316X0463Y0571R270S2
327GND C11 -1 A01X+056535Y-035133X0463Y0571R270S2
327VCC C11 -2 A01X+056535Y-034316X0463Y0571R270S2
327GND C10 -1 A01X+058583Y-032613X0463Y0571R270S2
327VCC C10 -2 A01X+058583Y-031796X0463Y0571R270S2
327GND C9 -1 A01X+061102Y-035133X0463Y0571R270S2
327+1V1 C9 -2 A01X+061102Y-034316X0463Y0571R270S2
327GND C8 -1 A01X+055748Y-035133X0463Y0571R270S2
327+1V1 C8 -2 A01X+055748Y-034316X0463Y0571R270S2
327GND C7 -1 A01X+059449Y-035133X0463Y0571R270S2
327VCC C7 -2 A01X+059449Y-034316X0463Y0571R270S2
327GND C6 -1 A01X+061890Y-035133X0463Y0571R270S2
327VCC C6 -2 A01X+061890Y-034316X0463Y0571R270S2
327VCC C5 -2 A01X+059370Y-031796X0463Y0571R270S2
327GND C5 -1 A01X+059370Y-032613X0463Y0571R270S2
327VCC C4 -1 A02X+056220Y-043873X0463Y0571R270S1
327GND C4 -2 A02X+056220Y-043056X0463Y0571R270S1
327NET-(U3-NC) C3 -1 A02X+055433Y-043873X0463Y0571R270S1
327GND C3 -2 A02X+055433Y-043056X0463Y0571R270S1
327+BATT C2 -1 A02X+054646Y-045827X0463Y0571R270S1
327GND C2 -2 A02X+054646Y-045010X0463Y0571R270S1
317VCC BZ1 -1 D0394PA00X+057559Y-045827X0787Y0787R000S0
317NET-(BZ1--) BZ1 -2 D0394PA00X+060551Y-045827X0787Y0000R000S0
999

View File

@@ -0,0 +1,65 @@
Designator,Mid X,Mid Y,Rotation,Layer
BZ1,146.2,-116.4,0.0,top
C1,149.7625,-97.0,0.0,bottom
C10,148.8,-81.8,90.0,top
C11,143.6,-88.2,90.0,top
C12,145.6,-88.2,90.0,top
C13,139.6,-88.2,90.0,top
C14,147.6,-88.2,90.0,top
C15,163.2,-84.8,270.0,top
C16,163.2,-88.6,90.0,top
C17,137.8,-84.0,270.0,top
C2,138.8,-115.3625,90.0,bottom
C3,140.8,-110.4,90.0,bottom
C4,142.8,-110.4,90.0,bottom
C5,150.8,-81.8,90.0,top
C6,157.2,-88.2,90.0,top
C7,151.0,-88.2,90.0,top
C8,141.6,-88.2,90.0,top
C9,155.2,-88.2,90.0,top
D1,124.4,-99.525,180.0,top
D10,174.74,-91.93,108.0,top
D11,174.69,-108.08,72.0,top
D12,165.28,-121.03,36.0,top
D2,128.0,-93.4,0.0,bottom
D3,150.0,-126.0,0.0,top
D4,134.73,-120.96,324.0,top
D5,125.27,-108.02,288.0,top
D6,125.27,-91.95,252.0,top
D7,134.69,-78.97,216.0,top
D8,150.01,-73.99,180.0,top
D9,165.3,-78.99,144.0,top
J1,125.0,-100.0,90.0,bottom
J2,133.86,-114.2,90.0,top
J3,160.725,-74.6,270.0,top
J4,161.8,-93.5,0.0,top
J5,165.4,-105.2,0.0,top
J6,169.0,-105.2,0.0,top
J7,176.02,-98.8,270.0,top
J8,141.2,-99.88,180.0,top
J9,137.4,-94.875,0.0,top
Q1,127.8625,-107.2,0.0,bottom
Q2,132.84,-109.15,0.0,bottom
Q3,150.5375,-116.35,0.0,bottom
R1,131.4,-103.6,90.0,bottom
R10,136.8,-112.0,0.0,bottom
R11,124.8,-107.2,90.0,bottom
R12,131.8,-106.4,0.0,bottom
R13,154.2,-97.2,180.0,bottom
R14,123.6,-93.4,180.0,bottom
R15,149.4,-113.4,0.0,bottom
R2,133.0,-112.0,0.0,bottom
R3,158.8,-85.2,90.0,bottom
R4,157.0,-84.0,270.0,top
R5,133.0,-100.8,0.0,bottom
R6,133.0,-98.8,180.0,bottom
R7,131.4,-96.0,270.0,bottom
R8,139.8,-84.0,90.0,top
R9,137.6,-88.2,90.0,top
SW1,152.54,-94.92,0.0,top
SW2,131.55,-81.3,45.0,bottom
SW3,150.0,-106.4,180.0,bottom
U1,150.0,-83.2,270.0,bottom
U2,139.8,-77.8,270.0,bottom
U3,141.6,-114.85,90.0,bottom
Y1,160.2,-86.95,270.0,top
1 Designator Mid X Mid Y Rotation Layer
2 BZ1 146.2 -116.4 0.0 top
3 C1 149.7625 -97.0 0.0 bottom
4 C10 148.8 -81.8 90.0 top
5 C11 143.6 -88.2 90.0 top
6 C12 145.6 -88.2 90.0 top
7 C13 139.6 -88.2 90.0 top
8 C14 147.6 -88.2 90.0 top
9 C15 163.2 -84.8 270.0 top
10 C16 163.2 -88.6 90.0 top
11 C17 137.8 -84.0 270.0 top
12 C2 138.8 -115.3625 90.0 bottom
13 C3 140.8 -110.4 90.0 bottom
14 C4 142.8 -110.4 90.0 bottom
15 C5 150.8 -81.8 90.0 top
16 C6 157.2 -88.2 90.0 top
17 C7 151.0 -88.2 90.0 top
18 C8 141.6 -88.2 90.0 top
19 C9 155.2 -88.2 90.0 top
20 D1 124.4 -99.525 180.0 top
21 D10 174.74 -91.93 108.0 top
22 D11 174.69 -108.08 72.0 top
23 D12 165.28 -121.03 36.0 top
24 D2 128.0 -93.4 0.0 bottom
25 D3 150.0 -126.0 0.0 top
26 D4 134.73 -120.96 324.0 top
27 D5 125.27 -108.02 288.0 top
28 D6 125.27 -91.95 252.0 top
29 D7 134.69 -78.97 216.0 top
30 D8 150.01 -73.99 180.0 top
31 D9 165.3 -78.99 144.0 top
32 J1 125.0 -100.0 90.0 bottom
33 J2 133.86 -114.2 90.0 top
34 J3 160.725 -74.6 270.0 top
35 J4 161.8 -93.5 0.0 top
36 J5 165.4 -105.2 0.0 top
37 J6 169.0 -105.2 0.0 top
38 J7 176.02 -98.8 270.0 top
39 J8 141.2 -99.88 180.0 top
40 J9 137.4 -94.875 0.0 top
41 Q1 127.8625 -107.2 0.0 bottom
42 Q2 132.84 -109.15 0.0 bottom
43 Q3 150.5375 -116.35 0.0 bottom
44 R1 131.4 -103.6 90.0 bottom
45 R10 136.8 -112.0 0.0 bottom
46 R11 124.8 -107.2 90.0 bottom
47 R12 131.8 -106.4 0.0 bottom
48 R13 154.2 -97.2 180.0 bottom
49 R14 123.6 -93.4 180.0 bottom
50 R15 149.4 -113.4 0.0 bottom
51 R2 133.0 -112.0 0.0 bottom
52 R3 158.8 -85.2 90.0 bottom
53 R4 157.0 -84.0 270.0 top
54 R5 133.0 -100.8 0.0 bottom
55 R6 133.0 -98.8 180.0 bottom
56 R7 131.4 -96.0 270.0 bottom
57 R8 139.8 -84.0 90.0 top
58 R9 137.6 -88.2 90.0 top
59 SW1 152.54 -94.92 0.0 top
60 SW2 131.55 -81.3 45.0 bottom
61 SW3 150.0 -106.4 180.0 bottom
62 U1 150.0 -83.2 270.0 bottom
63 U2 139.8 -77.8 270.0 bottom
64 U3 141.6 -114.85 90.0 bottom
65 Y1 160.2 -86.95 270.0 top

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,77 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "",
"auto_track_width": false,
"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": "ffffdff_ffffffff",
"zone_display_mode": 0
},
"meta": {
"filename": "timer_button.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View File

@@ -0,0 +1,492 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"board_outline_line_width": 0.09999999999999999,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.15,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 3.2,
"height": 3.2,
"width": 3.2
},
"silk_line_width": 0.15,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [
{
"gap": 0.0,
"via_gap": 0.0,
"width": 0.0
}
],
"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_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.0,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.09999999999999999,
"min_via_diameter": 0.5,
"solder_mask_clearance": 0.0,
"solder_mask_min_width": 0.0,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 5,
"td_on_pad_in_zone": false,
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [
0.0,
0.2,
0.4
],
"via_dimensions": [
{
"diameter": 0.0,
"drill": 0.0
}
],
"zones_allow_external_fillets": false
},
"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": "timer_button.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.25,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"specctra_dsn": "",
"step": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 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,
"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_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"4c88d864-5558-4972-998d-a249c51e3544",
""
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load Diff

100
SW/PC/Alkator.json Normal file
View File

@@ -0,0 +1,100 @@
{
"1": {
"name": "Michal_Dolezal",
"time": 59686.214496,
"laps": 3,
"lap_time": {
"0": 1570.6283019999973,
"1": 1714.182087000001,
"2": 1446.9299450000035
}
},
"2": {
"name": "David_Hubalek",
"time": 61285.385381,
"laps": 3,
"lap_time": {
"0": 1378.498722999997,
"1": 1902.1900959999984,
"2": 2436.201885000002
}
},
"9": {
"name": "Lucie_Ponocna",
"time": 60148.765882,
"laps": 3,
"lap_time": {
"0": 1481.6570529999954,
"1": 1371.9764339999965,
"2": 1392.5671650000004
}
},
"8": {
"name": "Jan_Cada",
"time": 60218.945151,
"laps": 3,
"lap_time": {
"0": 1293.8216450000036,
"1": 1341.646053000004,
"2": 1402.6441269999996
}
},
"10": {
"name": "Jenda",
"time": 61880.872883,
"laps": 3,
"lap_time": {
"0": 1365.9300070000027,
"1": 1959.2283549999993,
"2": 1957.2417010000063
}
},
"4": {
"name": "Vojta_Flekr",
"time": 61567.55196,
"laps": 3,
"lap_time": {
"0": 1447.2361820000006,
"1": 1654.6209919999965,
"2": 1696.5821589999978
}
},
"7": {
"name": "Lukas_Bouchal",
"time": 61356.658114,
"laps": 3,
"lap_time": {
"0": 1456.207137999998,
"1": 1405.8979709999985,
"2": 1365.8517150000043
}
},
"3": {
"name": "Adam_Krejsa",
"time": 61475.209162,
"laps": 3,
"lap_time": {
"0": 1313.4791200000036,
"1": 1358.869869999995,
"2": 1402.3635040000008
}
},
"6": {
"name": "David_Bedrnicek",
"time": 62894.44809,
"laps": 3,
"lap_time": {
"0": 1480.398721999998,
"1": 1721.0690019999965,
"2": 1939.8222899999964
}
},
"11": {
"name": "Nacelnik",
"time": 64679.27699,
"laps": 1,
"lap_time": {
"0": 2533.054164000001
}
}
}

View File

@@ -0,0 +1,37 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Oct 21 17:19:11 2023
@author: angoosh
"""
import json
FILE = './Alkator.json'
data_dict = ''
results = {}
with open(FILE,'r') as f:
file_content = f.read()
data_dict = json.loads(file_content)
for id in data_dict:
laps = int(data_dict[id]['laps'])
time = 0
for i in range(0,laps):
time += float(data_dict[id]['lap_time'][str(i)])
time = (time - (600*laps)) / 60
print(data_dict[id]['name'],time)
data_dict[id]['total_time'] = time
results[data_dict[id]['name']] = time
print(results)
dict(sorted(results.items(), key=lambda item: item[0]))
print(results)

201
SW/PC/Stopwatch/main.py Normal file
View File

@@ -0,0 +1,201 @@
import gi
import threading
import time
import usb.core
import usb.util
import requests
import json
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk, Gio, Gdk, GLib
DEBUG = False
if DEBUG == True:
index = 2
else:
index = 1
activeCards = []
TIME = 60
USB_IF = 0 # Interface
USB_TIMEOUT = 5 # Timeout in ms
USB_VENDOR = 0xffff # Vendor-ID:
USB_PRODUCT = 0x0035 # Product-ID
with open('people.json', 'r') as f:
db = json.load(f)
class UsbCardReader():
def __init__(self, **kargs):
# Find the HID device by vendor/product ID
self.dev = usb.core.find(idVendor=USB_VENDOR, idProduct=USB_PRODUCT)
# Get and store the endpoint
self.endpoint = self.dev[0][(0,0)][0]
if self.dev.is_kernel_driver_active(USB_IF) is True:
self.dev.detach_kernel_driver(USB_IF)
# Claim the device
usb.util.claim_interface(self.dev, USB_IF)
self.receivedNumber = 0
cardread=threading.Thread(target=self.read)
cardread.start()
def read(self):
global win, activeCards, db
print("Waiting for card")
receivedNumber = 0
while True:
control = None
try:
control = self.dev.read(self.endpoint.bEndpointAddress, self.endpoint.wMaxPacketSize, USB_TIMEOUT)
if (control[2] != 40) & (control[2] != 0):
receivedDigit = control[2] - 29
if receivedDigit == 10:
receivedDigit = 0
receivedNumber = 10 * receivedNumber + receivedDigit
if (( control[0] == 0 )) & (( control[2] == 40 )) & (( not receivedNumber == 0 )):
try:
with open('people.json', 'r') as f:
db = json.load(f)
for i in db:
if db[i] == receivedNumber:
if i not in activeCards:
activeCards.append(i)
GLib.idle_add(win.arb, i)
else:
print("Card is active now")
except Exception as e: print(e)
receivedNumber = 0
except KeyboardInterrupt:
exit()
except:
pass
time.sleep(0.001)
class GridRow():
def __init__(self, parent, runner, index):
self.id = runner
self.index = index
self.parent = parent
self.grid = Gtk.Grid()
if index % 2 == 0:
self.grid.set_name("lightgrid")
else:
self.grid.set_name("darkgrid")
self.runid = Gtk.Label(label=str(runner), name="gridlabel")
self.runid.set_justify(2)
self.runid.set_width_chars(10)
self.runb = Gtk.Label(label='00:00', name="gridlabel")
self.runb.set_hexpand(1)
self.grid.attach(self.runid, 0, 0, 1, 1)
self.grid.attach(self.runb, 1, 0, 1, 1)
parent.grid.attach(self.grid, 0, index, 2, 1)
countdown=threading.Thread(target=self.updateTime)
countdown.start()
def printIndex(self, button):
print(self.index)
def updateTime(self):
t = TIME
while t >= -10:
if t < 0:
mins, secs = divmod((t * -1), 60)
timer = '-{:02d}:{:02d}'.format(mins, secs)
else:
mins, secs = divmod(t, 60)
timer = '{:02d}:{:02d}'.format(mins, secs)
GLib.idle_add(self.runb.set_label, timer)
time.sleep(1)
t -= 1
if t == 10:
if self.grid.get_name() == "lightgrid":
GLib.idle_add(self.grid.set_name, "lredgrid")
else:
GLib.idle_add(self.grid.set_name, "dredgrid")
GLib.idle_add(GridWindow.remRow, self.parent)
class GridWindow(Gtk.ApplicationWindow):
def __init__(self, **kargs):
super().__init__(**kargs, title='Alkator Clock')
css_provider = Gtk.CssProvider()
css_provider.load_from_file(Gio.File.new_for_path("style.css"))
Gtk.StyleContext.add_provider_for_display(Gdk.Display.get_default(), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
self.set_default_size(640, 480)
button1 = Gtk.Button(label='addrow')
button2 = Gtk.Button(label='rmrow')
button1.connect("clicked", self.arb)
button2.connect("clicked", self.rrb)
runlabel = Gtk.Label(label="ID", name="gridlabel")
runlabel.set_justify(2)
cntlabel = Gtk.Label(label="Countdown", name="gridlabel")
cntlabel.set_justify(2)
self.runners = []
self.grid = Gtk.Grid()
if DEBUG == True:
self.grid.attach(button1, 0, 0, 1, 1)
self.grid.attach(button2, 1, 0, 2, 1)
self.grid.attach(runlabel, 0, 1, 1, 1)
self.grid.attach(cntlabel, 1, 1, 2, 1)
else:
self.grid.attach(runlabel, 0, 0, 1, 1)
self.grid.attach(cntlabel, 1, 0, 2, 1)
self.set_child(self.grid)
def arb(self, personId):
global index
self.runners.append(GridRow(self, personId, index))
index += 1
def rrb(self, button):
global index
self.remRow()
def addRow(self, runner, index):
runid = Gtk.Label(label=str(runner))
runb = Gtk.Button(label='time_placeholder')
self.grid.attach(runid, 0, index, 1, 1)
self.grid.attach(runb, 1, index, 1, 1)
def remRow(self):
global index, activeCards
if index > 1:
self.grid.remove_row(1)
index -= 1
del activeCards[0]
def on_activate(app):
# Create window
global win
win = GridWindow(application=app)
win.present()
UsbCardReader()
app = Gtk.Application(application_id='com.example.App')
app.connect('activate', on_activate)
app.run(None)

23
SW/PC/Stopwatch/order.py Normal file
View File

@@ -0,0 +1,23 @@
import operator
import json
db=""
res={}
with open('times.json', 'r') as f:
db = json.load(f)
for i in db:
try:
res[i] = db[i]["duration"]
print(i, db[i]["duration"])
except:
print(i)
pass
#print(res)
order = dict(sorted(res.items(), key=lambda item: item[1]))
with open("results.json", 'a') as f:
f.write(json.dumps(order, indent = 4))

102
SW/PC/Stopwatch/people.json Normal file
View File

@@ -0,0 +1,102 @@
{
"1": 1114418469,
"2": 1111554085,
"3": 1112605381,
"4": 1362080126,
"5": 1632101230,
"6": 1114533941,
"7": 1364901054,
"8": 1364587710,
"9": 1364867822,
"10": 1364554558,
"11": 1364968750,
"12": 1111614357,
"13": 1362569198,
"14": 1364867662,
"15": 1112618821,
"16": 1364967150,
"17": 1364592718,
"18": 1364487310,
"19": 458336708,
"20": 1111590293,
"21": 1114448773,
"22": 1364550814,
"23": 1112421509,
"24": 1364529422,
"25": 1364916590,
"26": 455988804,
"27": 1631963022,
"28": 1114508533,
"29": 1364590606,
"30": 1364796894,
"31": 1112489029,
"32": 1114588261,
"33": 1111733589,
"34": 1112469509,
"35": 1632521678,
"36": 1631957710,
"37": 1111682853,
"38": 1111882197,
"39": 1631960974,
"40": 1362260606,
"41": 1364521806,
"42": 1364489406,
"43": 1361969902,
"44": 1364581838,
"45": 1364520526,
"46": 1361806574,
"47": 1364581310,
"48": 1364551150,
"49": 1364916158,
"50": 1364529662,
"51": 1632026766,
"52": 1364588798,
"53": 1631955550,
"54": 1631972606,
"55": 1364797086,
"56": 1364627198,
"57": 1364556446,
"58": 1632070414,
"59": 1631951758,
"60": 1364794654,
"61": 1632101166,
"62": 1361810574,
"63": 1114573589,
"64": 1361967886,
"65": 1632544222,
"66": 1111582085,
"67": 1362569438,
"68": 1364593198,
"69": 1364761406,
"70": 1631927918,
"71": 1364544414,
"72": 1362264958,
"73": 1364767006,
"74": 1364590110,
"75": 1362082334,
"76": 1364799166,
"77": 1632028398,
"78": 1361970078,
"79": 1364485118,
"80": 1364490846,
"81": 1632150846,
"82": 1362569342,
"83": 1362599998,
"84": 1632523854,
"85": 1364765134,
"86": 1631952062,
"87": 1364559822,
"88": 1364783854,
"89": 1362081950,
"90": 1111644021,
"91": 1631959326,
"92": 1364901422,
"93": 1632100830,
"94": 1111707429,
"95": 1632026702,
"96": 1362569022,
"97": 1114560181,
"98": 1364588510,
"99": 1364785486,
"100": 1361969950
}

View File

@@ -0,0 +1,34 @@
{
"2": "0:35:59.818971",
"29": "1:10:52.076408",
"14": "1:11:35.670162",
"9": "1:14:40",
"10": "1:16:02.174205",
"12": "1:18:12.521345",
"26": "1:21:24.962008",
"8": "1:23:45.241021",
"5": "1:24:33.080748",
"3": "1:25:36.486060",
"25": "1:26:57.409779",
"27": "1:32:49.493213",
"18": "1:35:04.610546",
"6": "1:35:28.914085",
"21": "1:35:29.494112",
"28": "1:37:56.900763",
"13": "1:39:20.394593",
"17": "1:39:59.664271",
"4": "1:40:15.602185",
"15": "1:41:16.795669",
"20": "1:43:29.166855",
"16": "1:48:28.014745",
"19": "1:48:37.692711",
"30": "1:48:51.712639",
"11": "1:48:56.350571",
"22": "1:49:04.450512",
"31": "2:05:10.107744",
"24": "2:05:33.883454",
"7": "2:05:42.955540",
"32": "2:06:17.053222",
"23": "2:11:50.391043",
"1": "2:24:50.507501"
}

View File

@@ -0,0 +1,51 @@
import usb.core
import usb.util
import time
import requests
import json
USB_IF = 0 # Interface
USB_TIMEOUT = 5 # Timeout in MS
USB_VENDOR = 0xffff # Vendor-ID:
USB_PRODUCT = 0x0035 # Product-ID
# Find the HID device by vender/product ID
dev = usb.core.find(idVendor=USB_VENDOR, idProduct=USB_PRODUCT)
# Get and store the endpoint
endpoint = dev[0][(0,0)][0]
if dev.is_kernel_driver_active(USB_IF) is True:
dev.detach_kernel_driver(USB_IF)
# Claim the device
usb.util.claim_interface(dev, USB_IF)
receivedNumber = 0
while True:
control = None
try:
# Read a character from the device
control = dev.read(endpoint.bEndpointAddress, endpoint.wMaxPacketSize, USB_TIMEOUT)
# Here you have to analyze what's coming in.
# In my case you had to check the first byte (command)
if (control[2] != 40) & (control[2] != 0):
# Convert ascii to a number, there's probably better ways to do so.
receivedDigit = control[2] - 29
if receivedDigit == 10:
receivedDigit = 0
# Append the digit to the number
receivedNumber = 10 * receivedNumber + receivedDigit
# Check if the received character is CRLF
if (( control[0] == 0 )) & (( control[2] == 40 )) & (( not receivedNumber == 0 )):
print('cardNumber:', receivedNumber)
except KeyboardInterrupt:
exit()
except:
pass
time.sleep(0.001) # Let CTRL+C actually exit

2
SW/PC/Stopwatch/run.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/bash
GTK_THEME=Adwaita:light python ./main.py

View File

@@ -0,0 +1,110 @@
import threading
import time
import usb.core
import usb.util
import requests
import json
import datetime
DEBUG = False
if DEBUG == True:
index = 2
else:
index = 1
activeCards = []
TIME = 600
USB_IF = 0 # Interface
USB_TIMEOUT = 5 # Timeout in ms
USB_VENDOR = 0xffff # Vendor-ID:
USB_PRODUCT = 0x0035 # Product-ID
with open('people.json', 'r') as f:
db = json.load(f)
try:
times = {}
with open('times.json', 'r') as f:
times_json = json.load(f)
for i in times_json:
times[i] = {}
times[i]['start'] = datetime.datetime.strptime(times_json[i]['start'],"%d/%m/%Y, %H:%M:%S")
try:
times[i]['end'] = datetime.datetime.strptime(times_json[i]['end'],"%d/%m/%Y, %H:%M:%S")
times[i]['duration'] = times[i]['end'] - times[i]['start']
except:
print(i, "Not finished yet")
print(times)
except Exception as e: print(e)
#except:
# times = {}
# times_json = {}
class UsbCardReader():
def __init__(self, **kargs):
# Find the HID device by vendor/product ID
self.dev = usb.core.find(idVendor=USB_VENDOR, idProduct=USB_PRODUCT)
# Get and store the endpoint
self.endpoint = self.dev[0][(0,0)][0]
if self.dev.is_kernel_driver_active(USB_IF) is True:
self.dev.detach_kernel_driver(USB_IF)
# Claim the device
usb.util.claim_interface(self.dev, USB_IF)
self.receivedNumber = 0
cardread=threading.Thread(target=self.read)
cardread.start()
def read(self):
global activeCards, db, times, times_json
print("Waiting for card")
receivedNumber = 0
while True:
control = None
try:
control = self.dev.read(self.endpoint.bEndpointAddress, self.endpoint.wMaxPacketSize, USB_TIMEOUT)
if (control[2] != 40) & (control[2] != 0):
receivedDigit = control[2] - 29
if receivedDigit == 10:
receivedDigit = 0
receivedNumber = 10 * receivedNumber + receivedDigit
if (( control[0] == 0 )) & (( control[2] == 40 )) & (( not receivedNumber == 0 )):
try:
with open('people.json', 'r') as f:
db = json.load(f)
for i in db:
if db[i] == receivedNumber:
print("Runner:", i)
print(db)
runner_found = False
for j in times:
if j == i:
runner_found = True
times[j]['end'] = datetime.datetime.now()
times[j]['duration'] = times[j]['end'] - times[j]['start']
times_json[j]['end'] = times[j]['end'].strftime("%d/%m/%Y, %H:%M:%S")
times_json[j]['duration'] = str(times[j]['duration'])
if runner_found == False:
times[i] = {}
times[i]['start'] = datetime.datetime.now()
times_json[i] = {}
times_json[i]['start'] = times[i]['start'].strftime("%d/%m/%Y, %H:%M:%S")
with open("times.json", 'w') as f:
f.write(json.dumps(times_json, indent = 4))
print(times)
except Exception as e: print(e)
receivedNumber = 0
except KeyboardInterrupt:
exit()
except:
pass
time.sleep(0.001)
UsbCardReader()

20
SW/PC/Stopwatch/style.css Normal file
View File

@@ -0,0 +1,20 @@
#lightgrid {
background-color: #F0F0F0;
}
#darkgrid {
background-color: #D0D0D0;
}
#lredgrid {
background-color: #FF8888;
}
#dredgrid {
background-color: #FF6666;
}
#gridlabel {
font-size: 16pt;
font-weight: bold;
}

160
SW/PC/Stopwatch/times.json Normal file
View File

@@ -0,0 +1,160 @@
{
"1": {
"start": "31/05/2025, 10:00:08",
"end": "31/05/2025, 12:24:58",
"duration": "2:24:50.507501"
},
"2": {
"start": "31/05/2025, 10:05:37",
"end": "31/05/2025, 10:41:37",
"duration": "0:35:59.818971"
},
"3": {
"start": "31/05/2025, 10:10:09",
"end": "31/05/2025, 11:35:45",
"duration": "1:25:36.486060"
},
"4": {
"start": "31/05/2025, 10:15:14",
"end": "31/05/2025, 11:55:30",
"duration": "1:40:15.602185"
},
"5": {
"start": "31/05/2025, 10:20:08",
"end": "31/05/2025, 11:44:41",
"duration": "1:24:33.080748"
},
"6": {
"start": "31/05/2025, 10:25:01",
"end": "31/05/2025, 12:00:30",
"duration": "1:35:28.914085"
},
"7": {
"start": "31/05/2025, 10:30:01",
"end": "31/05/2025, 12:35:44",
"duration": "2:05:42.955540"
},
"8": {
"start": "31/05/2025, 10:35:05",
"end": "31/05/2025, 11:58:50",
"duration": "1:23:45.241021"
},
"9": {
"start": "31/05/2025, 10:39:57"
},
"10": {
"start": "31/05/2025, 10:42:01",
"end": "31/05/2025, 11:58:03",
"duration": "1:16:02.174205"
},
"11": {
"start": "31/05/2025, 10:45:03",
"end": "31/05/2025, 12:33:59",
"duration": "1:48:56.350571"
},
"12": {
"start": "31/05/2025, 10:49:58",
"end": "31/05/2025, 12:08:10",
"duration": "1:18:12.521345"
},
"13": {
"start": "31/05/2025, 10:55:01",
"end": "31/05/2025, 12:34:21",
"duration": "1:39:20.394593"
},
"14": {
"start": "31/05/2025, 10:59:57",
"end": "31/05/2025, 12:11:33",
"duration": "1:11:35.670162"
},
"15": {
"start": "31/05/2025, 11:05:09",
"end": "31/05/2025, 12:46:25",
"duration": "1:41:16.795669"
},
"16": {
"start": "31/05/2025, 11:10:01",
"end": "31/05/2025, 12:58:29",
"duration": "1:48:28.014745"
},
"17": {
"start": "31/05/2025, 11:15:00",
"end": "31/05/2025, 12:55:00",
"duration": "1:39:59.664271"
},
"18": {
"start": "31/05/2025, 11:20:01",
"end": "31/05/2025, 12:55:05",
"duration": "1:35:04.610546"
},
"19": {
"start": "31/05/2025, 11:25:00",
"end": "31/05/2025, 13:13:38",
"duration": "1:48:37.692711"
},
"20": {
"start": "31/05/2025, 11:29:58",
"end": "31/05/2025, 13:13:27",
"duration": "1:43:29.166855"
},
"21": {
"start": "31/05/2025, 11:35:30",
"end": "31/05/2025, 13:11:00",
"duration": "1:35:29.494112"
},
"22": {
"start": "31/05/2025, 11:40:02",
"end": "31/05/2025, 13:29:06",
"duration": "1:49:04.450512"
},
"23": {
"start": "31/05/2025, 11:44:59",
"end": "31/05/2025, 13:56:49",
"duration": "2:11:50.391043"
},
"24": {
"start": "31/05/2025, 11:50:45",
"end": "31/05/2025, 13:56:19",
"duration": "2:05:33.883454"
},
"25": {
"start": "31/05/2025, 11:55:04",
"end": "31/05/2025, 13:22:02",
"duration": "1:26:57.409779"
},
"26": {
"start": "31/05/2025, 12:00:00",
"end": "31/05/2025, 13:21:24",
"duration": "1:21:24.962008"
},
"27": {
"start": "31/05/2025, 12:05:01",
"end": "31/05/2025, 13:37:51",
"duration": "1:32:49.493213"
},
"28": {
"start": "31/05/2025, 12:10:03",
"end": "31/05/2025, 13:48:00",
"duration": "1:37:56.900763"
},
"29": {
"start": "31/05/2025, 12:14:58",
"end": "31/05/2025, 13:25:50",
"duration": "1:10:52.076408"
},
"30": {
"start": "31/05/2025, 12:20:02",
"end": "31/05/2025, 14:08:54",
"duration": "1:48:51.712639"
},
"31": {
"start": "31/05/2025, 12:50:10",
"end": "31/05/2025, 14:55:20",
"duration": "2:05:10.107744"
},
"32": {
"start": "31/05/2025, 12:50:13",
"end": "31/05/2025, 14:56:30",
"duration": "2:06:17.053222"
}
}

View File

@@ -0,0 +1,84 @@
import time
import usb.core
import usb.util
import requests
import json
import threading
USB_IF = 0 # Interface
USB_TIMEOUT = 5 # Timeout in ms
USB_VENDOR = 0xffff # Vendor-ID:
USB_PRODUCT = 0x0035 # Product-ID
activeCards = {}
try:
with open('people.json', 'r') as f:
activeCards = json.load(f)
except:
print("No people.json found")
class UsbCardReader():
def __init__(self, **kargs):
# Find the HID device by vendor/product ID
self.dev = usb.core.find(idVendor=USB_VENDOR, idProduct=USB_PRODUCT)
# Get and store the endpoint
self.endpoint = self.dev[0][(0,0)][0]
if self.dev.is_kernel_driver_active(USB_IF) is True:
self.dev.detach_kernel_driver(USB_IF)
# Claim the device
usb.util.claim_interface(self.dev, USB_IF)
self.receivedNumber = 0
def read(self):
global activeCards
print("Priloz kartu")
while True:
control = None
try:
control = self.dev.read(self.endpoint.bEndpointAddress, self.endpoint.wMaxPacketSize, USB_TIMEOUT)
if (control[2] != 40) & (control[2] != 0):
receivedDigit = control[2] - 29
if receivedDigit == 10:
receivedDigit = 0
self.receivedNumber = 10 * self.receivedNumber + receivedDigit
if (( control[0] == 0 )) & (( control[2] == 40 )) & (( not self.receivedNumber == 0 )):
try:
cardPresent = False
for i in activeCards:
if activeCards[i] == self.receivedNumber:
cardPresent = True
break
if cardPresent == False:
assign=threading.Thread(target=self.assign)
assign.start()
else:
print("Naramek jiz zaregistrovan")
self.receivedNumber = 0
print("Priloz kartu")
except Exception as e: print(e)
except KeyboardInterrupt:
exit()
except:
pass
time.sleep(0.001)
def assign(self):
global activeCards
n = input("Cislo zavodnika: ")
activeCards[str(n)] = self.receivedNumber
with open('people.json', 'w') as f:
f.write(json.dumps(activeCards, indent = 4))
self.receivedNumber = 0
print("Ulozeno, priloz kartu")
if __name__ == "__main__":
reader = UsbCardReader()
print("Zapis zavodniku ready")
reader.read()

96
SW/PC/main.py Normal file → Executable file
View File

@@ -1,33 +1,101 @@
#!/usr/bin/python
import serial
import json
from datetime import datetime
JSON_PATH = './Alkator.json'
data_dict = ''
try:
with open(JSON_PATH, 'r') as file:
file_content = file.read()
data_dict = json.loads(file_content)
print('json_exists')
except:
data_dict = {}
def get_seconds():
current_time = datetime.now()
hours = current_time.hour
mins = current_time.minute
secs = current_time.second
us = current_time.microsecond
seconds = hours*3600 + mins*60 + secs
seconds = float(str(seconds) + '.' + str(us))
return seconds
def read(ser):
while True:
mes = ser.read_until(b'\r')
if b'Reading ntag' in mes:
print('reading')
if b'Data' in mes:
data = mes.decode('utf-8')
data = data[6:].replace('\x00', '').replace('\r', '').split(' ')
print('data read done')
try:
lap_secs = get_seconds() - data_dict[data[0]]['time']
print(lap_secs)
lap = data_dict[data[0]]['laps']
try:
data_dict[data[0]]['lap_time'][lap] = lap_secs
except:
data_dict[data[0]]['lap_time'] = {lap: lap_secs}
lap += 1
data_dict[data[0]]['laps'] = lap
data_dict[data[0]]['time'] = get_seconds()
except:
data_dict[data[0]] = {'name': data[1]}
data_dict[data[0]]['time'] = get_seconds()
data_dict[data[0]]['laps'] = 0
data_json = json.dumps(data_dict, indent=4)
print(data_json)
with open(JSON_PATH, 'w') as file:
file.write(data_json)
def write(ser):
while True:
data = input('ID:')
data = data + '\r'
ser.write(data.encode())
while True:
mes = ser.read_until(b'\r')
if b'Waiting' in mes:
print('Waiting for card')
if b'Erasing' in mes:
print('Erasing card')
if b'Writing' in mes:
print('Writing data to card')
if b'done' in mes:
print('Write done')
break
def main():
s = serial.Serial(port="/dev/ttyACM0", parity=serial.PARITY_EVEN, stopbits=serial.STOPBITS_ONE, timeout=1)
s = serial.Serial(port="/dev/ttyACM3", parity=serial.PARITY_EVEN, stopbits=serial.STOPBITS_ONE, timeout=1)
s.flush()
rw = input('Read or Write tags? [R/w]')
rw = rw.lower()
if rw == 'w':
s.write('w'.encode())
while True:
data = input('ID:')
s.write(data.encode())
s.write('w\r'.encode())
write(s)
elif rw == 'r':
s.write('r\r'.encode())
while True:
mes = s.read_until(b'\r')
print(mes.decode())
read(s)
elif rw == '':
s.write('r\r'.encode())
while True:
mes = s.read_until(b'\r')
if mes != '':
print(mes.decode())
read(s)
else:
print('Invalid option')
if __name__ == "__main__":
main()
if __name__ == "__main__":
main()

163
SW/RPi_Pico_Button/main.py Normal file
View File

@@ -0,0 +1,163 @@
import neopixel
import time
import sys
import select
from machine import Pin, SPI
#neopixel
ws_pin = 2
led_num = 10
BRIGHTNESS = 0.2 # Adjust the brightness (0.0 - 1.0)
led_strip = neopixel.NeoPixel(Pin(ws_pin), led_num)
push_button = Pin(24, Pin.IN, Pin.PULL_UP)
buzzer = Pin(3, Pin.OUT)
led = Pin(25, Pin.OUT)
pushbutton_pressed = 0
blink_interrupted = 0
def set_neopixel_brightness(color):
r, g, b = color
r = int(r * BRIGHTNESS)
g = int(g * BRIGHTNESS)
b = int(b * BRIGHTNESS)
return (r, g, b)
def set_neopixel_color(r,g,b):
color = (r,g,b)
color = set_neopixel_brightness(color)
led_strip.fill(color)
led_strip.write()
set_neopixel_color(0,0,0)
def loop_neopixel():
# Display red
color = (255, 0, 0) # Red color
color = set_neopixel_brightness(color)
led_strip.fill(color)
led_strip.write()
time.sleep(1)
# Display green
color = (0, 255, 0) # Green color
color = set_neopixel_brightness(color)
led_strip.fill(color)
led_strip.write()
time.sleep(1)
# Display blue
color = (0, 0, 255) # Blue color
color = set_neopixel_brightness(color)
led_strip.fill(color)
led_strip.write()
time.sleep(1)
neopix_loop_dot_pos = 0
def neopixel_loop_dot():
global neopix_loop_dot_pos
color = (255, 0, 0)
black = (0, 0, 0)
color = set_neopixel_brightness(color)
led_strip[neopix_loop_dot_pos] = black
neopix_loop_dot_pos += 1
if neopix_loop_dot_pos > 9:
neopix_loop_dot_pos = 0
led_strip[neopix_loop_dot_pos] = color
led_strip.write()
time.sleep(0.2)
def lightup_led(index, color):
led_strip[index] = color
led_strip.write()
def blink_and_beep(times):
global pushbutton_pressed, blink_interrupted
blink_delay = 0.2
#insert beep
buzzer.value(1)
for i in range(0, times):
set_neopixel_color(255, 0, 0)
buzzer.value(0)
time.sleep(blink_delay)
set_neopixel_color(0, 0, 0)
buzzer.value(1)
time.sleep(blink_delay)
if pushbutton_pressed == 1:
pushbutton_pressed = 0
blink_interrupted = 1
i = times
buzzer.value(0)
return
buzzer.value(0)
ten_min_timer = 0
ten_min_timer_led_index = 11
def count_10_min():
global ten_min_timer, ten_min_timer_led_index, pushbutton_pressed, blink_interrupted
red = (255, 0, 0)
red = set_neopixel_brightness(red)
green = (0, 255, 0)
green = set_neopixel_brightness(green)
if ten_min_timer_led_index == 11:
return
if (ten_min_timer % 60) == 0:
if ten_min_timer_led_index == 10:
pushbutton_pressed = 0
blink_and_beep(15)
if blink_interrupted == 1:
blink_interrupted = 0
return
ten_min_timer_led_index = 11
led_strip[0] = green
led_strip[2] = green
led_strip[4] = green
led_strip[6] = green
led_strip[8] = green
led_strip.write()
return
lightup_led(ten_min_timer_led_index, red)
ten_min_timer_led_index += 1
ten_min_timer += 1
def button_callback(push_button):
global ten_min_timer, ten_min_timer_led_index, pushbutton_pressed
pushbutton_pressed = 1
ten_min_timer = 0
ten_min_timer_led_index = 0
set_neopixel_color(0,0,0)
count_10_min()
set_neopixel_color(0,0,0)
push_button.irq(trigger=Pin.IRQ_FALLING, handler=button_callback)
green = (0, 255, 0)
green = set_neopixel_brightness(green)
led_strip[0] = green
led_strip[2] = green
led_strip[4] = green
led_strip[6] = green
led_strip[8] = green
led_strip.write()
led_state = False
while True:
count_10_min()
time.sleep(1)
if led_state:
led.low()
led_state = False
else:
led.high()
led_state = True

View File

@@ -89,9 +89,22 @@ def read_nfc_loop():
ntag_string = 'Data: '
sys.stdout.write('Reading ntag \r')
leds_on = 0
for page in range(20,40):
try:
ntag2xx_page = pn532.ntag2xx_read_block(page)
if (page % 2) == 0:
if page == 0:
pass
elif page == 2:
pass
else:
led_strip[leds_on] = (0,0,255)
leds_on += 1
if leds_on > 7:
leds_on = 7
led_strip.write()
if ntag2xx_page is not None:
for char in ntag2xx_page:
@@ -125,9 +138,6 @@ def write_nfc_loop(data):
# Try again if no card is available.
if uid is not None:
break
print("")
print("Found card with UID:", [hex(i) for i in uid])
set_neopixel_color(255,255,0)
@@ -160,14 +170,23 @@ def loop():
if rw == 'w':
while True:
sys.stdout.write('ID: \r')
poll_results = poll_obj.poll(1)
data = sys.stdin.readline().strip()
write_nfc_loop(data)
elif rw == 'r':
while True:
read_nfc_loop()
ret = read_nfc_loop()
if ret == 255:
set_neopixel_color(0,0,255)
rw = None
return 1
elif rw == '':
while True:
read_nfc_loop()
ret = read_nfc_loop()
if ret == 255:
set_neopixel_color(0,0,255)
rw = None
return 1
else:
sys.stdout.write('Invalid option\r')
@@ -183,6 +202,9 @@ while True:
while True:
try:
ret = loop()
if ret == 1:
poll_results = None
break
except:
set_neopixel_color(0,0,255)
break

11
Vysledky.txt Normal file
View File

@@ -0,0 +1,11 @@
Jan_Cada 37.30186375000012
Adam_Krejsa 37.911874899999994
Lukas_Bouchal 40.46594706666668
Lucie_Ponocna 40.77001086666654
Michal_Dolezal 48.86233890000003
Vojta_Flekr 49.97398888333325
David_Bedrnicek 55.68816689999985
David_Hubalek 65.28151173333329
Jenda 78.040001050000136
Nacelnik 31.216666667