{"id":300191,"date":"2020-03-16T09:00:36","date_gmt":"2020-03-16T09:00:36","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=300191"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=300191","title":{"rendered":"\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f M5Stack (Arduino)"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/492458\/\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0442\u0430\u043a\u043e\u0439 \u0448\u0442\u0443\u043a\u043e\u0439 \u043a\u0430\u043a M5 UI. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f M5 UI \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0440\u044b \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u043a\u043d\u043e\u043f\u043a\u0438, \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u0441\u043b\u043e\u044f. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 UI \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442, \u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c M5 UI Designer for Arduino IDE.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hq\/j9\/ei\/hqj9eitptjonwol-qxdax_ew9b4.jpeg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u043a\u0435\u043a\u0438 M5 UI \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u0442\u0430\u043a \u0436\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 M5 UI Designer.<\/p>\n<p>  <\/p>\n<h2 id=\"kratkaya-spravka\">\u041a\u0440\u0430\u0442\u043a\u0430\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0430<\/h2>\n<p>  <\/p>\n<p>\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0430\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u0430, \u043a\u043d\u043e\u043f\u043a\u0438, \u0447\u0435\u043a\u0431\u043e\u043a\u0441\u044b, \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0438, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043e\u043a 2.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/496\/9c5\/e78\/4969c5e78f6672949f7ca71a291a4d8c.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/p>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u043e\u043a\u0443\u0441 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u0432\u044b\u0431\u0440\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u043e\u043e\u0447\u0435\u0440\u0451\u0434\u043d\u043e\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448 Fn \u0438 TAB<\/p><\/blockquote>\n<p><strong>Inputbox<\/strong> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0432\u043e\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 50 px. \u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 32 px. \u0412 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: Enter user name), \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b &#8216;<strong>:<\/strong>&#8216;. \u0412 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b. \u041f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0444\u043e\u043a\u0443\u0441\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0441 \u0431\u0443\u043a\u0432\u0430\u043c\u0438 \u0438 \u0446\u0438\u0444\u0440\u0430\u043c\u0438 \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0435.<\/p>\n<p>  <\/p>\n<p><strong>Textbox<\/strong> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435. \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u043e \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u0421\u043e\u0441\u0442\u043e\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0422\u0435\u043a\u0441\u0442 \u0443\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u0438 \u0438 \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b. \u041d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0444\u043e\u043a\u0443\u0441\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e.<\/p>\n<p>  <\/p>\n<p><strong>Waitingbar<\/strong> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 50 px. \u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 12 px. \u0412 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: Connection to Wi-Fi), \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b &#8216;<strong>:<\/strong>&#8216;. \u0412 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u043c\u0438 \u0438 \u0447\u0435\u0440\u043d\u044b\u043c\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430\u043c\u0438. \u041d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0444\u043e\u043a\u0443\u0441\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e.<\/p>\n<p>  <\/p>\n<p><strong>Progressbar<\/strong> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 50 px. \u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 12 px. \u0412 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: Times of the check), \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b &#8216;<strong>:<\/strong>&#8216;. \u0412 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u0434\u043e 10% \u2014 \u043a\u0440\u0430\u0441\u043d\u044b\u043c, \u0434\u043e 30% \u2014 \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u043c, \u0434\u043e 80% \u2014 \u0437\u0435\u043b\u0451\u043d\u044b\u043c, \u0434\u043e 100% \u2014 \u0441\u0438\u043d\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c). \u041d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0444\u043e\u043a\u0443\u0441\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e.<\/p>\n<p>  <\/p>\n<p><strong>Selectbox<\/strong> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 50 px. \u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 44 px. \u0412 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: Mode), \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b &#8216;<strong>:<\/strong>&#8216;. \u0412 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u044b\u0431\u043e\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 <strong>Fn<\/strong>, \u0437\u0430\u0442\u0435\u043c <strong>K \/ M<\/strong> \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0438 <strong>\u0432\u0432\u0435\u0440\u0445 \/ \u0432\u043d\u0438\u0437<\/strong>.<\/p>\n<p>  <\/p>\n<p><strong>Checkbox<\/strong> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0432\u043e\u0434\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (true\/false) \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 32 px. \u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 44 px. \u0412 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0444\u043b\u0430\u0433 (\u0435\u0441\u043b\u0438 \u0437\u0430\u043a\u0440\u0430\u0448\u0435\u043d, \u0442\u043e true, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 false). \u0412 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: Remember password). \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u044f\u0442\u044c \u0438\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0444\u043b\u0430\u0433 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 <strong>SPACE<\/strong>.<\/p>\n<p>  <\/p>\n<p><strong>Button<\/strong> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0441 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043e\u0439 void (String*)) \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 32 px. \u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 22 px. \u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: Launch). \u041e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u043a\u043e\u043d\u043e\u043a \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 (\u0440\u0438\u0441. 3). \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0436\u0430\u0442\u044c \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 <strong>SPACE<\/strong>.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d2b\/638\/d16\/d2b638d1695c51931b92f96e5fa362e0.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u041a\u043e\u0434\u044b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0438\u043a\u043e\u043d\u043e\u043a 24 x 24 px<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0430, \u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0448\u0438\u0440\u0438\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 51 px.<\/p>\n<p>  <\/p>\n<p><strong>Rangebox<\/strong> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u0430 \u0446\u0435\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 50 px. \u0428\u0438\u0440\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c, \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 32 px. \u0412 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: Speed), \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0441\u0438\u043c\u0432\u043e\u043b &#8216;<strong>:<\/strong>&#8216;. \u0412 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043f\u043e\u043b\u043e\u0441\u0443 \u0438 \u043f\u0440\u0438\u043b\u0435\u0433\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u0437\u0443\u043d\u043e\u043a. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 <strong>Fn<\/strong>, \u0437\u0430\u0442\u0435\u043c <strong>N \/ $<\/strong> \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0438 <strong>\u0432\u043b\u0435\u0432\u043e \/ \u0432\u043f\u0440\u0430\u0432\u043e<\/strong>.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0443\u0440\u043e\u043a\u0430<\/strong><\/p>\n<p>  <\/p>\n<ul>\n<li>PC\/MAC;<\/li>\n<li>M5STACK;<\/li>\n<li>FACES;<\/li>\n<li>FACES Keyboard;<\/li>\n<li>\u043a\u0430\u0431\u0435\u043b\u044c USB-C \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430;<\/li>\n<li>\u0446\u0432\u0435\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0430 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 (\u0442\u0438\u043f \u0440\u043e\u0437\u0435\u0442\u043a\u0430-\u0432\u0438\u043b\u043a\u0430);<\/li>\n<li>\u043c\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f \u043f\u0430\u0439\u043a\u0438 5 \u0445 7 \u0441\u043c;<\/li>\n<li>\u043f\u0430\u044f\u043b\u044c\u043d\u0438\u043a 40 \u0438\u043b\u0438 60 \u0412\u0442;<\/li>\n<li>\u043a\u0430\u043d\u0438\u0444\u043e\u043b\u044c \u043f\u0430\u044f\u043b\u044c\u043d\u0430\u044f;<\/li>\n<li>\u043e\u043b\u043e\u0432\u043e \u043f\u0430\u044f\u043b\u044c\u043d\u043e\u0435;<\/li>\n<li>\u043d\u043e\u0436\u043d\u0438\u0446\u044b;<\/li>\n<li>\u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 36 \u043e\u043c (1 \u0448\u0442.);<\/li>\n<li>\u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 160 \u043a\u041e\u043c (1 \u0448\u0442.);<\/li>\n<li>\u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u0430 74HC595N (1 \u0448\u0442.);<\/li>\n<li>\u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 220 \u041e\u043c (1 \u0448\u0442.);<\/li>\n<li>\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u044b: \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439, \u0437\u0435\u043b\u0435\u043d\u044b\u0439, \u0436\u0451\u043b\u0442\u044b\u0439, \u043a\u0440\u0430\u0441\u043d\u044b\u0439 (4 \u0448\u0442.);<\/li>\n<li>\u0442\u0440\u0430\u043d\u0437\u0438\u0441\u0442\u043e\u0440 \u043c\u043e\u0449\u043d\u044b\u0439 BC337 (1 \u0448\u0442.);<\/li>\n<li>\u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 100 \u043a\u041e\u043c (1 \u0448\u0442.);<\/li>\n<li>\u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u043a\u0430 (1 \u0448\u0442.).<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"nachnyom\">\u041d\u0430\u0447\u043d\u0451\u043c!<\/h2>\n<p>  <\/p>\n<h3 id=\"shag-1-ustanovka-biblioteki-m5-ui\">\u0428\u0430\u0433 1. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 M5 UI<\/h3>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 M5 UI for Arduino IDE \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <strong>Downloads<\/strong> (\u0432\u043d\u0438\u0437\u0443 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b) \u0438 \u0441\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0430\u0440\u0445\u0438\u0432 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0441 GitHub (\u0440\u0438\u0441. 3.1).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6c9\/554\/054\/6c95540549cbb7d9411fc89b8337f4ee.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3.1. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 Clone or download, \u0437\u0430\u0442\u0435\u043c Download ZIP<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Arduino IDE \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u043a\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 (\u0440\u0438\u0441. 3.2).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/bbf\/6ed\/6f3\/bbf6ed6f3d031dbcf7cd7844e508554e.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3.2. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 Sketch, Include Library, Add .ZIP Library&#8230;<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430. \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451.<\/p>\n<p>  <\/p>\n<h3 id=\"shag-2-ustanovka-i-instrumenta-m5-ui-designer\">\u0428\u0430\u0433 2. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 M5 UI Designer<\/h3>\n<p>  <\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 M5 UI Designer for Arduino IDE \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <strong>Downloads<\/strong> (\u0432\u043d\u0438\u0437\u0443 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b) \u0438 \u0441\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0430\u0440\u0445\u0438\u0432 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0441 GitHub \u0432 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b, \u0437\u0430\u0442\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u043a\u0438\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438 \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 index.html \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 (beta-\u0432\u0435\u0440\u0441\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c\u0438 \u043d\u0430 \u0434\u0432\u0438\u0436\u043a\u0435 Chrome) (\u0440\u0438\u0441. 3.4)<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/832\/d53\/0c6\/832d530c675a868b5024de94345451bc.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3.4<\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 (\u0440\u0438\u0441. 3.5).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/27f\/1e0\/2b1\/27f1e02b12d18c6b43fcf27c703cd340.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3.5. \u0417\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u2014 M5 UI Designer<\/p>\n<p>  <\/p>\n<h3 id=\"shag-3-klavisha-enter---osobennaya-_\">\u0428\u0430\u0433 3. \u041a\u043b\u0430\u0432\u0438\u0448\u0430 Enter \u2014 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u0430\u044f (\u2299_\u2299)<\/h3>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0435\u0431\u0435 \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u2014 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0432\u0451\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0442\u043e\u0442 \u0436\u0435 Inputbox \u0438 \u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c. \u041a\u0430\u043a \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c M5 \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b \u0432\u0432\u043e\u0434? \u0412\u0435\u0440\u043d\u043e \u2014 \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 Enter (\u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432).<br \/>  \u0412 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043a\u043e\u0434\u0430 \u0412\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a \u043a\u043b\u0430\u0432\u0438\u0448\u0435 Enter, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u044b\u043b\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 void (String*).<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">void userFunction1(String* rootVar) {     \/\/ reaction after pressing the Enter key }  ... UIEnter = userFunction1;<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"shag-4-azbuka-morze-inputbox-i-textbox-_\">\u0428\u0430\u0433 4. \u0410\u0437\u0431\u0443\u043a\u0430 \u043c\u043e\u0440\u0437\u0435, Inputbox \u0438 Textbox (^_^\u266a)<\/h3>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043d\u0430\u0448 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 Inputbox. \u0412 \u043d\u0435\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0438 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 Enter \u0431\u0443\u0434\u0435\u043c \u0441\u043b\u044b\u0448\u0430\u0442\u044c \u0438\u0437 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u043a\u043e\u0434 \u041c\u043e\u0440\u0437\u0435 (\u0440\u0438\u0441. 4).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/efa\/0ab\/e4e\/efa0abe4e755d14ddd71e28b3d943d4b.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u041a\u043e\u0434 \u041c\u043e\u0440\u0437\u0435<\/p>\n<p>  <\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 M5 UI Designer, \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 Inputbox \u0438 Textbox, \u0437\u0430\u0434\u0430\u0439\u0442\u0435 \u0448\u0438\u0440\u0438\u043d\u0443 \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\u0442\u0438. \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 Tools &gt; User Functions \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u043e\u043a &quot;\u0436\u0451\u043b\u0442\u0430\u044f \u043c\u043e\u043b\u043d\u0438\u044f&quot; \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043c\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Morse. \u0417\u0430\u0442\u0435\u043c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 Properties &gt; Enter key \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 Morse (\u0440\u0438\u0441. 4.1).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d3e\/864\/2f9\/d3e8642f9d7d048e6c679eed797b970c.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4.1.<\/p>\n<p>  <\/p>\n<p>\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u0435 \u0432\u0435\u0441\u044c \u0442\u0435\u043a\u0441\u0442 \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 Source \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u0432 Arduino IDE.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/* User functions: *\/ void Morse(String* rootVar) {  int MorseCodes[] =  {   0,1,-1,-1, \/\/ A   1,0,0,0, \/\/ B   1,0,1,0, \/\/ C   1,0,0,-1, \/\/ D   0,-1,-1,-1, \/\/ E   0,0,1,0,  \/\/F   1,1,0,-1, \/\/ G   0,0,0,0,  \/\/ H   0,0,-1,-1,  \/\/ I   0,1,1,1, \/\/ J   1,0,1,-1, \/\/ K   0,1,0,0, \/\/ L   1,1,-1,-1, \/\/ M   1,0,-1,-1,  \/\/ N   1,1,1,-1, \/\/ O   0,1,1,0,  \/\/ P   1,1,0,1,  \/\/ Q   0,1,0,-1, \/\/ R   0,0,0,-1, \/\/ S   1,-1,-1,-1, \/\/ T   0,0,1,-1, \/\/ U   0,0,0,1,  \/\/ V   0,1,1,-1, \/\/ W   1,0,0,1,  \/\/ X   1,0,1,1, \/\/ Y   1,1,0,0 \/\/ Z  };  for (int i = 0; i &lt; UIInputbox_v05700a.length(); i++) {   char chr = UIInputbox_v05700a[i];   if (chr == ' ')   {     M5.Speaker.mute();     delay(350);   }   else   {     int chrNum = (chr - 'a') * 4;     for (int j = chrNum; j &lt; (chrNum + 4); j++)     {       M5.Speaker.tone(440);       if (MorseCodes[j] == 0)         delay(50);       else if (MorseCodes[j] == 1)         delay(200);       M5.Speaker.mute();       delay(150);     }   }  } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435 \u2014 \u0432\u0435\u0441\u044c \u043a\u0430\u0440\u043a\u0430\u0441 \u043a\u043e\u0434\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 M5 UI Designer \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u2014 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f Morse. \u0412\u0441\u0451 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \ud83d\ude42 (\u0440\u0438\u0441. 4.2).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/293\/28e\/56f\/29328e56f579ef210bee6458d41bcc7c.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4.2<\/p>\n<p>  <\/p>\n<h3 id=\"shag-5-bruteforce-i-waitingbar---\">\u0428\u0430\u0433 5. Bruteforce \u0438 Waitingbar \u2267(\u25d5 \u203f\u203f \u25d5)\u2266<\/h3>\n<p>  <\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c Waitingbar. \u0411\u0443\u0434\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c 8-\u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043a\u043e\u0434, \u0430 \u0437\u0430\u0442\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c. \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a \u0440\u0430\u0437 Waitingbar. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043d Waitingbar \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0440\u044b\u0442. \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 Enter (\u0440\u0438\u0441. 5).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/efd\/366\/480\/efd366480bb93ebf86546c5c0d12b6bd.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5.<\/p>\n<p>  <\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043b\u043e\u044f default \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c void UIDiable(bool, String*) \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b Waitingbar \u0431\u044b\u043b \u0441\u043a\u0440\u044b\u0442 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0431\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/* Function for layer default: *\/ void LayerFunction_default(String* rootVar) {  \/* UI Elements *\/  ...  UIDisable(true, &amp;UIWaitingbar_yksk2w8); }<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p><strong>void UIDisable(bool, String*)<\/strong> \u0438\u043b\u0438 <strong>void UISet(String*, int)<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u0413\u0434\u0435 <strong>bool<\/strong> \u2014 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <strong>true<\/strong>\/<strong>false<\/strong> \u0442.\u0435. <strong>\u0441\u043a\u0440\u044b\u0442\u044c<\/strong>\/<strong>\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c<\/strong> \u044d\u043b\u0435\u043c\u0435\u043d\u0442; <strong>String*<\/strong> \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 rootVar (\u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f) \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p><\/blockquote>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 void Brutforce(String*):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/* User functions: *\/ void Brutforce(String* rootVar) {   \/* make random original key *\/   uint8_t okey = random(0, 256);    String okeyString = &quot;&quot;;   for (int i = 0; i &lt; 8; i++) {     okeyString += String((okey &gt;&gt; i) &amp; 1);   }   UISet(&amp;UITextbox_sxjzx0g, okeyString); \/\/ set value for Textbox    UIDisable(false, &amp;UIWaitingbar_yksk2w8); \/\/ show the Waitingbar    uint8_t key;    while (true) {     key++;     String keyString = String();     for (int i = 0; i &lt; 8; i++) {       keyString += String((key &gt;&gt; i) &amp; 1);     }     UISet(&amp;UITextbox_eyar2x, keyString);     Serial.print(key);     Serial.print(&quot; &quot;);     Serial.println(okey);     if (key == okey) break;     M5.Speaker.tone(800);     delay(40);     M5.Speaker.mute();   }   UIDisable(true, &amp;UIWaitingbar_yksk2w8);   M5.Speaker.tone(600);   delay(75);   M5.Speaker.mute();   M5.Speaker.tone(800);   delay(75);   M5.Speaker.mute();   M5.Speaker.tone(500);   delay(75);   M5.Speaker.mute(); }<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>void UISet(String*, String)<\/strong> \u0438\u043b\u0438 <strong>void UISet(String*, int)<\/strong>. \u0413\u0434\u0435 <strong>String*<\/strong> \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 rootVar (\u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f) \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430; <strong>String<\/strong> \u0438\u043b\u0438 <strong>int<\/strong> \u2014 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. <\/p><\/blockquote>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c (\u0440\u0438\u0441. 5.1).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8a7\/8ea\/c33\/8a78eac333517f6e4d6671b62b15762e.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 5.1<\/p>\n<p>  <\/p>\n<h3 id=\"shag-6-batterycheck-i-progressbar-o_o\">\u0428\u0430\u0433 6. BatteryCheck \u0438 Progressbar \u03a3(O_O)<\/h3>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u0435\u0440 \u0437\u0430\u0440\u044f\u0434\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u0430\u043b\u044c\u0447\u0438\u043a\u043e\u0432\u044b\u0445 \u0431\u0430\u0442\u0430\u0440\u0435\u0435\u043a \u0442\u0438\u043f\u0430 A, AA, AAA. \u0418\u043d\u0434\u0438\u043a\u0430\u0446\u0438\u044e \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Progressbar \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e\u043c \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438, \u0430 \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0432\u043d\u0438\u0437\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Textbox \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0432 \u043c\u0412 (\u0440\u0438\u0441. 6).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7e0\/9d6\/565\/7e09d65655d1738301eab11b7d5e2414.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 6.<\/p>\n<p>  <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043b\u043e\u044f<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/* Function for layer default: *\/ void LayerFunction_default(String* rootVar) {  \/* To open this layer use: *\/  ...  \/\/ BattaryCheck  while (true) {   int voltage = analogRead(35) * 3400 \/ 4096;   int percentage = voltage * 100 \/ 1600;   UISet(&amp;UIProgressbar_1mlmhcu, percentage);   UISet(&amp;UITextbox_gtaetjh, voltage);   delay(500);  } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e, \u043a\u0430\u0436\u0434\u044b\u0435 500 \u043c\u0441, \u0432 \u0446\u0438\u043a\u043b\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0441 \u0410\u0426\u041f \u043f\u043e\u0440\u0442 0 (\u043a\u043e\u043d\u0442\u0430\u043a\u0442 35).<br \/>  \u0417\u0430\u0442\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435: 3400 \u043c\u0412 \u2014 \u044d\u0442\u043e \u043e\u043f\u043e\u0440\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435, 4096 \u2014 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u044e\u0449\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0410\u0426\u041f. \u0421\u0445\u0435\u043c\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 6.1.<\/p>\n<p>  <\/p>\n<blockquote><p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f M5 Bottom \u0432\u043c\u0435\u0441\u0442\u043e FACES<\/p><\/blockquote>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7c9\/08b\/7fd\/7c908b7fd4ef3b614924011d7dfa4616.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 6.1. \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0410\u0426\u041f \u043a \u043f\u0430\u043b\u044c\u0447\u0438\u043a\u043e\u0432\u043e\u0439 \u0431\u0430\u0442\u0430\u0440\u0435\u0439\u043a\u0435<\/p>\n<p>  <\/p>\n<p>\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0437\u0434\u043e\u0440\u043e\u0432\u043e! \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u0412\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u0430\u0442\u0430\u0440\u0435\u0435\u043a (\u0440\u0438\u0441. 6.2).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/20b\/926\/3d3\/20b9263d3f57b5ff57688060026fb73c.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 6.2<\/p>\n<p>  <\/p>\n<h3 id=\"shag-7-ledshift-i-selectbox---\">\u0428\u0430\u0433 7. LEDshift \u0438 Selectbox ( \u25e1\u203f\u25e1 *)<\/h3>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430 (\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439, \u0437\u0435\u043b\u0451\u043d\u044b\u0439, \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0438 \u0436\u0451\u043b\u0442\u044b\u0439) \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 74HC595N \u043a M5 \u043f\u043e \u0441\u0445\u0435\u043c\u0435 \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 7.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e48\/bee\/124\/e48bee1245b65155882fa2b10a4ae810.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 7. \u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432 \u043a M5 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e M5 UI Designer, \u043a\u0430\u043a \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434 (\u0440\u0438\u0441. 7.1).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/dc3\/d8b\/7c5\/dc3d8b7c555f81f67a7d2dc9e495b599.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 7.1.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434.<\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u043c\u0435\u0440\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u043d\u0430 M5 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0434\u0432\u0438\u0433\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 74HC595N \u043f\u043e\u0441\u043b\u0435 RootVar&#8217;s:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/* RootVar's for UI elements (note: not edit manually) *\/ ... \/\/ Shift register pinout int SH_CP = 17; int ST_CP = 2; int DS = 5;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 void SelectColor(String*):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/* User functions: *\/ void SelectColor(String* rootVar) {   int led = UIOptionValue(&amp;UISelectbox_6foo6h).toInt();   digitalWrite(ST_CP, LOW);   shiftOut(DS, SH_CP, MSBFIRST, led);   digitalWrite(ST_CP, HIGH);   delay(100); }<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <strong>\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong> \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043e\u043f\u0446\u0438\u0438 \u0438\u0437 Selectbox \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>String UIOptionValue(String*)<\/strong>.<\/p><\/blockquote>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c Selectbox \u043e\u043f\u0446\u0438\u044f\u043c\u0438. \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0441\u0430\u043c\u043e\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043b\u043e\u044f 5 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/* Function for layer default: *\/ void LayerFunction_default(String* rootVar) {  \/\/ add options to Selectbox  UIOption(&quot;OFF&quot;, &quot;0&quot;, &amp;UISelectbox_6foo6h);  UIOption(&quot;RED&quot;, &quot;17&quot;, &amp;UISelectbox_6foo6h);  UIOption(&quot;YELLOW&quot;, &quot;3&quot;, &amp;UISelectbox_6foo6h);  UIOption(&quot;GREEN&quot;, &quot;5&quot;, &amp;UISelectbox_6foo6h);  UIOption(&quot;ORANGE&quot;, &quot;9&quot;, &amp;UISelectbox_6foo6h);  ... }<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u044e \u0432 Selectbox \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>void UIOption(String, String, String*)<\/strong>. \u0413\u0434\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 <strong>String<\/strong> \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043e\u043f\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u0438\u0434\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c; \u0432\u0442\u043e\u0440\u043e\u0439 <strong>String<\/strong> \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u043f\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043a\u0440\u044b\u0442\u043e \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f; <strong>String*<\/strong> \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 rootVar (\u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f) \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/p><\/blockquote>\n<p>\u0412 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0438\u0436\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b M5 \u043d\u0430 \u0432\u044b\u0432\u043e\u0434:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">void setup() {  ...  \/* Prepare user's I\/O. For example pinMode(5, OUTPUT); *\/  pinMode(SH_CP, OUTPUT);  pinMode(ST_CP, OUTPUT);  pinMode(DS, OUTPUT);  ... }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451! \ud83d\ude42 (\u0440\u0438\u0441. 7.2).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8ad\/190\/2d7\/8ad1902d7860e14264f8bff93bbd38fc.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 7.2<\/p>\n<p>  <\/p>\n<h3 id=\"shag-8-smartdrill-i-komanda-iz-rangebox-checkbox-button---\">\u0428\u0430\u0433 8. SmartDrill \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u0437 Rangebox, Checkbox, Button (\u00b4\uff61\u2022 \u1d55 \u2022\uff61`)<\/h3>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c Rangebox, Checkbox \u0438 Button? \u0412\u0435\u0440\u043d\u043e! \u2014 \u0441\u0442\u0430\u043d\u043e\u043a \u0434\u043b\u044f \u0441\u0432\u0435\u0440\u043b\u0435\u043d\u0438\u044f. \u0412\u043e\u0437\u044c\u043c\u0451\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0442\u043e\u043a\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442 \u043a\u0430\u0441\u0441\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u043b\u0435\u0435\u0440\u0430), \u0442\u0440\u0430\u043d\u0437\u0438\u0441\u0442\u043e\u0440 (\u0447\u0442\u043e\u0431 \u043f\u043e \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b), \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440 \u0447\u0442\u043e\u0431 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043a \u0431\u0430\u0437\u044b, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u043e\u0432, \u043c\u0430\u043a\u0435\u0442\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u0438 \u0441\u043e\u0431\u0435\u0440\u0451\u043c! \u0411\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0432\u0435\u0440\u0441\u0442\u0438\u0439 \u043e\u0434\u043d\u043e \u0437\u0430 \u043e\u0434\u043d\u0438\u043c, \u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0438\u0434\u0435\u044f \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0440\u0435\u043b\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0451 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438: \u0442\u0443\u0442 \u043d\u0430\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 Checkbox.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f66\/502\/e45\/f66502e45855eabbfef5f38c329f3a0b.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 8<\/p>\n<p>  <\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Rangebox \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043d\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435. \u041a\u043d\u043e\u043f\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (\u0440\u0438\u0441. 8). \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u2014 \u043a\u043d\u043e\u043f\u043a\u0430 \u0441 \u0438\u043a\u043e\u043d\u043a\u043e\u0439 \ud83d\ude09<\/p>\n<p>  <\/p>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 Enter \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 Enter key \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c (\u043d\u0443\u043b\u0435\u043c).<br \/>  \u0412\u0437\u0430\u043c\u0435\u043d \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e Drill \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 Callback \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e \u043a\u043e\u0434\u0443? \u041f\u043e\u0441\u043b\u0435 RootVar&#8217;s \u0434\u043e\u0431\u0430\u0432\u0438\u043c bool startStatus, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043b\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">\/* RootVar's for UI elements (note: not edit manually) *\/ ... \/\/ User's variables bool startStatus = false;<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e void Drill(String*):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">void Drill(String* rootVar) {   startStatus = (startStatus) ? false : true;   if (startStatus)   {     int power = UIRangebox_ztj619h.toInt() * 255 \/ 100;     dac_out_voltage(DAC_CHANNEL_1, power);     if (UICheckbox_1n9gs0b == &quot;true&quot;)     {       UICaption(&quot;WAIT&quot;, &amp;UIButton_enhu9fc);       delay(25000);       Drill(0);       return;       }     UICaption(&quot;STOP&quot;, &amp;UIButton_enhu9fc);   }   else   {     dac_out_voltage(DAC_CHANNEL_1, 0);     UICaption(&quot;START&quot;, &amp;UIButton_enhu9fc);   } }<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u043c \u043f\u043e\u0440\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>dac_out_voltage(DAC_CHANNEL_1, int)<\/strong>. \u0413\u0434\u0435 <strong>DAC_CHANNEL_1<\/strong> \u2014 \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u043d\u0430\u043b\u0430 (\u043a\u043e\u043d\u0442\u0430\u043a\u0442 25), <strong>int<\/strong> \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p><\/blockquote>\n<p>;<\/p>\n<p>  <\/p>\n<blockquote><p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u0437 UI-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e UICaption(String, String<em>). \u0413\u0434\u0435 <strong>String<\/strong> \u2014 \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a; <strong>String\\<\/strong><\/em> \u2014 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 rootVar (\u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f) \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430<\/p><\/blockquote>\n<p>\u0423\u0440\u0430! \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u0435\u0440\u043b\u0438\u0442\u044c (\u0440\u0438\u0441. 8.1).<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c22\/b97\/c87\/c22b97c87390b3a6a05d11a8005e58c9.jpg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 8.1<\/p>\n<p>  <\/p>\n<h3 id=\"shag-9-zapusk\">\u0428\u0430\u0433 9. \u0417\u0430\u043f\u0443\u0441\u043a!<\/h3>\n<p>  <\/p>\n<p>\u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <strong>&quot;\u0421\u0441\u044b\u043b\u043a\u0438&quot;<\/strong> \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e \u0441 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u041d\u0430 \u044d\u0442\u043e\u043c \u0443\u0440\u043e\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d.<\/p>\n<p>  <\/p>\n<h2 id=\"ssylki--downloads\">\u0421\u0441\u044b\u043b\u043a\u0438 \\ Downloads<\/h2>\n<p>  <\/p>\n<ul>\n<li>\u0423\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e M5Stack <a href=\"http:\/\/ru.m5stack.com\/\" rel=\"nofollow\">\u0442\u0443\u0442<\/a><\/li>\n<li>M5 UI for Arduino IDE (GitHub): <a href=\"https:\/\/github.com\/dsiberia9s\/M5_UI\" title=\"https:\/\/github.com\/dsiberia9s\/M5_UI\" rel=\"nofollow\">https:\/\/github.com\/dsiberia9s\/M5_UI<\/a><\/li>\n<li>M5 UI Designer for Arduino IDE (GitHub): <a href=\"https:\/\/github.com\/dsiberia9s\/M5_UI_Designer_for_Arduino_IDE\" title=\"https:\/\/github.com\/dsiberia9s\/M5_UI_Designer_for_Arduino_IDE\" rel=\"nofollow\">https:\/\/github.com\/dsiberia9s\/M5_UI_Designer_for_Arduino_IDE<\/a><\/li>\n<li>\u0412\u0438\u0434\u0435\u043e \u0441 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b &quot;Morse&quot; (YouTube): <a href=\"https:\/\/youtu.be\/ZYIfTDb_r80\" title=\"https:\/\/youtu.be\/ZYIfTDb_r80\" rel=\"nofollow\">https:\/\/youtu.be\/ZYIfTDb_r80<\/a><\/li>\n<li>\u0412\u0438\u0434\u0435\u043e \u0441 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b &quot;Bruteforce&quot; (YouTube): <a href=\"https:\/\/youtu.be\/IfZaFtWYyFA\" title=\"https:\/\/youtu.be\/IfZaFtWYyFA\" rel=\"nofollow\">https:\/\/youtu.be\/IfZaFtWYyFA<\/a><\/li>\n<li>\u0412\u0438\u0434\u0435\u043e \u0441 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b &quot;BatteryCheck&quot; (YouTube): <a href=\"https:\/\/youtu.be\/TgceYjgONd8\" title=\"https:\/\/youtu.be\/TgceYjgONd8\" rel=\"nofollow\">https:\/\/youtu.be\/TgceYjgONd8<\/a><\/li>\n<li>\u0412\u0438\u0434\u0435\u043e \u0441 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b &quot;LEDshift&quot; (YouTube): <a href=\"https:\/\/youtu.be\/vDMsIPcURgc\" title=\"https:\/\/youtu.be\/vDMsIPcURgc\" rel=\"nofollow\">https:\/\/youtu.be\/vDMsIPcURgc<\/a><\/li>\n<li>\u0412\u0438\u0434\u0435\u043e \u0441 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b &quot;SmartDrill&quot; (YouTube): <a href=\"https:\/\/youtu.be\/uDhNmWwTD4Q\" title=\"https:\/\/youtu.be\/uDhNmWwTD4Q\" rel=\"nofollow\">https:\/\/youtu.be\/uDhNmWwTD4Q<\/a><\/li>\n<\/ul>\n<\/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=\"https:\/\/habr.com\/ru\/post\/492458\/\"> https:\/\/habr.com\/ru\/post\/492458\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/492458\/\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0442\u0430\u043a\u043e\u0439 \u0448\u0442\u0443\u043a\u043e\u0439 \u043a\u0430\u043a M5 UI. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f M5 UI \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0440\u044b \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u043a\u043d\u043e\u043f\u043a\u0438, \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u0441\u043b\u043e\u044f. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 UI \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442, \u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c M5 UI Designer for Arduino IDE.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hq\/j9\/ei\/hqj9eitptjonwol-qxdax_ew9b4.jpeg\"><\/p>\n<p>  <\/p>\n<p>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1<\/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-300191","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/300191","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=300191"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/300191\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=300191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=300191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=300191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}