{"id":252458,"date":"2015-03-05T07:28:02","date_gmt":"2015-03-05T03:28:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=252458"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=252458","title":{"rendered":"\u041f\u0440\u0438\u0440\u0443\u0447\u0430\u0435\u043c \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u043e\u0432, \u0438\u043b\u0438 \u043a\u0430\u043a \u044f \u043f\u0438\u0441\u0430\u043b \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 host controller \u0434\u043b\u044f \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 3D \u043f\u0435\u0447\u0430\u0442\u0438"},"content":{"rendered":"<p>     \t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/d90\/e4d\/ee5\/d90e4dee5a374495ab802dbeab99ac67.png\"\/><\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u041f\u041e \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f 3D \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430\u043c\u0438 \u043d\u0430 Qt5, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 RepRap&#8217;\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u043c \u0440\u0430\u0434\u043e\u0441\u0442\u044f\u043c.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u0441\u0442\u0430\u043b RepRaptor \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 host-controller \u0434\u043b\u044f 3D \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u043e\u0432.<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/afc\/ac0\/582\/afcac058283a4e0ab5ed108fe2095580.png\"\/><\/p>\n<p>  \u0412\u0441\u0435\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u043f\u043e\u0434 \u043a\u0430\u0442.<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<h2>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u0438<\/h2>\n<p>  \u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0433\u043e\u0434 \u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0441\u044f 3D \u043f\u0435\u0447\u0430\u0442\u044c\u044e, \u0438 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e 3D \u043f\u0435\u0447\u0430\u0442\u044c\u044e, \u0430 \u0435\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u2014 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c <a href=\"http:\/\/reprap.org\">RepRap<\/a>. \u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0412\u0423\u0417\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043b\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043d\u0438\u044f, \u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u043c\u043e\u0438\u043c\u0438 \u0438 \u0435\u0434\u0438\u043d\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u0443\u0441\u0438\u043b\u0438\u044f\u043c\u0438 \u0432 \u041c\u0413\u0422\u0423 \u041c\u0418\u0420\u042d\u0410 \u043e\u0442\u043a\u0440\u044b\u043b\u0430\u0441\u044c \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u044f 3D \u043f\u0435\u0447\u0430\u0442\u0438. <br \/>  \u041e\u0447\u0435\u043d\u044c \u0441\u043a\u043e\u0440\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u041f\u041e \u0438\u043c\u0435\u043b\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u0448\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043b\u0438\u043a\u0432\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0441\u043e\u0437\u0434\u0430\u0432 \u0441\u0432\u043e\u0435 \u041f\u041e.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0431\u0438\u0434\u0435\u0442\u044c \u043d\u0435\u043d\u0430\u0440\u043e\u043a\u043e\u043c \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u041f\u041e, \u043d\u0435 \u0431\u0443\u0434\u0443 \u0442\u044b\u043a\u0430\u0442\u044c \u043f\u0430\u043b\u044c\u0446\u0435\u043c, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0443 \u0446\u0435\u043b\u043e\u0433\u043e \u0440\u044f\u0434\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u041f\u041e \u0434\u043b\u044f 3D \u043f\u0435\u0447\u0430\u0442\u0438 \u043e\u0431\u0449\u0438\u0435:  <\/p>\n<ul>\n<li>\u041e\u043d\u0438 \u0432\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0438 \u0440\u0430\u0437\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043d\u0430 \u0441\u043b\u0430\u0431\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u043f\u043e 10 \u043c\u0438\u043d\u0443\u0442<\/li>\n<li>\u0422\u0435 \u0438\u0437 \u043d\u0438\u0445, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 <a href=\"http:\/\/www.mono-project.com\">Mono<\/a> \u0435\u0449\u0435 \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0430\u0434\u0430\u044e\u0442, \u0438 \u043e\u0431\u0440\u0435\u043a\u0430\u044e\u0442 \u043a\u0443\u0447\u0443 \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u0430 \u043d\u0430 \u0431\u0435\u0437\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043d\u0447\u0438\u043d\u0443 (\u0412\u0438\u043d\u043e\u0432\u0430\u0442\u043e \u0442\u0443\u0442, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0435 \u0441\u0430\u043c\u043e Mono, \u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043a \u0441\u0431\u043e\u0440\u043a\u0430\u043c \u043d\u0430 \u043d\u0435\u0439 \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u043e\u0432)<\/li>\n<li>\u0412 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u043e \u043c\u0430\u043b\u043e \u043a\u043e\u0434\u043e\u0432, \u0437\u0430\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0436 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b (\u043f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0437\u0430 \u0441\u0432\u043e\u0439 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0437\u043c)<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041f\u043e\u0447\u0435\u043c\u0443 Qt?<\/h2>\n<p>  <img decoding=\"async\" height=\"300\" src=\"\/\/habrastorage.org\/files\/198\/d2d\/07e\/198d2d07ecd94691a1a656df4a661981.png\"\/><br \/>  \u041a\u0430\u043a \u044d\u0442\u043e \u0432\u0441\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c? \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0445\u043e\u0441\u0442 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c. \u0421\u043a\u0430\u0437\u0430\u043d\u043e \u2014 \u0441\u0434\u0435\u043b\u0430\u043d\u043e. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d Qt, \u0438 \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e. \u042d\u0442\u043e\u0442 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e, \u043d\u043e \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044e\u0449\u0435\u0439 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0432 C++ \u0431\u043e\u043b\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043c\u043d\u043e\u0439 <a href=\"http:\/\/doc.qt.io\/qt-5\/qserialport.html\">QSerialPort<\/a> \u0441\u0442\u0430\u043b \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. <br \/>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u043d\u0435 \u0437\u043d\u0430\u044e \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 IDE, \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0438 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u0434\u043b\u044f \u043c\u0435\u043d\u044f, \u043a\u0430\u043a QtCreator. <br \/>  \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u043a\u043d\u0430, \u0434\u0430 \u0438 \u0441\u0430\u043c Ui \u0432 \u0446\u0435\u043b\u043e\u043c \u0434\u0435\u043b\u0430\u043b\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e .ui \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 WSIWYG \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 Qt \u2014 \u044f \u043e\u043f\u0443\u0449\u0443 \u0432\u0441\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c. \u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u00bb.<\/p>\n<h2>\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c, \u0438\u043b\u0438 \u043a\u0430\u043a \u0440\u0430\u0437\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u044b<\/h2>\n<p>  \u041e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0446\u0435\u043b\u044b\u043c \u0437\u043e\u043e\u043f\u0430\u0440\u043a\u043e\u043c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043b\u0430\u0442 (Melzi, RAMPS 1.4, Teensylu, Gen7 1.5.1 \u0438 \u0442.\u0434.), \u0431\u043b\u0430\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 RepRap \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u043e\u0441\u044c \u0441 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c \u0438 \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434. \u0414\u043b\u044f \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b <a href=\"http:\/\/reprap.org\/wiki\/Gcode\">G-code<\/a>.<\/p>\n<p>  \u0412 \u0441\u0432\u043e\u0435\u0439 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 3D \u043f\u0435\u0447\u0430\u0442\u0438 \u043c\u044b \u0441 \u0442\u043e\u0432\u0430\u0440\u0438\u0449\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 <a href=\"http:\/\/www.repetier.com\">Repetier<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043d\u0430 \u0440\u044f\u0434\u0443 \u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430\u043c\u0438 Marlin \u0438 Teacup \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432.<\/p>\n<h3>\u041f\u0435\u0440\u0432\u043e\u0435 \u0440\u0430\u0437\u043e\u0447\u0430\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b<\/h3>\n<p>  \u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u043e\u0432 RS-232 \u043e\u0431\u0448\u0438\u0440\u043d\u0430 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0440\u0435\u0434\u043a\u043e \u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u043e\u043b\u043d\u0443\u044e. \u041f\u0440\u0438 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u0435\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0442\u0430 \u043f\u043e USB, \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043a \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0438\u043d\u0438\u0438 TX \u0438 RX, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u041b\u0438\u043d\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a DTR (\u0441\u0431\u0440\u043e\u0441 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438), \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u0438 \u044d\u0442\u043e \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u043e. <\/p>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0437\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 RepRap-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 PingPong:  <\/p>\n<ol>\n<li>\u041f\u0440\u0438\u043d\u0442\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439 <b>wait<\/b><\/li>\n<li>\u0425\u043e\u0441\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 G-Code, \u043a\u043e\u043d\u0447\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c \u0441\u0442\u0440\u043e\u043a\u0438<\/li>\n<li>\u041f\u0440\u0438\u043d\u0442\u0435\u0440 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u043f\u0440\u0438\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439 <b>Ok &lt;\u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438&gt;<\/b><\/li>\n<\/ol>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:  <\/p>\n<blockquote><p>wait<br \/>  G1 X10 Y10 Z10<br \/>  ok 0<br \/>  G1 X20 Y5 Z3<br \/>  ok 0<\/p><\/blockquote>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u043b\u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 0 \u043f\u043e\u0441\u043b\u0435 \u00abok\u00bb? \u042d\u0442\u043e \u2014 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u0447\u043a\u0438. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u0438 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u0438<br \/>  \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0430 \u043f\u0440\u0438\u043d\u0442\u0435\u0440:  <\/p>\n<blockquote><p>N1 G1 X10 Y10 Z10 *cs<br \/>  ok 1<br \/>  N2 G1 X20 Y5 Z3 *cs<br \/>  ok 2<\/p><\/blockquote>\n<p>  \u0413\u0434\u0435 cs \u2014 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>  \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0438\u0435 3D \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 G-Code \u0434\u043b\u044f \u043f\u0435\u0447\u0430\u0442\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u043c\u043c \u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442, \u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u044d\u0442\u043e \u043d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0445\u043e\u0441\u0442\u0430. <\/p>\n<p>  \u0423 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430 \u0435\u0441\u0442\u044c \u0431\u0443\u0444\u0444\u0435\u0440, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 16 \u043a\u043e\u043c\u0430\u043d\u0434. <\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430<\/h3>\n<p>  Qt \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u0436\u0438\u0437\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u2014 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0441\u043b\u043e\u0442\u044b.<br \/>  \u0421\u0438\u0433\u043d\u0430\u043b \u2014 \u044d\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \u0434\u043b\u044f C++ \u043f\u043e\u043d\u044f\u0442\u0438\u0435. \u0421\u0438\u0433\u043d\u0430\u043b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u0441\u043b\u043e\u0442\u0443:<\/p>\n<pre><code class=\"cpp\">class Example : public QObject {     Q_OBJECT     public:         Example();      signals:          void exampleSignal(int); }  <\/code><\/pre>\n<p>  \u0421\u0438\u0433\u043d\u0430\u043b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f void, \u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<br \/>  \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e:  <\/p>\n<pre><code class=\"cpp\">emit exampleSignal(100); <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u0441\u0435 \u0441\u043b\u043e\u0442\u044b, \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u043a \u044d\u0442\u043e\u043c\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0443 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0438 \u0438\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 100.<br \/>  \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u043b\u043e\u0442? \u041a\u043e\u0440\u043e\u0442\u043a\u043e \u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u043e\u0442\u043e\u043c  <\/p>\n<pre><code class=\"cpp\">class Example2 : public QObject {     Q_OBJECT     public:         Example();      public slots:          void exampleSlot(int); }  <\/code><\/pre>\n<p>  \u0421\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b \u0441\u043e \u0441\u043b\u043e\u0442\u043e\u043c \u0442\u043e\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e:  <\/p>\n<pre><code class=\"cpp\">Example e1; Example2 e2; connect(&e1, SIGNAL(exampleSignal(int)), &e2, SLOT(exampleSlot(int))); <\/code><\/pre>\n<p>  \u0415\u0441\u0442\u044c \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u2014 \u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u0441\u043b\u043e\u0442\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0442\u0438\u043f. <\/p>\n<p>  \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0438 \u0441\u043b\u043e\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a\\\u043f\u0435\u0440\u0435\u0434\u0430\u0442\u0447\u0438\u043a \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u043f\u043e \u0441\u0435\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u043f\u043e\u0440\u0442\u0443.<br \/>  \u0421\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u2014 \u0447\u0442\u0435\u043d\u0438\u0435.<br \/>  \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0432\u044f\u0437\u0438 \u043f\u043e \u0441\u0435\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u043f\u043e\u0440\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0439 \u0432\u044b\u0448\u0435 QSerialPort (\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0437\u043e\u0432\u0435\u043c \u00abprinter\u00bb), \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u043b readyRead(), \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u043f\u043e\u0440\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f. \u0412\u0441\u0435 \u0447\u0442\u043e \u043e\u0442 \u043d\u0430\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u2014 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u0441\u043b\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430, \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u0445, \u0438 \u0436\u0434\u0430\u0442\u044c. \u0427\u0442\u043e \u0436\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c? \u041a\u0430\u043a \u0443\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u043e\u0442\u0432\u0435\u0442\u044b <b>ok<\/b> \u0438 <b>wait<\/b>. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0430 \u0443 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430 \u0435\u0441\u0442\u044c \u0431\u0443\u0444\u0435\u0440 \u2014 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0433\u0434\u0435-\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043b\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u0447\u0435\u043a <b>\u043e\u043a<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u0440\u0438\u043d\u044f\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u00abreadyRecieve\u00bb<br \/>  \u0421\u043b\u043e\u0442:  <\/p>\n<pre><code class=\"cpp\">void MainWindow::readSerial()  {     if(printer.canReadLine()) \/\/\u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043b\u0438\u043d\u0438\u044f \u0432 \u0431\u0443\u0444\u0444\u0435\u0440\u0435     {         QByteArray data = printer.readLine(); \/\/\u0427\u0438\u0442\u0430\u0435\u043c \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443          if(data.startsWith(&quot;ok&quot;)) readyRecieve++;  \/\/\u041c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443         else if(data.startsWith(&quot;wait&quot;)) readyRecieve = 1; \/\/\u0410 \u0432\u043e\u0442 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 - \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e 1 \u043a\u043e\u043c\u0430\u043d\u0434\u0443          printMsg(QString(data)); \/\/\u041f\u043e\u043a\u0430\u0436\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0442 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430     } } <\/code><\/pre>\n<p>  \u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0441 \u043f\u0440\u0438\u0435\u043c\u043e\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0410 \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439? \u0412\u043e\u0442 \u0442\u0443\u0442 \u0438 \u0432\u0438\u0434\u0438\u043c \u0434\u0435\u0444\u0435\u043a\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a \u043f\u0440\u0438\u0435\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0435\u0442\u0443 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0443 \u043d\u0430\u0448\u0435\u0433\u043e QSerialPort. \u0417\u043d\u0430\u0447\u0438\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443. \u0422\u0430\u0439\u043c\u0435\u0440 \u0432 Qt \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e \u2014 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 QTimer, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b timeout() \u0441 \u043d\u0430\u0448\u0438\u043c \u0441\u043b\u043e\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u0439\u043c\u0435\u0440\u0443, \u0430 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0435\u0433\u043e \u2014 timer.start(ms). \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0431\u044b\u043b\u043e \u0432\u044b\u044f\u0441\u043d\u0435\u043d\u043e, \u0447\u0442\u043e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u041f\u041a \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0442 1 \u0434\u043e 5 \u043c\u0441. \u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440\u0443 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a 0, \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0443 Qt \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0430\u044f \u043c\u0438\u043d\u0443\u0442\u043a\u0430.<br \/>  \u0415\u0449\u0435 \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043c\u044b \u043b\u0438\u0431\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043b\u0438\u0431\u043e \u0444\u0430\u0439\u043b. \u0422\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0437\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0437\u0430\u0443\u0440\u044f\u0434\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043b\u0438\u043d\u0438\u0439 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0438\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 (\u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u0438\u0448\u043d\u0435\u0435 \u043d\u0430 \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u0438 \u043d\u0435 \u0437\u0430\u0445\u043b\u0430\u043c\u043b\u044f\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c), \u044f \u0440\u0435\u0448\u0438\u043b \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c. \u041c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f gcode.<\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438:  <\/p>\n<pre><code class=\"cpp\">void MainWindow::sendNext() {     if(injectingCommand && printer.isWritable() && readyRecieve &gt; 0) \/\/\u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0432\u043a\u043b\u0438\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f     {         sendLine(userCommand); \/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043f\u043e\u0440\u0442 (userCommand \u0438 \u0444\u043b\u0430\u0433 injectingCommand \u0441\u043b\u0443\u0436\u0430\u0442 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f)         readyRecieve--; \/\/\u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u043a\u043e\u043b\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u0447\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0438\u043d\u044f\u0442\u044c         injectingCommand=false; \/\/\u0443\u0436\u0435 \u0432\u043a\u043b\u0438\u043d\u0438\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0442\u0430\u043a \u0447\u0442\u043e \u0444\u043b\u0430\u0433 \u0441\u0442\u043e\u0438\u0442 \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c         return; \/\/\u043e\u0431\u0440\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448 \u043e\u0442\u043f\u0440\u0430\u0432\u0449\u0438\u043a     }     else if(sending && !paused && readyRecieve &gt; 0 && !sdprinting && printer.isWritable()) \/\/\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043b\u0438 \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0444\u0430\u0439\u043b     {         if(currentLine &gt;= gcode.size()) \/\/\u041d\u0435 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u043b\u0438 \u0444\u0430\u0439\u043b         {             sending = false; \/\/\u041d\u0443 \u0440\u0430\u0441 \u0443\u0436 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f - \u0442\u043e \u043c\u044b \u0435\u0433\u043e \u0443\u0436\u0435 \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c             currentLine = 0; \/\/\u041e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b\u0445 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043b\u0438\u043d\u0438\u0439             ui-&gt;sendBtn-&gt;setText(&quot;Send&quot;); \/\/\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441             ui-&gt;pauseBtn-&gt;setDisabled(&quot;true&quot;); \/\/\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441             ui-&gt;filelines-&gt;setText(QString::number(gcode.size()) \/\/\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441                                    + QString(&quot;\/&quot;)                                    + QString::number(currentLine)                                    + QString(&quot; Lines&quot;));             return; \/\/\u043e\u0431\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438         }         sendLine(gcode.at(currentLine)); \/\/\u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0435 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f - \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043b\u0438\u043d\u0438\u044e         currentLine++; \/\/\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b\u0445 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043b\u0438\u043d\u0438\u0439         readyRecieve--; \/\/\u0423\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043a\u043e\u043c\u0430\u043d\u0434          ui-&gt;filelines-&gt;setText(QString::number(gcode.size()) \/\/\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043b\u0438\u043d\u0438\u0439 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435                                + QString(&quot;\/&quot;)                                + QString::number(currentLine)                                + QString(&quot; Lines&quot;));         ui-&gt;progressBar-&gt;setValue(((float)currentLine\/gcode.size()) * 100); \/\/\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u043e\u0441\u043a\u0443      } } <\/code><\/pre>\n<p>  \u041d\u0443 \u0432\u043e\u0442, \u0441 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u043c \u043f\u043e\u0440\u0442\u043e\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c? \u0415\u0449\u0435 \u043d\u0435\u0442. \u0415\u0449\u0435 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u043e\u0442\u043b\u043e\u0432\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043d\u043e\u0432\u044c \u043f\u0440\u0438\u0431\u0435\u0433\u043d\u0435\u043c \u043a \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c \u0438 \u0441\u043b\u043e\u0442\u0430\u043c, \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u043c \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b error(SerialPort::SerialPortError error) \u043e\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 QSerialPort:<\/p>\n<pre><code class=\"cpp\">void MainWindow::serialError(QSerialPort::SerialPortError error) {     if(error == QSerialPort::NoError) return; \/\/\u041d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 - \u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c      if(printer.isOpen()) printer.close(); \/\/\u041d\u0443 \u0430 \u0435\u0441\u043b\u0438 \u0441\u044e\u0434\u0430 \u0434\u0435\u043b\u043e \u0434\u043e\u0448\u043b\u043e - \u043d\u0435 \u043f\u043b\u043e\u0445\u043e \u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0440\u0442, \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0449\u0435 \u043e\u0442\u043a\u0440\u044b\u0442      if(sending) paused = true; \/\/\u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430 \u043f\u0440\u0438\u043d\u0442\u0435\u0440 - \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443      ui-&gt;connectBtn-&gt;setText(&quot;Connect&quot;); \/\/\u041e\u0431\u043d\u043e\u0432\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441     ui-&gt;sendBtn-&gt;setDisabled(true); \/\/\u041e\u0431\u043d\u043e\u0432\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441     ui-&gt;pauseBtn-&gt;setDisabled(true); \/\/\u041e\u0431\u043d\u043e\u0432\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441     ui-&gt;controlBox-&gt;setDisabled(true); \/\/\u041e\u0431\u043d\u043e\u0432\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441     ui-&gt;consoleGroup-&gt;setDisabled(true); \/\/\u041e\u0431\u043d\u043e\u0432\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441      qDebug() &lt;&lt; error; \/\/\u041d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c      QString errorMsg; \/\/\u041f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043c \u043d\u0430\u0448\u0443 \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u044f\u0437\u044b\u043a     switch(error)     {     case QSerialPort::DeviceNotFoundError:         errorMsg = &quot;Device not found&quot;;         break;      case QSerialPort::PermissionError:         errorMsg = &quot;Insufficient permissions\\nAlready opened?&quot;;         break;      case QSerialPort::OpenError:         errorMsg = &quot;Cant open port\\nAlready opened?&quot;;         break;      case QSerialPort::TimeoutError:         errorMsg = &quot;Serial connection timed out&quot;;         break;      case QSerialPort::WriteError:     case QSerialPort::ReadError:         errorMsg = &quot;I\/O Error&quot;;         break;      case QSerialPort::ResourceError:         errorMsg = &quot;Disconnected&quot;;         break;      default:         errorMsg = &quot;Unknown error\\nSomething went wrong&quot;;         break;     }      ErrorWindow errorwindow(this, errorMsg); \/\/\u0418 \u043f\u043e\u043a\u0430\u0436\u0435\u043c \u043e\u043a\u043e\u0448\u043a\u043e \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439     errorwindow.exec(); } <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/32d\/99d\/080\/32d99d080c0a4975bc75f911a15a733b.png\"\/><br \/>  \u041d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0441 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u043e\u043c \u0440\u0430\u0441\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0434\u0438\u043d\u043e\u0437\u0430\u0432\u0440\u0438\u043a\u0430, %username%.<\/p>\n<h2>\u0414\u0435\u043b\u0430\u0435\u043c \u043d\u0430\u0448 \u0445\u043e\u0441\u0442 \u0443\u043c\u043d\u0435\u0435<\/h2>\n<h3>\u0412\u044b\u043d\u043e\u0441\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434<\/h3>\n<p>  \u041c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0430\u0439\u043b \u0432 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b, \u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043b\u043e. \u041f\u043e\u043c\u0438\u043c\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0444\u0430\u0439\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u0449\u0435 \u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u0430\u043c\u043e\u043c\u0443. \u041a\u0430\u043a \u0432\u0431\u0438\u0442\u044b\u0435 \u0440\u0443\u043a\u0430\u043c\u0438, \u0442\u0430\u043a \u0438 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435.<br \/>  \u041a\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u0432\u0435\u0441\u0442\u0438? \u041c\u043d\u0435\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445, \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f, \u043d\u043e \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/219\/a38\/be4\/219a38be46f04c3491625a439be72412.png\"\/><\/p>\n<p>  \u0418\u043a\u043e\u043d\u043e\u043a \u043f\u043e\u043a\u0430 \u043d\u0435\u0442, \u043d\u043e \u043e\u043d\u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u043b\u0438\u0437\u0430\u0445. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u044d\u0442\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u043a \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f:  <\/p>\n<pre><code class=\"cpp\">void MainWindow::homeall() {     injectCommand(&quot;G28&quot;); } <\/code><\/pre>\n<p>  \u041c\u0435\u0442\u043e\u0434 injectCommand, \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0443\u0436\u0435 \u0443\u0437\u043d\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435, \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0449\u0438\u043a\u0430 \u043a\u043e\u0434\u0430 \u0442\u043e\u0436\u0435 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442:  <\/p>\n<pre><code class=\"cpp\">void MainWindow::injectCommand(QString command) {     injectingCommand = true; \/\/\u041f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0444\u043b\u0430\u0433 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b      userCommand = command; \/\/\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 } <\/code><\/pre>\n<h3>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/h3>\n<p>  RepRap \u2014 \u044d\u0442\u043e \u0441\u0443\u0440\u043e\u0432\u044b\u0439 DIY. \u041d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u0440\u043e\u0432\u044b\u0439, \u0447\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u044f\u043a\u043e\u0435<br \/>  <img decoding=\"async\" height=\"600\" src=\"\/\/habrastorage.org\/files\/c01\/86f\/b41\/c0186fb416824a0ebbecddcb6a5dad6f.jpg\"\/><\/p>\n<p>  \u0414\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u043f\u043e\u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0442\u0430\u043a, \u043a\u0430\u043a \u043d\u0430\u0434\u043e. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u0438 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043d\u0435\u0439 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. \u0423 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u044e\u0434\u0435\u0439 \u043d\u0430 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0435 \u0435\u0441\u0442\u044c \u0434\u0438\u0441\u043f\u043b\u0435\u0438, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043d\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0443 \u0432\u0441\u0435\u0445. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u043c\u043e\u0436\u043d\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430 \u0434\u0430\u043b\u0435\u043a\u043e, \u0438\u043b\u0438 \u043f\u043e\u0434 \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u043c \u0443\u0433\u043b\u043e\u043c, \u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0443\u0436\u0435 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443, \u0438 \u0447\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0435\u0435 \u2014 \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435. <br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/d31\/36e\/fd8\/d3136efd80d44d06925cc312f3705fb7.png\"\/><br \/>  \u041f\u043e\u0434 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  \u041a\u0430\u043a \u0436\u0435 \u0435\u0435 \u0443\u0437\u043d\u0430\u0442\u044c? \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0433\u0440\u0435\u0432\u0430, \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0438 \u0432\u043c\u0435\u0441\u0442\u043e <b>ok<\/b> \u0438\u043b\u0438 <b>wait<\/b> \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443. \u0421\u0442\u0440\u043e\u043a\u0430 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:  <\/p>\n<blockquote><p>T:196.94 \/210 B:23.19 \/0 B@:0 @:4<\/p><\/blockquote>\n<p>  \u0427\u0438\u0442\u0430\u0435\u043c\u043e \u0434\u043b\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043d\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430. \u0412 \u043f\u0435\u0440\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u043b\u043e\u0442\u0435, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0435\u043c \u0437\u0430 \u043f\u0440\u0438\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043d\u043e \u0442\u0435\u0441\u0442\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u0440\u0430\u0437\u0431\u043e\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u043e\u0442\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u044f \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0434\u043d\u0430 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 RepRaptor \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u2014 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043e\u0444\u0442\u0430 \u043d\u0430 \u043c\u043d\u043e\u0433\u043e\u044f\u0434\u0435\u0440\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u043d\u043e \u0443 \u043d\u0430\u0441 \u0441 \u0436\u0435\u043b\u0435\u0437\u043e\u043c \u0431\u044b\u043b\u043e \u0432\u0441\u0435 \u043d\u0435 \u0442\u0430\u043a \u0440\u0430\u0434\u0443\u0436\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u2014 \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043b\u0438\u0431\u043e \u0440\u0430\u0437\u0431\u043e\u0440, \u043b\u0438\u0431\u043e \u0441\u0430\u043c\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u0411\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u043e\u0439\u0442\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u2014 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0440\u0430\u0437\u0431\u043e\u0440 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a, \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b. <\/p>\n<p>  \u041a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0432 Qt? \u041e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e. \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a. \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/qt-project.org\/doc\/qt-4.8\/qthread.html\">QThread<\/a>, \u043d\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0443 QFuture, \u0438 \u0431\u0443\u0434\u0435\u043c \u0437\u0430 \u043d\u0438\u043c \u0441\u043b\u0435\u0434\u0438\u0442\u044c. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0442\u0430\u043a \u2014 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 QFutureWatcher, \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 QFuture, \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043d\u0430\u043c \u043e \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u0434\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0430\u0437\u0431\u043e\u0440\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b:  <\/p>\n<pre><code class=\"cpp\">typedef struct {     double e, b; } TemperatureReadings; <\/code><\/pre>\n<p>  \u0418 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430:  <\/p>\n<pre><code class=\"cpp\">TemperatureReadings MainWindow::parseStatus(QByteArray data) {     QString extmp = &quot;&quot;; \/\/ \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u044d\u043a\u0441\u0442\u0440\u0443\u0434\u0435\u0440\u0430     QString btmp = &quot;&quot;; \/\/ \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u043a\u0440\u043e\u0432\u0430\u0442\u0438      for(int i = 2; data.at(i) != '\/'; i++) \/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u044d\u043a\u0441\u0442\u0440\u0443\u0434\u0435\u0440\u0430     {         extmp+=data.at(i);     }     for(int i = data.indexOf(&quot;B:&quot;)+2; data.at(i) != '\/'; i++) \/\/\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u043a\u0440\u043e\u0432\u0430\u0442\u0438     {         btmp+=data.at(i);     }      TemperatureReadings t;     t.e = extmp.toDouble(); \/\/\u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0447\u0438\u0441\u043b\u0430     t.b = btmp.toDouble();       return t; \/\/\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0434\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0442\u043e\u043a\u0443 \u043f\u0440\u0438 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u0435\u043c\u0430):  <\/p>\n<pre><code class=\"cpp\">\/\/.... else if(checkingTemperature && data.startsWith(&quot;T:&quot;)) \/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043b\u0438 \u044d\u0442\u043e         {             QFuture&lt;TemperatureReadings&gt; parseThread = QtConcurrent::run(this, &MainWindow::parseStatus, data); \/\/\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 QFuture (QtConcurrent::run \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 QFuture \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 parseStatus)             statusWatcher.setFuture(parseThread); \/\/\u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043d\u0430\u0448 \u043e\u0431\u044a\u0435\u043a\u0442 QFuture \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044e             ui-&gt;tempLine-&gt;setText(data); \/\/\u041f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435         } \/\/... <\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043b\u043e\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0441\u0438\u0433\u043d\u0430\u043b, \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0438\u0439 \u0438\u0437 QFutureWatcher \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438:  <\/p>\n<pre><code class=\"cpp\">void MainWindow::updateStatus() {     TemperatureReadings r = statusWatcher.future().result(); \/\/\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430     ui-&gt;extruderlcd-&gt;display(r.e); \/\/\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441     ui-&gt;bedlcd-&gt;display(r.b);       sinceLastTemp.restart(); \/\/\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u043d\u044f\u0442\u0438\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b } <\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0438 \u0432\u0441\u0435, \u0442\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043d\u0430\u043c \u043e \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0435 \u2014 \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u0435\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435. <\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0430\u043c \u043f\u0440\u0438\u043d\u0442\u0435\u0440 \u0435\u0435 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0433\u0440\u0435\u0432\u0430, \u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043f\u0440\u0438\u0441\u043b\u0430\u0442\u044c \u043d\u0430\u043c \u0435\u0435 \u0432 \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b M105. \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443, \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u0422\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u0435\u0435 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440, \u0438 \u043d\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0442 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0443. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0442\u0430\u0439\u043c\u0435\u0440\u0443 \u0441\u0442\u0430\u0432\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 1500\u043c\u0441:  <\/p>\n<pre><code class=\"cpp\">void MainWindow::checkStatus() {     if(checkingTemperature && \/\/\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443....             (sinceLastTemp.elapsed() &gt; statusTimer.interval()) \/\/\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437 \u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0435 \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u0430\u0434\u0430\u043d\u043e             && statusWatcher.isFinished()) injectCommand(&quot;M105&quot;); \/\/\u0418 \u0435\u0441\u043b\u0438 \u043d\u0430\u0448 \u043f\u043e\u0442\u043e\u043a \u0443\u0436\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b, \u0442\u043e\u0433\u0434\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 M105 } <\/code><\/pre>\n<p>  \u041a\u0442\u043e-\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0437\u043b\u0438\u0448\u043d\u0438\u0435, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0448\u044c \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u043e\u043c \u0441 Asus EEEPC 900AX, \u0438 \u0445\u043e\u0447\u0435\u0448\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0445\u0430\u0431\u0440 \u2014 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c. <\/p>\n<h3>\u041f\u0435\u0447\u0430\u0442\u044c \u0441 SD \u043a\u0430\u0440\u0442\u044b<\/h3>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/597\/afe\/cb7\/597afecb7ba44e24bb363c2afe2176e2.png\"\/><\/p>\n<p>  \u041e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u0442\u0438\u043f\u043e\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u044b \u0434\u043b\u044f 3D \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u043e\u0432 \u0438\u043c\u0435\u044e\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0441\u043b\u043e\u0442 \u0434\u043b\u044f SD \u043a\u0430\u0440\u0442\u044b, \u0438\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0442\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c. \u0422\u0430\u043a\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0447\u0430\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430 \u0438 \u0443\u0439\u0442\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c SD \u043a\u0430\u0440\u0442\u0443 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043b\u0435\u043d\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0448\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043b\u043a\u0438\u0445 \u0434\u0435\u0442\u0430\u043b\u0435\u0439. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0444\u0430\u0439\u043b\u0430 \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0435\u0434\u0432\u0430 \u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u0441\u0430\u043c\u0430 \u043f\u0435\u0447\u0430\u0442\u044c. <br \/>  \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0445\u043e\u0441\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 SD \u043a\u0430\u0440\u0442\u043e\u0439, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442:  <\/p>\n<ul>\n<li>\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432<\/li>\n<li>\u0412\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0444\u0430\u0439\u043b<\/li>\n<li>\u041f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u043d\u0430 \u043f\u0435\u0447\u0430\u0442\u044c<\/li>\n<li>\u041f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u043f\u0430\u0443\u0437\u0443<\/li>\n<li>\u0421\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043e \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0435<\/li>\n<\/ul>\n<p>  \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u2014 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430! \u041d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437, \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0435 \u0432\u043e\u043b\u043d\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2014 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u043d\u0430 \u043d\u0435 \u0432\u0430\u0436\u043d\u0430. \u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u0438\u0430\u043b\u043e\u0433. \u0412 \u0434\u0438\u0430\u043b\u043e\u0433 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0430 \u043e\u043d \u043d\u0430\u043c \u0432\u0435\u0440\u043d\u0435\u0442 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0441\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u0447\u0442\u043e \u043e\u043d\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0435\u0447\u0430\u0442\u0438 \u0441 SD.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u0445\u043e\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430 SD \u2014 \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0444\u0430\u0439\u043b\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0449\u0435 \u0440\u0430\u0437 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043d\u0430\u0448 \u043f\u0440\u0438\u0435\u043c\u043d\u0438\u043a:  <\/p>\n<pre><code class=\"cpp\">\/\/...\t \tif(readingFiles) \/\/\u0415\u0441\u043b\u0438 \u0447\u0438\u0442\u0430\u0435\u043c \u0444\u0430\u0439\u043b\u044b         {             if(!data.contains(&quot;End file list&quot;)) sdFiles.append(data); \/\/\u0415\u0441\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0435 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f - \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432             else             {                 readingFiles = false; \/\/\u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a                  emit sdReady(); \/\/\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u043c \u0441\u0438\u0433\u043d\u0430\u043b \u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432             }         } \/\/... \telse if(data.startsWith(&quot;Done&quot;)) sdprinting = false; \/\/\u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 Done - \u043f\u0435\u0447\u0430\u0442\u044c \u0441 SD \u043e\u043a\u043e\u043d\u0447\u0435\u043d\u0430 \telse if(data.startsWith(&quot;SD printing byte&quot;) && sdWatcher.isFinished()) \/\/\u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 SD \u043f\u0435\u0447\u0430\u0442\u0438 \t{     \tQFuture&lt;double&gt; parseSDThread = QtConcurrent::run(this, &MainWindow::parseSDStatus, data); \/\/\u0421\u043a\u043e\u0440\u043c\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0442\u043e\u043a\u0443 \u0441 \u043f\u0430\u0440\u0441\u0435\u0440\u043e\u043c         sdWatcher.setFuture(parseSDThread); \/\/\u0421\u043b\u0435\u0434\u0438\u043c \u0437\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u043c     }     else if(data.contains(&quot;Begin file list&quot;)) \/\/\u0421\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 SD \u043a\u0430\u0440\u0442\u044b     {          sdFiles.clear(); \u041e\u0447\u0438\u0441\u0442\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0444\u0430\u0439\u043b\u043e\u0432          readingFiles = true; \/\/\u041f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0444\u043b\u0430\u0433, \u0438\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432     } \/\/... <\/code><\/pre>\n<p>  \u0424\u043b\u0430\u0433 \u043d\u0443\u0436\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448 \u043c\u0435\u0442\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f <b>\u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/b>.<br \/>  \u0417\u0430 \u043e\u0434\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b. \u0421\u0430\u043c\u043e\u043c\u0443 \u0436\u0435 \u0441\u0435\u0431\u0435. \u0414\u0430, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0441\u043e \u0441\u043b\u043e\u0442\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>  \u0421\u043b\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a \u044d\u0442\u043e\u043c\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0443:  <\/p>\n<pre><code class=\"cpp\">void MainWindow::initSDprinting() {     SDWindow sdwindow(sdFiles, this);       connect(&sdwindow, SIGNAL(fileSelected(QString)), this, SLOT(selectSDfile(QString)));      sdwindow.exec(); } <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 \u0440\u0435\u0436\u0438\u043c \u043f\u0435\u0447\u0430\u0442\u0438. \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u043f\u0443\u0442\u0435\u043c \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u043b\u0430\u0433\u0430 sdprinting. \u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0435\u0447\u0430\u0442\u0438 \u0441 SD \u043a\u0430\u0440\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0445\u043e\u0436\u0435\u0439 \u043c\u0430\u043d\u0435\u0440\u0435 \u0441 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0439.<\/p>\n<h2>\u0421\u043e\u0444\u0442 \u2014 \u0432 \u043c\u0430\u0441\u0441\u044b<\/h2>\n<p>  \u041a\u0430\u043a \u0431\u044b \u0441\u0438\u043b\u044c\u043d\u043e \u044f \u043d\u0435 \u043b\u044e\u0431\u0438\u043b GitHub \u2014 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u043b\u044e\u0431\u044f\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u043e\u0444\u0442 \u0441\u0430\u043c\u0438. \u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c Qt \u2014 \u044d\u0442\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u0430 \u043d\u0435 \u0441\u0440\u0435\u0434\u0430 \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u043f\u043e\u043c\u0438\u043c\u043e \u0431\u0438\u043d\u0430\u0440\u0438\u043a\u043e\u0432 \u043f\u043e\u0434 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 Linux-amd64 \u043d\u0443\u0436\u043d\u044b \u0435\u0449\u0435 \u0431\u0438\u043d\u0430\u0440\u0438\u043a\u0438 \u043f\u043e\u0434 Linux-i386, Windows 32 \u0438 OSX 64. \u0427\u0442\u043e \u0436, \u0441 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u0431\u043e\u0440\u044b \u0432 QtCreator. \u0410 \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441 Windows 32 \u0438 OSX 64? \u0421 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u2014 \u043d\u0438\u043a\u0430\u043a. \u042f \u043f\u044b\u0442\u0430\u043b\u0441\u044f, \u043d\u043e \u044f \u0443\u043c\u044b\u0432\u0430\u044e \u0440\u0443\u043a\u0438. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434 OSX \u2014 \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 OSX. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043b\u0435\u0433\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<h3>Debian \u0438 \u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u044b<\/h3>\n<p>  \u041e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u043f\u043e\u0434 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 Linux Mint, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430. \u041f\u043e \u043d\u0430\u0447\u0430\u043b\u0443 \u044f \u0445\u043e\u0442\u0435\u043b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u0434\u043b\u044f PPA, \u043d\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u0448\u0435\u043b \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438 Qt, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u043f\u0430\u043a\u0435\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0443\u043a\u0430\u043c\u0438. \u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0430? \u0412\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0434\u0430\u0436\u0435 \u0432 Ubuntu 14.04, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0430\u043d Mint \u0432 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u0445 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e Qt 5.2.1. \u0412 \u0445\u043e\u0434\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0432\u044b\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0431\u0430\u0433\u0438 QSerialPort, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0432\u0438\u043a\u0438 Qt \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.<\/p>\n<p>  \u0420\u0443\u043a\u0430\u043c\u0438 \u043f\u0430\u043a\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Debian, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c. \u041d\u0430\u043f\u0438\u0441\u0430\u0432 .desktop \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0443\u043d\u043a\u0442 \u0432 \u043c\u0435\u043d\u044e \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 bash \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0443\u0436\u043d\u043e\u0439 \u043c\u043d\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432:<\/p>\n<pre><code class=\"bash\">#!\/bin\/bashcd   # $1 - \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430  mkdir repraptor-$1-1-i386  mkdir repraptor-$1-1-amd64  mkdir repraptor-$1-1-i386\/DEBIAN\/ mkdir repraptor-$1-1-i386\/usr\/ mkdir repraptor-$1-1-i386\/usr\/local\/ mkdir repraptor-$1-1-i386\/usr\/local\/bin mkdir repraptor-$1-1-i386\/usr\/local\/share  mkdir repraptor-$1-1-amd64\/DEBIAN\/ mkdir repraptor-$1-1-amd64\/usr\/ mkdir repraptor-$1-1-amd64\/usr\/local\/ mkdir repraptor-$1-1-amd64\/usr\/local\/bin  cp ..\/RepRaptor-linux32\/RepRaptor repraptor-$1-1-i386\/usr\/local\/bin\/repraptor cp ..\/RepRaptor-linux64\/RepRaptor repraptor-$1-1-amd64\/usr\/local\/bin\/repraptor  cp share repraptor-$1-1-i386\/usr\/local\/ -r cp share repraptor-$1-1-amd64\/usr\/local\/ -r  echo &quot;Package: repraptor Version: $1-1 Section: base Priority: optional Architecture: i386 Maintainer: [Hello Habr!] Description: RepRaptor  A Qt RepRap gcode sender\/host controller&quot; &gt; repraptor-$1-1-i386\/DEBIAN\/control echo &quot;Package: repraptor Version: $1-1 Section: base Priority: optional Architecture: amd64 Maintainer: [Hello Habr!] Description: RepRaptor  A Qt RepRap gcode sender\/host controller&quot; &gt; repraptor-$1-1-amd64\/DEBIAN\/control  dpkg-deb --build repraptor-$1-1-i386 dpkg-deb --build repraptor-$1-1-amd64 <\/code><\/pre>\n<p>  \u0412\u0441\u0435, \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u2014 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0434\u0435\u0440\u0435\u0432\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432, \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0438\u043a\u043e\u043d\u043a\u0438 \u0438 .desktop \u0444\u0430\u0439\u043b, \u0430 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043b\u044f \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430, \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.<\/p>\n<h3>Windows \u0438 MXE<\/h3>\n<p>  \u041e\u0434\u043d\u043e \u0434\u0435\u043b\u043e \u2014 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u043e\u0434 \u0441\u0432\u043e\u044e \u041e\u0421, \u0434\u0440\u0443\u0433\u043e\u0435 \u0434\u0435\u043b\u043e \u2014 \u043f\u043e\u0434 \u0447\u0443\u0436\u0443\u044e. \u0422\u0443\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0442\u0443\u043b\u0447\u0435\u0438\u043d \u2014 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438. \u0411\u043b\u0430\u0433\u043e \u043f\u043e\u0434 Windows \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 MinGW, \u0430 \u0434\u043b\u044f Linux \u0435\u0441\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 MXE \u2014 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. <br \/>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0434\u043e \u0441\u043c\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u2014 \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c MXE \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0435\u043c\u0443, \u043a\u0430\u043a\u0438\u0435 \u043d\u0430\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0443\u0436\u043d\u044b:  <\/p>\n<pre><code class=\"bash\">git clone https:\/\/github.com\/mxe\/mxe.git  cd mxe  make qtbase qtserialport <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0434\u0442\u0438 \u043f\u0438\u0442\u044c \u043a\u043e\u0444\u0435 \u2014 \u0441\u0431\u043e\u0440\u043a\u0430 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0440\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. <\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0441\u0431\u043e\u0440\u043a\u0430 \u043e\u043a\u043e\u043d\u0447\u0435\u043d\u0430 \u2014 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u0434 Windows \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438:  <\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  #\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b MXE \u0432 PATH export PATH=\/home\/neothefox\/src\/mxe\/usr\/bin:$PATH   #\u0423\u0434\u0430\u043b\u044f\u0435\u043c \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 rm -rf RepRaptor-win32  #\u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u0441\u0432\u0435\u0436\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u0435\u0435 \u043f\u0430\u043f\u043a\u0443 git clone https:\/\/github.com\/NeoTheFox\/RepRaptor RepRaptor-win32 cd RepRaptor-win32  #\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c Makefile \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 QtCreator \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \/home\/neothefox\/src\/mxe\/usr\/bin\/i686-w64-mingw32.static-qmake-qt5 RepRaptor.pro make  #\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c ZIP \u0430\u0440\u0445\u0438\u0432 \u0441 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c cp LICENCE release\/ cd release zip RepRaptor-$1-win32.zip RepRaptor.exe LICENCE  #\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u0435\u0433\u043e \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0431\u043e\u0440\u043a\u0430\u043c\u0438 mv RepRaptor-$1-win32.zip ..\/..\/RepRaptor-$1-win32.zip <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e \u0438 \u0441\u0435\u0440\u0434\u0438\u0442\u043e. \u0420\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 Wine:<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/e98\/53e\/538\/e9853e53824f4819b2c2b4d2ddf5a5e2.png\"\/><\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u044f \u044d\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u2014 \u044f \u043d\u0430\u0434\u0435\u044f\u043b\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u043a\u0443 G-code \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u043b\u0430, \u0430 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0437\u0430 \u0432\u0435\u0447\u0435\u0440. \u041d\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u2014 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u044b\u0448\u0435\u043b \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043d\u0435\u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0435. \u0412\u043f\u0435\u0440\u0435\u0434\u0438 \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2014 \u0445\u043e\u0442\u044f \u0431\u044b \u0442\u043e\u0442 \u0436\u0435 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 EEPROM, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0430\u043a \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u043c\u043c. <\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0443\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 RepRaptor \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u043d\u0435 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 ASUS EEEPC \u043a\u0430\u043a \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0445\u043e\u0441\u0442 \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430, \u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433 \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043d\u0438 \u043e\u0434\u0438\u043d \u0434\u0440\u0443\u0433\u043e\u0439 \u0445\u043e\u0441\u0442 \u0438\u0437 \u0442\u0435\u0445, \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b. \u041d\u0443 \u0438 \u0437\u043d\u0430\u043d\u0438\u044f Qt \u0443 \u043c\u0435\u043d\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u043b\u0438\u0441\u044c, \u0438 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439.<\/p>\n<p>  \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0438\u0443\u0440\u043e\u0447\u0435\u043d\u0430 \u043a \u0432\u044b\u0445\u043e\u0434\u0443 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0441\u0430\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u2014 0.2.<\/p>\n<p>  \u0412\u0441\u0435\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435! \u041d\u0430\u0434\u0435\u044e\u0441\u044c \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u0431\u044b\u043b \u0432\u0430\u043c \u043f\u043e\u043b\u0435\u0437\u0435\u043d.<\/p>\n<p>  \u041d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u2014 \u0432\u043e\u0442 \u0430\u0440\u043c\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043d\u0430 \u043f\u0435\u0447\u0430\u0442\u0430\u043d\u044b\u0445 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u043e\u0432. <br \/>  <img decoding=\"async\" height=\"600\" src=\"\/\/habrastorage.org\/files\/afe\/e26\/cd0\/afee26cd0f204e7aa8d89846ba85ca8b.jpg\"\/><\/p>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>  <a href=\"https:\/\/github.com\/NeoTheFox\/RepRaptor\/releases\/tag\/v0.2\">\u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f<\/a><br \/>  <a href=\"http:\/\/reprap.org\/wiki\/RepRaptor\">RepRap wiki<\/a><br \/>  <a href=\"https:\/\/github.com\/NeoTheFox\/RepRaptor\">GitHub<\/a>      \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/252189\/\"> http:\/\/habrahabr.ru\/post\/252189\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t<img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/d90\/e4d\/ee5\/d90e4dee5a374495ab802dbeab99ac67.png\"\/><\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0441\u0432\u043e\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u041f\u041e \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f 3D \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u0430\u043c\u0438 \u043d\u0430 Qt5, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 RepRap&#8217;\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u043c \u0440\u0430\u0434\u043e\u0441\u0442\u044f\u043c.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u0441\u0442\u0430\u043b RepRaptor \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 host-controller \u0434\u043b\u044f 3D \u043f\u0440\u0438\u043d\u0442\u0435\u0440\u043e\u0432.<br \/>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/afc\/ac0\/582\/afcac058283a4e0ab5ed108fe2095580.png\"\/><\/p>\n<p>  \u0412\u0441\u0435\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u043f\u043e\u0434 \u043a\u0430\u0442.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-252458","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/252458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=252458"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/252458\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=252458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=252458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=252458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}