Compare commits

...

12 Commits

30 changed files with 123966 additions and 4 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

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()

View File

@@ -11,7 +11,9 @@ 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)
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
@@ -80,19 +82,24 @@ def blink_and_beep(times):
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 = 0
ten_min_timer_led_index = 11
def count_10_min():
global ten_min_timer, ten_min_timer_led_index, pushbutton_pressed, blink_interrupted
@@ -107,7 +114,7 @@ def count_10_min():
if (ten_min_timer % 60) == 0:
if ten_min_timer_led_index == 10:
pushbutton_pressed = 0
blink_and_beep(60)
blink_and_beep(15)
if blink_interrupted == 1:
blink_interrupted = 0
return
@@ -135,6 +142,22 @@ def button_callback(push_button):
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)
time.sleep(1)
if led_state:
led.low()
led_state = False
else:
led.high()
led_state = True