diff --git a/.gitignore b/.gitignore index 610489c..5ee527b 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,6 @@ desktop.ini # Python __pycache__/ + +# Test pictures +Pictures/bitmaps diff --git a/.vscode/extensions.json b/.vscode/extensions.json index f2e4f92..a91ca8f 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,11 @@ { + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format "recommendations": [ "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack", + "pioarduino.pioarduino-ide" ] } diff --git a/CAD files/acryl scherm.pdf b/CAD files/acryl scherm.pdf new file mode 100644 index 0000000..01798f9 Binary files /dev/null and b/CAD files/acryl scherm.pdf differ diff --git a/CAD files/acryl scherm.step b/CAD files/acryl scherm.step new file mode 100644 index 0000000..35d861e --- /dev/null +++ b/CAD files/acryl scherm.step @@ -0,0 +1,639 @@ +ISO-10303-21; +HEADER; +/* Generated by software containing ST-Developer + * from STEP Tools, Inc. (www.steptools.com) + */ + +FILE_DESCRIPTION( +/* description */ (''), +/* implementation_level */ '2;1'); + +FILE_NAME( +/* name */ 'C:/Users/TheCore/Desktop/flipflop clock/acryl scherm.step', + +/* time_stamp */ '2022-01-17T11:11:40+01:00', +/* author */ (''), +/* organization */ (''), +/* preprocessor_version */ 'ST-DEVELOPER v18.1', +/* originating_system */ 'Autodesk Translation Framework v10.10.0.1391', + +/* authorisation */ ''); + +FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }')); +ENDSEC; + +DATA; +#10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#13),#537); +#11=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#543,#12); +#12=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#14),#536); +#13=STYLED_ITEM('',(#552),#14); +#14=MANIFOLD_SOLID_BREP('screen',#329); +#15=FACE_BOUND('',#60,.T.); +#16=FACE_BOUND('',#61,.T.); +#17=FACE_BOUND('',#62,.T.); +#18=FACE_BOUND('',#65,.T.); +#19=FACE_BOUND('',#66,.T.); +#20=FACE_BOUND('',#67,.T.); +#21=FACE_BOUND('',#70,.T.); +#22=FACE_BOUND('',#71,.T.); +#23=FACE_BOUND('',#72,.T.); +#24=FACE_BOUND('',#75,.T.); +#25=FACE_BOUND('',#76,.T.); +#26=FACE_BOUND('',#77,.T.); +#27=PLANE('',#349); +#28=PLANE('',#350); +#29=PLANE('',#351); +#30=PLANE('',#352); +#31=PLANE('',#353); +#32=PLANE('',#354); +#33=PLANE('',#355); +#34=PLANE('',#356); +#35=PLANE('',#357); +#36=PLANE('',#358); +#37=FACE_OUTER_BOUND('',#53,.T.); +#38=FACE_OUTER_BOUND('',#54,.T.); +#39=FACE_OUTER_BOUND('',#55,.T.); +#40=FACE_OUTER_BOUND('',#56,.T.); +#41=FACE_OUTER_BOUND('',#57,.T.); +#42=FACE_OUTER_BOUND('',#58,.T.); +#43=FACE_OUTER_BOUND('',#59,.T.); +#44=FACE_OUTER_BOUND('',#63,.T.); +#45=FACE_OUTER_BOUND('',#64,.T.); +#46=FACE_OUTER_BOUND('',#68,.T.); +#47=FACE_OUTER_BOUND('',#69,.T.); +#48=FACE_OUTER_BOUND('',#73,.T.); +#49=FACE_OUTER_BOUND('',#74,.T.); +#50=FACE_OUTER_BOUND('',#78,.T.); +#51=FACE_OUTER_BOUND('',#79,.T.); +#52=FACE_OUTER_BOUND('',#80,.T.); +#53=EDGE_LOOP('',(#223,#224,#225,#226)); +#54=EDGE_LOOP('',(#227,#228,#229,#230)); +#55=EDGE_LOOP('',(#231,#232,#233,#234)); +#56=EDGE_LOOP('',(#235,#236,#237,#238)); +#57=EDGE_LOOP('',(#239,#240,#241,#242)); +#58=EDGE_LOOP('',(#243,#244,#245,#246)); +#59=EDGE_LOOP('',(#247,#248,#249,#250)); +#60=EDGE_LOOP('',(#251)); +#61=EDGE_LOOP('',(#252)); +#62=EDGE_LOOP('',(#253)); +#63=EDGE_LOOP('',(#254,#255,#256,#257)); +#64=EDGE_LOOP('',(#258,#259,#260,#261)); +#65=EDGE_LOOP('',(#262)); +#66=EDGE_LOOP('',(#263)); +#67=EDGE_LOOP('',(#264)); +#68=EDGE_LOOP('',(#265,#266,#267,#268)); +#69=EDGE_LOOP('',(#269,#270,#271,#272)); +#70=EDGE_LOOP('',(#273)); +#71=EDGE_LOOP('',(#274)); +#72=EDGE_LOOP('',(#275)); +#73=EDGE_LOOP('',(#276,#277,#278,#279)); +#74=EDGE_LOOP('',(#280,#281,#282,#283)); +#75=EDGE_LOOP('',(#284)); +#76=EDGE_LOOP('',(#285)); +#77=EDGE_LOOP('',(#286)); +#78=EDGE_LOOP('',(#287,#288,#289,#290)); +#79=EDGE_LOOP('',(#291,#292,#293,#294,#295,#296,#297,#298)); +#80=EDGE_LOOP('',(#299,#300,#301,#302,#303,#304,#305,#306)); +#81=LINE('',#452,#111); +#82=LINE('',#458,#112); +#83=LINE('',#464,#113); +#84=LINE('',#470,#114); +#85=LINE('',#476,#115); +#86=LINE('',#482,#116); +#87=LINE('',#487,#117); +#88=LINE('',#489,#118); +#89=LINE('',#491,#119); +#90=LINE('',#492,#120); +#91=LINE('',#495,#121); +#92=LINE('',#497,#122); +#93=LINE('',#498,#123); +#94=LINE('',#501,#124); +#95=LINE('',#503,#125); +#96=LINE('',#504,#126); +#97=LINE('',#507,#127); +#98=LINE('',#509,#128); +#99=LINE('',#510,#129); +#100=LINE('',#513,#130); +#101=LINE('',#515,#131); +#102=LINE('',#516,#132); +#103=LINE('',#519,#133); +#104=LINE('',#521,#134); +#105=LINE('',#522,#135); +#106=LINE('',#525,#136); +#107=LINE('',#527,#137); +#108=LINE('',#528,#138); +#109=LINE('',#530,#139); +#110=LINE('',#531,#140); +#111=VECTOR('',#365,2.00000000000003); +#112=VECTOR('',#372,2.00000000000003); +#113=VECTOR('',#379,1.99999999999999); +#114=VECTOR('',#386,1.99999999999999); +#115=VECTOR('',#393,1.99999999999999); +#116=VECTOR('',#400,1.99999999999999); +#117=VECTOR('',#405,10.); +#118=VECTOR('',#406,10.); +#119=VECTOR('',#407,10.); +#120=VECTOR('',#408,10.); +#121=VECTOR('',#411,10.); +#122=VECTOR('',#412,10.); +#123=VECTOR('',#413,10.); +#124=VECTOR('',#416,10.); +#125=VECTOR('',#417,10.); +#126=VECTOR('',#418,10.); +#127=VECTOR('',#421,10.); +#128=VECTOR('',#422,10.); +#129=VECTOR('',#423,10.); +#130=VECTOR('',#426,10.); +#131=VECTOR('',#427,10.); +#132=VECTOR('',#428,10.); +#133=VECTOR('',#431,10.); +#134=VECTOR('',#432,10.); +#135=VECTOR('',#433,10.); +#136=VECTOR('',#436,10.); +#137=VECTOR('',#437,10.); +#138=VECTOR('',#438,10.); +#139=VECTOR('',#441,10.); +#140=VECTOR('',#442,10.); +#141=CIRCLE('',#332,2.00000000000003); +#142=CIRCLE('',#333,2.00000000000003); +#143=CIRCLE('',#335,2.00000000000003); +#144=CIRCLE('',#336,2.00000000000003); +#145=CIRCLE('',#338,1.99999999999999); +#146=CIRCLE('',#339,1.99999999999999); +#147=CIRCLE('',#341,1.99999999999999); +#148=CIRCLE('',#342,1.99999999999999); +#149=CIRCLE('',#344,1.99999999999999); +#150=CIRCLE('',#345,1.99999999999999); +#151=CIRCLE('',#347,1.99999999999999); +#152=CIRCLE('',#348,1.99999999999999); +#153=VERTEX_POINT('',#449); +#154=VERTEX_POINT('',#451); +#155=VERTEX_POINT('',#455); +#156=VERTEX_POINT('',#457); +#157=VERTEX_POINT('',#461); +#158=VERTEX_POINT('',#463); +#159=VERTEX_POINT('',#467); +#160=VERTEX_POINT('',#469); +#161=VERTEX_POINT('',#473); +#162=VERTEX_POINT('',#475); +#163=VERTEX_POINT('',#479); +#164=VERTEX_POINT('',#481); +#165=VERTEX_POINT('',#485); +#166=VERTEX_POINT('',#486); +#167=VERTEX_POINT('',#488); +#168=VERTEX_POINT('',#490); +#169=VERTEX_POINT('',#494); +#170=VERTEX_POINT('',#496); +#171=VERTEX_POINT('',#500); +#172=VERTEX_POINT('',#502); +#173=VERTEX_POINT('',#506); +#174=VERTEX_POINT('',#508); +#175=VERTEX_POINT('',#512); +#176=VERTEX_POINT('',#514); +#177=VERTEX_POINT('',#518); +#178=VERTEX_POINT('',#520); +#179=VERTEX_POINT('',#524); +#180=VERTEX_POINT('',#526); +#181=EDGE_CURVE('',#153,#153,#141,.T.); +#182=EDGE_CURVE('',#153,#154,#81,.T.); +#183=EDGE_CURVE('',#154,#154,#142,.T.); +#184=EDGE_CURVE('',#155,#155,#143,.T.); +#185=EDGE_CURVE('',#155,#156,#82,.T.); +#186=EDGE_CURVE('',#156,#156,#144,.T.); +#187=EDGE_CURVE('',#157,#157,#145,.T.); +#188=EDGE_CURVE('',#157,#158,#83,.T.); +#189=EDGE_CURVE('',#158,#158,#146,.T.); +#190=EDGE_CURVE('',#159,#159,#147,.T.); +#191=EDGE_CURVE('',#159,#160,#84,.T.); +#192=EDGE_CURVE('',#160,#160,#148,.T.); +#193=EDGE_CURVE('',#161,#161,#149,.T.); +#194=EDGE_CURVE('',#161,#162,#85,.T.); +#195=EDGE_CURVE('',#162,#162,#150,.T.); +#196=EDGE_CURVE('',#163,#163,#151,.T.); +#197=EDGE_CURVE('',#163,#164,#86,.T.); +#198=EDGE_CURVE('',#164,#164,#152,.T.); +#199=EDGE_CURVE('',#165,#166,#87,.T.); +#200=EDGE_CURVE('',#167,#166,#88,.T.); +#201=EDGE_CURVE('',#167,#168,#89,.T.); +#202=EDGE_CURVE('',#168,#165,#90,.T.); +#203=EDGE_CURVE('',#166,#169,#91,.T.); +#204=EDGE_CURVE('',#170,#169,#92,.T.); +#205=EDGE_CURVE('',#170,#167,#93,.T.); +#206=EDGE_CURVE('',#169,#171,#94,.T.); +#207=EDGE_CURVE('',#172,#171,#95,.T.); +#208=EDGE_CURVE('',#172,#170,#96,.T.); +#209=EDGE_CURVE('',#171,#173,#97,.T.); +#210=EDGE_CURVE('',#174,#173,#98,.T.); +#211=EDGE_CURVE('',#172,#174,#99,.T.); +#212=EDGE_CURVE('',#173,#175,#100,.T.); +#213=EDGE_CURVE('',#176,#175,#101,.T.); +#214=EDGE_CURVE('',#174,#176,#102,.T.); +#215=EDGE_CURVE('',#175,#177,#103,.T.); +#216=EDGE_CURVE('',#178,#177,#104,.T.); +#217=EDGE_CURVE('',#176,#178,#105,.T.); +#218=EDGE_CURVE('',#177,#179,#106,.T.); +#219=EDGE_CURVE('',#180,#179,#107,.T.); +#220=EDGE_CURVE('',#178,#180,#108,.T.); +#221=EDGE_CURVE('',#179,#165,#109,.T.); +#222=EDGE_CURVE('',#168,#180,#110,.T.); +#223=ORIENTED_EDGE('',*,*,#181,.F.); +#224=ORIENTED_EDGE('',*,*,#182,.T.); +#225=ORIENTED_EDGE('',*,*,#183,.F.); +#226=ORIENTED_EDGE('',*,*,#182,.F.); +#227=ORIENTED_EDGE('',*,*,#184,.F.); +#228=ORIENTED_EDGE('',*,*,#185,.T.); +#229=ORIENTED_EDGE('',*,*,#186,.F.); +#230=ORIENTED_EDGE('',*,*,#185,.F.); +#231=ORIENTED_EDGE('',*,*,#187,.F.); +#232=ORIENTED_EDGE('',*,*,#188,.T.); +#233=ORIENTED_EDGE('',*,*,#189,.F.); +#234=ORIENTED_EDGE('',*,*,#188,.F.); +#235=ORIENTED_EDGE('',*,*,#190,.F.); +#236=ORIENTED_EDGE('',*,*,#191,.T.); +#237=ORIENTED_EDGE('',*,*,#192,.F.); +#238=ORIENTED_EDGE('',*,*,#191,.F.); +#239=ORIENTED_EDGE('',*,*,#193,.F.); +#240=ORIENTED_EDGE('',*,*,#194,.T.); +#241=ORIENTED_EDGE('',*,*,#195,.F.); +#242=ORIENTED_EDGE('',*,*,#194,.F.); +#243=ORIENTED_EDGE('',*,*,#196,.F.); +#244=ORIENTED_EDGE('',*,*,#197,.T.); +#245=ORIENTED_EDGE('',*,*,#198,.F.); +#246=ORIENTED_EDGE('',*,*,#197,.F.); +#247=ORIENTED_EDGE('',*,*,#199,.T.); +#248=ORIENTED_EDGE('',*,*,#200,.F.); +#249=ORIENTED_EDGE('',*,*,#201,.T.); +#250=ORIENTED_EDGE('',*,*,#202,.T.); +#251=ORIENTED_EDGE('',*,*,#183,.T.); +#252=ORIENTED_EDGE('',*,*,#189,.T.); +#253=ORIENTED_EDGE('',*,*,#195,.T.); +#254=ORIENTED_EDGE('',*,*,#203,.T.); +#255=ORIENTED_EDGE('',*,*,#204,.F.); +#256=ORIENTED_EDGE('',*,*,#205,.T.); +#257=ORIENTED_EDGE('',*,*,#200,.T.); +#258=ORIENTED_EDGE('',*,*,#206,.T.); +#259=ORIENTED_EDGE('',*,*,#207,.F.); +#260=ORIENTED_EDGE('',*,*,#208,.T.); +#261=ORIENTED_EDGE('',*,*,#204,.T.); +#262=ORIENTED_EDGE('',*,*,#184,.T.); +#263=ORIENTED_EDGE('',*,*,#190,.T.); +#264=ORIENTED_EDGE('',*,*,#196,.T.); +#265=ORIENTED_EDGE('',*,*,#209,.T.); +#266=ORIENTED_EDGE('',*,*,#210,.F.); +#267=ORIENTED_EDGE('',*,*,#211,.F.); +#268=ORIENTED_EDGE('',*,*,#207,.T.); +#269=ORIENTED_EDGE('',*,*,#212,.T.); +#270=ORIENTED_EDGE('',*,*,#213,.F.); +#271=ORIENTED_EDGE('',*,*,#214,.F.); +#272=ORIENTED_EDGE('',*,*,#210,.T.); +#273=ORIENTED_EDGE('',*,*,#186,.T.); +#274=ORIENTED_EDGE('',*,*,#192,.T.); +#275=ORIENTED_EDGE('',*,*,#198,.T.); +#276=ORIENTED_EDGE('',*,*,#215,.T.); +#277=ORIENTED_EDGE('',*,*,#216,.F.); +#278=ORIENTED_EDGE('',*,*,#217,.F.); +#279=ORIENTED_EDGE('',*,*,#213,.T.); +#280=ORIENTED_EDGE('',*,*,#218,.T.); +#281=ORIENTED_EDGE('',*,*,#219,.F.); +#282=ORIENTED_EDGE('',*,*,#220,.F.); +#283=ORIENTED_EDGE('',*,*,#216,.T.); +#284=ORIENTED_EDGE('',*,*,#181,.T.); +#285=ORIENTED_EDGE('',*,*,#187,.T.); +#286=ORIENTED_EDGE('',*,*,#193,.T.); +#287=ORIENTED_EDGE('',*,*,#221,.T.); +#288=ORIENTED_EDGE('',*,*,#202,.F.); +#289=ORIENTED_EDGE('',*,*,#222,.T.); +#290=ORIENTED_EDGE('',*,*,#219,.T.); +#291=ORIENTED_EDGE('',*,*,#211,.T.); +#292=ORIENTED_EDGE('',*,*,#214,.T.); +#293=ORIENTED_EDGE('',*,*,#217,.T.); +#294=ORIENTED_EDGE('',*,*,#220,.T.); +#295=ORIENTED_EDGE('',*,*,#222,.F.); +#296=ORIENTED_EDGE('',*,*,#201,.F.); +#297=ORIENTED_EDGE('',*,*,#205,.F.); +#298=ORIENTED_EDGE('',*,*,#208,.F.); +#299=ORIENTED_EDGE('',*,*,#212,.F.); +#300=ORIENTED_EDGE('',*,*,#209,.F.); +#301=ORIENTED_EDGE('',*,*,#206,.F.); +#302=ORIENTED_EDGE('',*,*,#203,.F.); +#303=ORIENTED_EDGE('',*,*,#199,.F.); +#304=ORIENTED_EDGE('',*,*,#221,.F.); +#305=ORIENTED_EDGE('',*,*,#218,.F.); +#306=ORIENTED_EDGE('',*,*,#215,.F.); +#307=CYLINDRICAL_SURFACE('',#331,2.00000000000003); +#308=CYLINDRICAL_SURFACE('',#334,2.00000000000003); +#309=CYLINDRICAL_SURFACE('',#337,1.99999999999999); +#310=CYLINDRICAL_SURFACE('',#340,1.99999999999999); +#311=CYLINDRICAL_SURFACE('',#343,1.99999999999999); +#312=CYLINDRICAL_SURFACE('',#346,1.99999999999999); +#313=ADVANCED_FACE('',(#37),#307,.F.); +#314=ADVANCED_FACE('',(#38),#308,.F.); +#315=ADVANCED_FACE('',(#39),#309,.F.); +#316=ADVANCED_FACE('',(#40),#310,.F.); +#317=ADVANCED_FACE('',(#41),#311,.F.); +#318=ADVANCED_FACE('',(#42),#312,.F.); +#319=ADVANCED_FACE('',(#43,#15,#16,#17),#27,.T.); +#320=ADVANCED_FACE('',(#44),#28,.T.); +#321=ADVANCED_FACE('',(#45,#18,#19,#20),#29,.T.); +#322=ADVANCED_FACE('',(#46),#30,.T.); +#323=ADVANCED_FACE('',(#47,#21,#22,#23),#31,.T.); +#324=ADVANCED_FACE('',(#48),#32,.T.); +#325=ADVANCED_FACE('',(#49,#24,#25,#26),#33,.T.); +#326=ADVANCED_FACE('',(#50),#34,.T.); +#327=ADVANCED_FACE('',(#51),#35,.T.); +#328=ADVANCED_FACE('',(#52),#36,.T.); +#329=CLOSED_SHELL('',(#313,#314,#315,#316,#317,#318,#319,#320,#321,#322, +#323,#324,#325,#326,#327,#328)); +#330=AXIS2_PLACEMENT_3D('placement',#447,#359,#360); +#331=AXIS2_PLACEMENT_3D('',#448,#361,#362); +#332=AXIS2_PLACEMENT_3D('',#450,#363,#364); +#333=AXIS2_PLACEMENT_3D('',#453,#366,#367); +#334=AXIS2_PLACEMENT_3D('',#454,#368,#369); +#335=AXIS2_PLACEMENT_3D('',#456,#370,#371); +#336=AXIS2_PLACEMENT_3D('',#459,#373,#374); +#337=AXIS2_PLACEMENT_3D('',#460,#375,#376); +#338=AXIS2_PLACEMENT_3D('',#462,#377,#378); +#339=AXIS2_PLACEMENT_3D('',#465,#380,#381); +#340=AXIS2_PLACEMENT_3D('',#466,#382,#383); +#341=AXIS2_PLACEMENT_3D('',#468,#384,#385); +#342=AXIS2_PLACEMENT_3D('',#471,#387,#388); +#343=AXIS2_PLACEMENT_3D('',#472,#389,#390); +#344=AXIS2_PLACEMENT_3D('',#474,#391,#392); +#345=AXIS2_PLACEMENT_3D('',#477,#394,#395); +#346=AXIS2_PLACEMENT_3D('',#478,#396,#397); +#347=AXIS2_PLACEMENT_3D('',#480,#398,#399); +#348=AXIS2_PLACEMENT_3D('',#483,#401,#402); +#349=AXIS2_PLACEMENT_3D('',#484,#403,#404); +#350=AXIS2_PLACEMENT_3D('',#493,#409,#410); +#351=AXIS2_PLACEMENT_3D('',#499,#414,#415); +#352=AXIS2_PLACEMENT_3D('',#505,#419,#420); +#353=AXIS2_PLACEMENT_3D('',#511,#424,#425); +#354=AXIS2_PLACEMENT_3D('',#517,#429,#430); +#355=AXIS2_PLACEMENT_3D('',#523,#434,#435); +#356=AXIS2_PLACEMENT_3D('',#529,#439,#440); +#357=AXIS2_PLACEMENT_3D('',#532,#443,#444); +#358=AXIS2_PLACEMENT_3D('',#533,#445,#446); +#359=DIRECTION('axis',(0.,0.,1.)); +#360=DIRECTION('refdir',(1.,0.,0.)); +#361=DIRECTION('center_axis',(0.,-1.,0.)); +#362=DIRECTION('ref_axis',(-1.,0.,0.)); +#363=DIRECTION('center_axis',(0.,-1.,0.)); +#364=DIRECTION('ref_axis',(-1.,0.,0.)); +#365=DIRECTION('',(0.,-1.,0.)); +#366=DIRECTION('center_axis',(0.,1.,-2.52323414687536E-17)); +#367=DIRECTION('ref_axis',(-1.,0.,0.)); +#368=DIRECTION('center_axis',(0.,-1.,0.)); +#369=DIRECTION('ref_axis',(-1.,0.,0.)); +#370=DIRECTION('center_axis',(0.,-1.,0.)); +#371=DIRECTION('ref_axis',(-1.,0.,0.)); +#372=DIRECTION('',(0.,-1.,0.)); +#373=DIRECTION('center_axis',(0.,1.,0.)); +#374=DIRECTION('ref_axis',(-1.,0.,0.)); +#375=DIRECTION('center_axis',(0.,-1.,0.)); +#376=DIRECTION('ref_axis',(-1.,0.,0.)); +#377=DIRECTION('center_axis',(0.,-1.,0.)); +#378=DIRECTION('ref_axis',(-1.,0.,0.)); +#379=DIRECTION('',(0.,-1.,0.)); +#380=DIRECTION('center_axis',(0.,1.,-2.52323414687536E-17)); +#381=DIRECTION('ref_axis',(-1.,0.,0.)); +#382=DIRECTION('center_axis',(0.,-1.,0.)); +#383=DIRECTION('ref_axis',(-1.,0.,0.)); +#384=DIRECTION('center_axis',(0.,-1.,0.)); +#385=DIRECTION('ref_axis',(-1.,0.,0.)); +#386=DIRECTION('',(0.,-1.,0.)); +#387=DIRECTION('center_axis',(0.,1.,0.)); +#388=DIRECTION('ref_axis',(-1.,0.,0.)); +#389=DIRECTION('center_axis',(0.,-1.,0.)); +#390=DIRECTION('ref_axis',(-1.,0.,0.)); +#391=DIRECTION('center_axis',(0.,-1.,0.)); +#392=DIRECTION('ref_axis',(-1.,0.,0.)); +#393=DIRECTION('',(0.,-1.,0.)); +#394=DIRECTION('center_axis',(0.,1.,-2.52323414687536E-17)); +#395=DIRECTION('ref_axis',(-1.,0.,0.)); +#396=DIRECTION('center_axis',(0.,-1.,0.)); +#397=DIRECTION('ref_axis',(-1.,0.,0.)); +#398=DIRECTION('center_axis',(0.,-1.,0.)); +#399=DIRECTION('ref_axis',(-1.,0.,0.)); +#400=DIRECTION('',(0.,-1.,0.)); +#401=DIRECTION('center_axis',(0.,1.,0.)); +#402=DIRECTION('ref_axis',(-1.,0.,0.)); +#403=DIRECTION('center_axis',(0.,-1.,2.52323414687536E-17)); +#404=DIRECTION('ref_axis',(0.,-2.52323414687536E-17,-1.)); +#405=DIRECTION('',(0.,2.52323414687536E-17,1.)); +#406=DIRECTION('',(1.,0.,0.)); +#407=DIRECTION('',(0.,-2.52323414687536E-17,-1.)); +#408=DIRECTION('',(1.,0.,0.)); +#409=DIRECTION('center_axis',(0.,-3.52451753849257E-17,1.)); +#410=DIRECTION('ref_axis',(0.,-1.,-3.52451753849257E-17)); +#411=DIRECTION('',(0.,1.,3.52451753849257E-17)); +#412=DIRECTION('',(1.,0.,0.)); +#413=DIRECTION('',(0.,-1.,-3.52451753849257E-17)); +#414=DIRECTION('center_axis',(0.,1.,0.)); +#415=DIRECTION('ref_axis',(0.,0.,1.)); +#416=DIRECTION('',(0.,0.,-1.)); +#417=DIRECTION('',(1.,0.,0.)); +#418=DIRECTION('',(0.,0.,1.)); +#419=DIRECTION('center_axis',(0.,0.,-1.)); +#420=DIRECTION('ref_axis',(0.,1.,0.)); +#421=DIRECTION('',(0.,-1.,0.)); +#422=DIRECTION('',(1.,0.,0.)); +#423=DIRECTION('',(0.,-1.,0.)); +#424=DIRECTION('center_axis',(0.,-1.,0.)); +#425=DIRECTION('ref_axis',(0.,0.,-1.)); +#426=DIRECTION('',(0.,0.,1.)); +#427=DIRECTION('',(1.,0.,0.)); +#428=DIRECTION('',(0.,0.,1.)); +#429=DIRECTION('center_axis',(0.,0.,-1.)); +#430=DIRECTION('ref_axis',(0.,1.,0.)); +#431=DIRECTION('',(0.,-1.,0.)); +#432=DIRECTION('',(1.,0.,0.)); +#433=DIRECTION('',(0.,-1.,0.)); +#434=DIRECTION('center_axis',(0.,1.,0.)); +#435=DIRECTION('ref_axis',(0.,0.,1.)); +#436=DIRECTION('',(0.,0.,-1.)); +#437=DIRECTION('',(1.,0.,0.)); +#438=DIRECTION('',(0.,0.,-1.)); +#439=DIRECTION('center_axis',(0.,2.96059473233375E-15,-1.)); +#440=DIRECTION('ref_axis',(0.,1.,2.96059473233375E-15)); +#441=DIRECTION('',(0.,-1.,-2.96059473233375E-15)); +#442=DIRECTION('',(0.,1.,2.96059473233375E-15)); +#443=DIRECTION('center_axis',(-1.,0.,0.)); +#444=DIRECTION('ref_axis',(0.,0.,1.)); +#445=DIRECTION('center_axis',(1.,0.,0.)); +#446=DIRECTION('ref_axis',(0.,0.,-1.)); +#447=CARTESIAN_POINT('',(0.,0.,0.)); +#448=CARTESIAN_POINT('Origin',(518.,244.,-34.9999999999999)); +#449=CARTESIAN_POINT('',(520.,-5.,-34.9999999999999)); +#450=CARTESIAN_POINT('Origin',(518.,-5.,-34.9999999999999)); +#451=CARTESIAN_POINT('',(520.,-8.00000000000001,-34.9999999999999)); +#452=CARTESIAN_POINT('',(520.,244.,-34.9999999999999)); +#453=CARTESIAN_POINT('Origin',(518.,-8.00000000000001,-34.9999999999999)); +#454=CARTESIAN_POINT('Origin',(518.,244.,-34.9999999999999)); +#455=CARTESIAN_POINT('',(520.,244.,-34.9999999999999)); +#456=CARTESIAN_POINT('Origin',(518.,244.,-34.9999999999999)); +#457=CARTESIAN_POINT('',(520.,241.,-34.9999999999999)); +#458=CARTESIAN_POINT('',(520.,244.,-34.9999999999999)); +#459=CARTESIAN_POINT('Origin',(518.,241.,-34.9999999999999)); +#460=CARTESIAN_POINT('Origin',(141.5,244.,-34.9999999999999)); +#461=CARTESIAN_POINT('',(143.5,-5.,-34.9999999999999)); +#462=CARTESIAN_POINT('Origin',(141.5,-5.,-34.9999999999999)); +#463=CARTESIAN_POINT('',(143.5,-8.00000000000001,-34.9999999999999)); +#464=CARTESIAN_POINT('',(143.5,244.,-34.9999999999999)); +#465=CARTESIAN_POINT('Origin',(141.5,-8.00000000000001,-34.9999999999999)); +#466=CARTESIAN_POINT('Origin',(141.5,244.,-34.9999999999999)); +#467=CARTESIAN_POINT('',(143.5,244.,-34.9999999999999)); +#468=CARTESIAN_POINT('Origin',(141.5,244.,-34.9999999999999)); +#469=CARTESIAN_POINT('',(143.5,241.,-34.9999999999999)); +#470=CARTESIAN_POINT('',(143.5,244.,-34.9999999999999)); +#471=CARTESIAN_POINT('Origin',(141.5,241.,-34.9999999999999)); +#472=CARTESIAN_POINT('Origin',(-235.,244.,-34.9999999999999)); +#473=CARTESIAN_POINT('',(-233.,-5.,-34.9999999999999)); +#474=CARTESIAN_POINT('Origin',(-235.,-5.,-34.9999999999999)); +#475=CARTESIAN_POINT('',(-233.,-8.00000000000001,-34.9999999999999)); +#476=CARTESIAN_POINT('',(-233.,244.,-34.9999999999999)); +#477=CARTESIAN_POINT('Origin',(-235.,-8.00000000000001,-34.9999999999999)); +#478=CARTESIAN_POINT('Origin',(-235.,244.,-34.9999999999999)); +#479=CARTESIAN_POINT('',(-233.,244.,-34.9999999999999)); +#480=CARTESIAN_POINT('Origin',(-235.,244.,-34.9999999999999)); +#481=CARTESIAN_POINT('',(-233.,241.,-34.9999999999999)); +#482=CARTESIAN_POINT('',(-233.,244.,-34.9999999999999)); +#483=CARTESIAN_POINT('Origin',(-235.,241.,-34.9999999999999)); +#484=CARTESIAN_POINT('Origin',(-285.,-8.00000000000001,43.0000000000001)); +#485=CARTESIAN_POINT('',(568.,-8.00000000000001,-44.9999999999999)); +#486=CARTESIAN_POINT('',(568.,-8.00000000000001,43.0000000000001)); +#487=CARTESIAN_POINT('',(568.,-8.00000000000001,21.0000000000001)); +#488=CARTESIAN_POINT('',(-285.,-8.00000000000001,43.0000000000001)); +#489=CARTESIAN_POINT('',(-285.,-8.00000000000001,43.0000000000001)); +#490=CARTESIAN_POINT('',(-285.,-8.00000000000001,-44.9999999999999)); +#491=CARTESIAN_POINT('',(-285.,-8.00000000000001,43.0000000000001)); +#492=CARTESIAN_POINT('',(-285.,-8.00000000000001,-44.9999999999999)); +#493=CARTESIAN_POINT('Origin',(-285.,244.,43.0000000000001)); +#494=CARTESIAN_POINT('',(568.,244.,43.0000000000001)); +#495=CARTESIAN_POINT('',(568.,181.,43.0000000000001)); +#496=CARTESIAN_POINT('',(-285.,244.,43.0000000000001)); +#497=CARTESIAN_POINT('',(-285.,244.,43.0000000000001)); +#498=CARTESIAN_POINT('',(-285.,244.,43.0000000000001)); +#499=CARTESIAN_POINT('Origin',(-285.,244.,-44.9999999999999)); +#500=CARTESIAN_POINT('',(568.,244.,-44.9999999999999)); +#501=CARTESIAN_POINT('',(568.,244.,-22.9999999999999)); +#502=CARTESIAN_POINT('',(-285.,244.,-44.9999999999999)); +#503=CARTESIAN_POINT('',(-285.,244.,-44.9999999999999)); +#504=CARTESIAN_POINT('',(-285.,244.,-44.9999999999999)); +#505=CARTESIAN_POINT('Origin',(-285.,241.,-44.9999999999999)); +#506=CARTESIAN_POINT('',(568.,241.,-44.9999999999999)); +#507=CARTESIAN_POINT('',(568.,179.5,-44.9999999999999)); +#508=CARTESIAN_POINT('',(-285.,241.,-44.9999999999999)); +#509=CARTESIAN_POINT('',(-285.,241.,-44.9999999999999)); +#510=CARTESIAN_POINT('',(-285.,244.,-44.9999999999999)); +#511=CARTESIAN_POINT('Origin',(-285.,241.,40.0000000000001)); +#512=CARTESIAN_POINT('',(568.,241.,40.0000000000001)); +#513=CARTESIAN_POINT('',(568.,241.,19.5000000000001)); +#514=CARTESIAN_POINT('',(-285.,241.,40.0000000000001)); +#515=CARTESIAN_POINT('',(-285.,241.,40.0000000000001)); +#516=CARTESIAN_POINT('',(-285.,241.,-44.9999999999999)); +#517=CARTESIAN_POINT('Origin',(-285.,-5.,40.0000000000001)); +#518=CARTESIAN_POINT('',(568.,-5.00000000000001,40.0000000000001)); +#519=CARTESIAN_POINT('',(568.,56.4999999999999,40.0000000000001)); +#520=CARTESIAN_POINT('',(-285.,-5.00000000000001,40.0000000000001)); +#521=CARTESIAN_POINT('',(-285.,-5.00000000000001,40.0000000000001)); +#522=CARTESIAN_POINT('',(-285.,241.,40.0000000000001)); +#523=CARTESIAN_POINT('Origin',(-285.,-5.00000000000001,-44.9999999999999)); +#524=CARTESIAN_POINT('',(568.,-5.00000000000001,-44.9999999999999)); +#525=CARTESIAN_POINT('',(568.,-5.,-22.9999999999999)); +#526=CARTESIAN_POINT('',(-285.,-5.00000000000001,-44.9999999999999)); +#527=CARTESIAN_POINT('',(-285.,-5.00000000000001,-44.9999999999999)); +#528=CARTESIAN_POINT('',(-285.,-5.00000000000001,40.0000000000001)); +#529=CARTESIAN_POINT('Origin',(-285.,-8.00000000000001,-44.9999999999999)); +#530=CARTESIAN_POINT('',(568.,55.,-44.9999999999998)); +#531=CARTESIAN_POINT('',(-285.,-8.00000000000001,-44.9999999999999)); +#532=CARTESIAN_POINT('Origin',(-285.,118.,-0.999999999999934)); +#533=CARTESIAN_POINT('Origin',(568.,118.,-0.99999999999993)); +#534=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#538, +'DISTANCE_ACCURACY_VALUE', +'Maximum model space distance between geometric entities at asserted c +onnectivities'); +#535=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#538, +'DISTANCE_ACCURACY_VALUE', +'Maximum model space distance between geometric entities at asserted c +onnectivities'); +#536=( +GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#534)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#538,#539,#540)) +REPRESENTATION_CONTEXT('','3D') +); +#537=( +GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#535)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#538,#539,#540)) +REPRESENTATION_CONTEXT('','3D') +); +#538=( +LENGTH_UNIT() +NAMED_UNIT(*) +SI_UNIT(.MILLI.,.METRE.) +); +#539=( +NAMED_UNIT(*) +PLANE_ANGLE_UNIT() +SI_UNIT($,.RADIAN.) +); +#540=( +NAMED_UNIT(*) +SI_UNIT($,.STERADIAN.) +SOLID_ANGLE_UNIT() +); +#541=SHAPE_DEFINITION_REPRESENTATION(#542,#543); +#542=PRODUCT_DEFINITION_SHAPE('',$,#545); +#543=SHAPE_REPRESENTATION('',(#330),#536); +#544=PRODUCT_DEFINITION_CONTEXT('part definition',#549,'design'); +#545=PRODUCT_DEFINITION('Assembly','Assembly v18',#546,#544); +#546=PRODUCT_DEFINITION_FORMATION('',$,#551); +#547=PRODUCT_RELATED_PRODUCT_CATEGORY('Assembly v18','Assembly v18',(#551)); +#548=APPLICATION_PROTOCOL_DEFINITION('international standard', +'automotive_design',2009,#549); +#549=APPLICATION_CONTEXT( +'Core Data for Automotive Mechanical Design Process'); +#550=PRODUCT_CONTEXT('part definition',#549,'mechanical'); +#551=PRODUCT('Assembly','Assembly v18',$,(#550)); +#552=PRESENTATION_STYLE_ASSIGNMENT((#557)); +#553=PRESENTATION_STYLE_ASSIGNMENT((#558)); +#554=PRESENTATION_STYLE_ASSIGNMENT((#559)); +#555=PRESENTATION_STYLE_ASSIGNMENT((#560)); +#556=PRESENTATION_STYLE_ASSIGNMENT((#561)); +#557=SURFACE_STYLE_USAGE(.BOTH.,#562); +#558=SURFACE_STYLE_USAGE(.BOTH.,#563); +#559=SURFACE_STYLE_USAGE(.BOTH.,#564); +#560=SURFACE_STYLE_USAGE(.BOTH.,#565); +#561=SURFACE_STYLE_USAGE(.BOTH.,#566); +#562=SURFACE_SIDE_STYLE('',(#567)); +#563=SURFACE_SIDE_STYLE('',(#568)); +#564=SURFACE_SIDE_STYLE('',(#569)); +#565=SURFACE_SIDE_STYLE('',(#570)); +#566=SURFACE_SIDE_STYLE('',(#571)); +#567=SURFACE_STYLE_FILL_AREA(#572); +#568=SURFACE_STYLE_FILL_AREA(#573); +#569=SURFACE_STYLE_FILL_AREA(#574); +#570=SURFACE_STYLE_FILL_AREA(#575); +#571=SURFACE_STYLE_FILL_AREA(#576); +#572=FILL_AREA_STYLE('Steel - Satin',(#577)); +#573=FILL_AREA_STYLE('Paint - Metallic (Silver)',(#578)); +#574=FILL_AREA_STYLE('Paint - Metallic (Red)',(#579)); +#575=FILL_AREA_STYLE('Paint - Metallic (Dark Grey)',(#580)); +#576=FILL_AREA_STYLE('Paint - Metallic (Black)',(#581)); +#577=FILL_AREA_STYLE_COLOUR('Steel - Satin',#582); +#578=FILL_AREA_STYLE_COLOUR('Paint - Metallic (Silver)',#583); +#579=FILL_AREA_STYLE_COLOUR('Paint - Metallic (Red)',#584); +#580=FILL_AREA_STYLE_COLOUR('Paint - Metallic (Dark Grey)',#585); +#581=FILL_AREA_STYLE_COLOUR('Paint - Metallic (Black)',#586); +#582=COLOUR_RGB('Steel - Satin',0.627450980392157,0.627450980392157,0.627450980392157); +#583=COLOUR_RGB('Paint - Metallic (Silver)',0.984313725490196,0.980392156862745, +0.96078431372549); +#584=COLOUR_RGB('Paint - Metallic (Red)',0.768627450980392,0.207843137254902, +0.152941176470588); +#585=COLOUR_RGB('Paint - Metallic (Dark Grey)',0.349019607843137,0.349019607843137, +0.349019607843137); +#586=COLOUR_RGB('Paint - Metallic (Black)',0.0980392156862745,0.0980392156862745, +0.0980392156862745); +ENDSEC; +END-ISO-10303-21; diff --git a/CAD files/controlboard holder left v2.stl b/CAD files/controlboard holder left v2.stl new file mode 100644 index 0000000..4b24d0a Binary files /dev/null and b/CAD files/controlboard holder left v2.stl differ diff --git a/CAD files/controlboard holder right v2.stl b/CAD files/controlboard holder right v2.stl new file mode 100644 index 0000000..4ec5e57 Binary files /dev/null and b/CAD files/controlboard holder right v2.stl differ diff --git a/CAD files/controlboard holder right.stl b/CAD files/controlboard holder right.stl new file mode 100644 index 0000000..1339952 Binary files /dev/null and b/CAD files/controlboard holder right.stl differ diff --git a/CAD files/esp holder.stl b/CAD files/esp holder.stl new file mode 100644 index 0000000..5b2edf4 Binary files /dev/null and b/CAD files/esp holder.stl differ diff --git a/CAD files/psu holder v2.stl b/CAD files/psu holder v2.stl new file mode 100644 index 0000000..7cc2ad1 Binary files /dev/null and b/CAD files/psu holder v2.stl differ diff --git a/CAD files/spacer 3mm.stl b/CAD files/spacer 3mm.stl new file mode 100644 index 0000000..2cc491c Binary files /dev/null and b/CAD files/spacer 3mm.stl differ diff --git a/CAD files/standoff.stl b/CAD files/standoff.stl new file mode 100644 index 0000000..03ad453 Binary files /dev/null and b/CAD files/standoff.stl differ diff --git a/Pictures/20220115_144416.jpg b/Pictures/20220115_144416.jpg new file mode 100644 index 0000000..23ac81d Binary files /dev/null and b/Pictures/20220115_144416.jpg differ diff --git a/Pictures/20220117_110806.jpg b/Pictures/20220117_110806.jpg new file mode 100644 index 0000000..9b48a76 Binary files /dev/null and b/Pictures/20220117_110806.jpg differ diff --git a/Pictures/Screenshot 2026-10-14 174616.png b/Pictures/Screenshot 2026-10-14 174616.png new file mode 100644 index 0000000..f9f4b47 Binary files /dev/null and b/Pictures/Screenshot 2026-10-14 174616.png differ diff --git a/README.md b/README.md index 8a31526..ddea789 100644 --- a/README.md +++ b/README.md @@ -305,23 +305,23 @@ The serial protocol is described in [src/nano/README.md](src/nano/README.md). ## TODO -- [ ] **Install the recovery app** (one-time USB flash, see +- [X] **Install the recovery app** (one-time USB flash, see [One-time installation](#one-time-installation-usb)). Until then the ESP32 runs the old flash layout: the clock firmware works, but without the recovery app; the Home Assistant sensor shows "no recovery app". -- [ ] **Test the web UI on the real hardware**: live view, uploading and drawing a bitmap, +- [X] **Test the web UI on the real hardware**: live view, uploading and drawing a bitmap, live mode, choosing a page, settings, Home Assistant settings (restart). - [ ] **Test the recovery app on the real hardware**: the Home Assistant button, the setup WiFi with a wrong WiFi password, 3 quick power cycles, and an OTA upload into it. -- [ ] **Rewire the Nano link to UART2.** The firmware now uses `Serial2` (GPIO 16/17) +- [X] **Rewire the Nano link to UART2.** The firmware now uses `Serial2` (GPIO 16/17) instead of `Serial` (GPIO 1/3). Move the ESP32 TX wire from GPIO 1 to **GPIO 17** before you flash this firmware, or the display gets no data. See [Wiring between ESP32 and Nano](#wiring-between-esp32-and-nano). - [ ] **Add the reply wire:** Nano D1 (TX) → voltage divider → ESP32 GPIO 16 (RX2). With it, the ESP sends the first frame as soon as the Nano is ready, instead of after 3 s, and the Nano can be flashed over WiFi (`nano_ota`). -- [ ] **Test flashing over WiFi on the real hardware.** The uploader is tested against a +- [X] **Test flashing over WiFi on the real hardware.** The uploader is tested against a simulated bootloader, not yet against the real Nano. Check especially that the old bootloader starts after the relay power cycle. - [ ] **Check the boot timing.** Build the Nano with `MEASURE_REFRESH` to see how long a diff --git a/platformio.ini b/platformio.ini index 93da5e7..6e08f69 100644 --- a/platformio.ini +++ b/platformio.ini @@ -59,7 +59,7 @@ platform = espressif32 board = esp32doit-devkit-v1 ; factory = recovery app, ota_0 / ota_1 = clock firmware (see partitions.csv) board_build.partitions = partitions.csv -monitor_port = COM11 +monitor_port = COM18 [env:esp32] extends = esp32_common @@ -81,7 +81,7 @@ upload_port = 10.1.1.198 [env:esp32_usb] extends = env:esp32 upload_protocol = esptool -upload_port = COM11 +upload_port = COM18 board_upload.offset_address = 0x110000 ; --------------------------------------------------------------------------- @@ -101,7 +101,7 @@ build_src_filter = ; ESPSERIAL: status messages are sent to the Nano like in the clock firmware build_flags = -D ESPSERIAL -I src/esp32 upload_protocol = esptool -upload_port = COM11 +upload_port = COM18 ; --------------------------------------------------------------------------- ; Unit tests on the PC (pio test -e test_nano -e test_esp32)