{"id":470040,"date":"2025-08-08T15:00:14","date_gmt":"2025-08-08T15:00:14","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=470040"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=470040","title":{"rendered":"<span>\u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u043d\u0435\u0440\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/522\/d0f\/5b1\/522d0f5b13cb335e8f8eea4c34db79ba.png\" width=\"445\" height=\"407\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/522\/d0f\/5b1\/522d0f5b13cb335e8f8eea4c34db79ba.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/522\/d0f\/5b1\/522d0f5b13cb335e8f8eea4c34db79ba.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0434\u0440\u043e\u043d\u044b \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u041e\u0434\u0438\u043d \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u2014 \u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u043d\u0435\u0440\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a MTF02.<strong> <\/strong>\u042d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0438 \u044d\u043d\u0435\u0440\u0433\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0435\u043d\u0441\u043e\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c &#171;\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c&#187; \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 GPS \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ee0\/1ea\/9c3\/ee01ea9c37e03f4386de2654dd4de52f.png\" alt=\"\u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0430\u0442\u0447\u0438\u043a MTF-02\" title=\"\u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0430\u0442\u0447\u0438\u043a MTF-02\" width=\"516\" height=\"237\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ee0\/1ea\/9c3\/ee01ea9c37e03f4386de2654dd4de52f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ee0\/1ea\/9c3\/ee01ea9c37e03f4386de2654dd4de52f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0430\u0442\u0447\u0438\u043a MTF-02<\/figcaption><\/div>\n<\/figure>\n<h4>\u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u0432\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/h4>\n<ul>\n<li>\n<p>ToF motion sensor (Time-of-Flight) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u0447\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0421\u0435\u043d\u0441\u043e\u0440 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 (Optical flow) \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438<\/h3>\n<ul>\n<li>\n<p>\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f:4 &#8212; 5.5\u0412, \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 ~200\u043c\u0412\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440\u044b\/\u0432\u0435\u0441: ~25x10x4,5\u043c\u043c 1,5\u0433;<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0442\u043e\u043a: 42<strong>\u00b0<\/strong> &#8212; \u043f\u0440\u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u0438 60 <strong>\u2265<\/strong> Lux;<\/p>\n<\/li>\n<li>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430: \u2265 8\u0441\u043c;<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c: \u0434\u043e 7\u043c\/c \u043d\u0430 \u0432\u044b\u0441\u043e\u0442\u0435 1 \u043c\u0435\u0442\u0440;<\/p>\n<\/li>\n<li>\n<p>ToF motion sensor: \u0434\u043e 2,5 \u043c @ 90% \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 600 Lux, \u043c\u0435\u0440\u0442\u0432\u0430\u044f \u0437\u043e\u043d\u0430 ToF-\u043a\u0430\u043c\u0435\u0440\u044b \u043f\u043e\u0441\u043b\u0435 2\u0441\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u0438\u043d\u0430 \u0432\u043e\u043b\u043d\u044b ToF: 940\u043d\u043c.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u044b MTF-02:<\/h4>\n<ol>\n<li>\n<p>ToF motion sensor \u2014 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u00a0(\u043b\u0430\u0437\u0435\u0440\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0418\u041a-\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430). \u0422\u043e\u0447\u0435\u0447\u043d\u044b\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u0438\u0437\u043c\u0435\u0440\u044f\u044e\u0442 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044e\u00a0\u0434\u043e \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0442\u043e\u043a (Optical flow) &#8212; \u0434\u0430\u0442\u0447\u0438\u043a \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0432\u043d\u0438\u0437 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 ~50 \u0413\u0446, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u044b\u0441\u043e\u0442\u044b 8\u0441\u043c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043b\u0435\u0442\u0435 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u0430\u044f \u043c\u044b\u0448\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u043d\u043e \u0441 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<h4>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b<\/h4>\n<ul>\n<li>\n<p>UART, LVTL 3.3\u0412;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b: Micolink, Mavlink (APM +PX4), MSP(iNav):<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438: 50 \u0413\u0446.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435:<\/h3>\n<h4>\u0414\u0440\u043e\u043d\u044b \u0438 \u043a\u0432\u0430\u0434\u0440\u043e\u043a\u043e\u043f\u0442\u0435\u0440\u044b<\/h4>\n<ul>\n<li>\n<p>\u0421\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0431\u0435\u0437 GPS;<\/p>\n<\/li>\n<li>\n<p>\u0422\u043e\u0447\u043d\u043e\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u043e\u0441\u0430\u0434\u043a\u0435.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0420\u043e\u0431\u043e\u0442\u044b-\u043f\u044b\u043b\u0435\u0441\u043e\u0441\u044b<\/h4>\n<ul>\n<li>\n<p>\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0430<\/h3>\n<ul>\n<li>\n<p>\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u0440\u043e\u0431\u043e\u0442\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u0431\u0435\u0433\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043a\u043e\u043b\u0438\u0436\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h4>\n<p>\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 ToF<\/p>\n<h4>\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f<\/h4>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438<\/p>\n<h4>\u041c\u043e\u0435 \u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435:<\/h4>\n<p><strong>\u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u0442\u043e\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f: \u043c\u043d\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043d\u0430\u0434 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c\u044e \u0442.\u0435. \u043f\u043e &#171;\u0432\u043e\u0437\u0434\u0443\u0445\u0443&#187;.<\/strong><\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u0434\u0430\u0442\u0447\u0438\u043a MTF-02, \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 (X, Y) \u0438 \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c\u0443ToF motion sensor, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0434\u0443\u043b\u044e \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, MTF-02 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u044f\u043c\u0430\u044f \u043e\u043f\u043e\u0440\u0430 \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u043d, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0432 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u0433\u0434\u0435 \u0432\u0430\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043f\u043e\u0434\u0432\u0435\u0448\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0438\u043b\u0438 \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u043d\u0430\u0434 \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0439\/\u043d\u0435\u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<h4>\u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/593\/c2e\/b0b\/593c2eb0b107b945ffff66ff70127c9c.png\" alt=\"\u0421\u0438\u0433\u043d\u0430\u043b TX \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a STM32F103(PA10-31 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 - RX), \u0430 \u0442\u0430\u043a \u0436\u0435 +5\u0412 \u0438 GND\" title=\"\u0421\u0438\u0433\u043d\u0430\u043b TX \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a STM32F103(PA10-31 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 - RX), \u0430 \u0442\u0430\u043a \u0436\u0435 +5\u0412 \u0438 GND\" width=\"703\" height=\"529\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/593\/c2e\/b0b\/593c2eb0b107b945ffff66ff70127c9c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/593\/c2e\/b0b\/593c2eb0b107b945ffff66ff70127c9c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0438\u0433\u043d\u0430\u043b TX \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a STM32F103(PA10-31 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 &#8212; RX), \u0430 \u0442\u0430\u043a \u0436\u0435 +5\u0412 \u0438 GND<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0445\u0435\u043c\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u043d\u0438\u0436\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c MP231, \u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a +12\u0412, \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 (NiMH\/Pb +12\u0412).<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/77a\/757\/e95\/77a757e95a91594c5aa260a8e0bc5349.png\" alt=\"\u041f\u043e\u043d\u0438\u0436\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f [ +12V \u0434\u043e +5V  ]\" title=\"\u041f\u043e\u043d\u0438\u0436\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f [ +12V \u0434\u043e +5V  ]\" width=\"979\" height=\"231\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/77a\/757\/e95\/77a757e95a91594c5aa260a8e0bc5349.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/77a\/757\/e95\/77a757e95a91594c5aa260a8e0bc5349.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u043d\u0438\u0436\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f [ +12V \u0434\u043e +5V  ]<\/figcaption><\/div>\n<\/figure>\n<h4>\u0412\u0438\u0434 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044f MTF-02 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 USART (\u043b\u0438\u043d\u0438\u044f TX)<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/242\/457\/a88\/242457a88c598fd68cdfc13f81c67149.png\" width=\"626\" height=\"820\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/242\/457\/a88\/242457a88c598fd68cdfc13f81c67149.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/242\/457\/a88\/242457a88c598fd68cdfc13f81c67149.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F103 \u0432 CubeIDE<\/h4>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e2e\/9d8\/fef\/e2e9d8fef991bcd78ebd40b545c05474.png\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 USART \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 STM32F103\" title=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 USART \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 STM32F103\" width=\"1887\" height=\"565\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/e2e\/9d8\/fef\/e2e9d8fef991bcd78ebd40b545c05474.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e2e\/9d8\/fef\/e2e9d8fef991bcd78ebd40b545c05474.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 USART \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 STM32F103<\/figcaption><\/div>\n<\/figure>\n<ul>\n<li>\n<p>\u0412 \u043f\u0443\u043d\u043a\u0442\u0435 [ 1 ] \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c (Baud Rate [115200]), \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439;<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0443\u043d\u043a\u0442\u0435 [ 2 ] \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#171;DMA Settings&#187; \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<blockquote>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443(USART) \u0431\u044b\u043b\u0430 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0430 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c (DMA), \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0435\u043c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b USART(USART_RX) \u0431\u044b\u043b \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 DMA, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u044f\u0434\u0440\u0430.<\/p>\n<\/blockquote>\n<p> <strong>\u2022<\/strong>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 [ 3 ] \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#171;NVIC Settings&#187; \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435.<\/p>\n<blockquote>\n<p>\u0414\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 USART \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438), \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 NVIC Settings \u0431\u044b\u043b\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 USART, \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0431\u0435\u0437 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u043e\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432.<\/p>\n<\/blockquote>\n<\/li>\n<\/ul>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430(\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438 \u043f\u0440\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445)<\/h2>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 <\/h4>\n<pre><code class=\"objectivec\">extern volatile uint8_t uartRxFullIRDone; \/\/\u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u043b\u043d\u043e\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u0443 extern volatile uint8_t uartRxHalfIRDone; \/\/\u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0431\u0443\u0444\u0435\u0440\u0430 extern short status_UART;  #define UART_RX_BUFFER_SIZE 96\/\/\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 uint8_t uart_rx_buffer_MTF[UART_RX_BUFFER_SIZE]={0,};  uint8_t uart_rx_buffer_MTF_copy[UART_RX_BUFFER_SIZE]={0,};  #define SIZEBUF_uart_rx_buf_mtf 64 \/\/128 16 unsigned char uart_rx_buf_mtf[SIZEBUF_uart_rx_buf_mtf]={0,}; int size_uart_rx_buf_mtf=0;   MICOLINK_MSG_t msg; MICOLINK_PAYLOAD_RANGE_SENSOR_t payload;  \/\/\u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 #define SIZEBUF_result 96 char uart_rezult_buf1[SIZEBUF_result]={0,}; char uart_rezult_buf2[SIZEBUF_result]={0,}; char* uart_rezult_buf=uart_rezult_buf1; short uart_rezult_buf_i=0;\/\/\u0438\u043d\u0434\u0435\u043a\u0441 char* uart_bufRow=uart_rezult_buf1;\/\/\u0431\u0443\u0444\u0435\u0440 \u0441 \u0446\u0435\u043b\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \/\/E N D \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \/\/E N D \u0434\u043b\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a  \/\/\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b float distance_m=0.0f; int16_t flow_vel_x_cop=0; float flow_vel_x_cop_ab=0.0f; int16_t flow_vel_y_cop=0; float flow_vel_y_cop_ab=0.0f; uint32_t time_ms_s = 0; float distance_global =0.0f; \/\/E N D \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b  \/\/\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437.\u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f float smoothed_x = 0.0f;   \/\/ \u0421\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e X (\u0441\u043c\/\u0441) float smoothed_y = 0.0f;   \/\/ \u0421\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e Y (\u0441\u043c\/\u0441) float smoothed_distance = 0.0f; \/\/ \u0421\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u0430\u044f \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f (\u043c) float total_velocity = 0.0f; \/\/ \u041e\u0431\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u0437 \u0441\u0433\u043b\u0430\u0436. \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u0441\u043a\u043e\u0440. \u0438 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u0438 (\u0441\u043c\/\u0441) \/\/E N D \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437.\u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f  static float total_path_m = 0.0f;   \/\/ \u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c (\u043c\u0435\u0442\u0440\u044b) float total_path_m_cop = 0.0f; long total_path_m_cop_long =0; \/\/\u0442\u0435\u0441\u0442 static float position_x_m = 0.0f;   \/\/ \u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e X (\u0432 \u043c\u0435\u0442\u0440\u0430\u0445) float position_x_m_cop = 0.0f; long position_x_m_cop_long= 0; static float position_y_m = 0.0f;   \/\/ \u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e Y (\u0432 \u043c\u0435\u0442\u0440\u0430\u0445) float position_y_m_cop = 0.0f; long position_y_m_cop_long= 0; float beta_rad = 0.0f;  \/\/ \u0411\u0443\u0444\u0435\u0440\u044b \u0434\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 #define BUFFER_SIZE 5 \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u0434\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u0449\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u0435\u0435, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 float flow_vel_x_buffer[BUFFER_SIZE] = {0}; \/\/ \u0411\u0443\u0444\u0435\u0440 \u0434\u043b\u044f flow_vel_x float flow_vel_y_buffer[BUFFER_SIZE] = {0}; \/\/ \u0411\u0443\u0444\u0435\u0440 \u0434\u043b\u044f flow_vel_y float distance_buffer[BUFFER_SIZE] = {0};  \/\/ \u0411\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u0438 uint8_t buffer_index = 0; \/\/ \u0418\u043d\u0434\u0435\u043a\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \/\/  E N D \u0411\u0443\u0444\u0435\u0440\u044b \u0434\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/code><\/pre>\n<h4>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b MICOLINK_MSG_t msg \u0438 MICOLINK_PAYLOAD_RANGE_SENSOR_t<\/h4>\n<blockquote>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u044f \u0432\u0437\u044f\u043b \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 [ <a href=\"https:\/\/micoair.com\/docs\/decoding-micolink-messages-from-mtf-01\/\" rel=\"noopener noreferrer nofollow\">https:\/\/micoair.com\/docs\/decoding-micolink-messages-from-mtf-01\/<\/a> ]<\/p>\n<\/blockquote>\n<pre><code class=\"objectivec\">#define MICOLINK_MSG_HEAD            0xEF #define MICOLINK_MAX_PAYLOAD_LEN     64 #define MICOLINK_MAX_LEN             MICOLINK_MAX_PAYLOAD_LEN + 7  enum {     MICOLINK_MSG_ID_RANGE_SENSOR = 0x51,     \/\/ Range Sensor }; \/*     Message Structure Definition *\/ typedef struct {     uint8_t head;     uint8_t dev_id;     uint8_t sys_id;     uint8_t msg_id;     uint8_t seq;     uint8_t len;     uint8_t payload[MICOLINK_MAX_PAYLOAD_LEN];     uint8_t checksum;      uint8_t status;     uint8_t payload_cnt; } MICOLINK_MSG_t;  \/\/ Range Sensor typedef struct {     uint32_t  time_ms;    \/\/ System time in ms     uint32_t  distance;    \/\/ distance(mm), 0 Indicates unavailable     uint8_t   strength;            \/\/ signal strength     uint8_t   precision;    \/\/ distance precision     uint8_t   dis_status;    \/\/ distance status     uint8_t  reserved1;            \/\/ reserved     int16_t   flow_vel_x;    \/\/ optical flow velocity in x     int16_t   flow_vel_y;    \/\/ optical flow velocity in y     uint8_t   flow_quality;    \/\/ optical flow quality     uint8_t   flow_status;    \/\/ optical flow status     uint16_t  reserved2;    \/\/ reserved } MICOLINK_PAYLOAD_RANGE_SENSOR_t; <\/code><\/pre>\n<h4>\u041c\u0435\u0442\u043e\u0434 uart_Handler_MTF<\/h4>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02.<\/p>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u0435\u0442\u043e\u0434\u0430<\/strong><br \/><strong>\u2022 <\/strong>\u041f\u0440\u0438\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430<br \/>\u041c\u0435\u0442\u043e\u0434 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f DMA \u2014 \u043f\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u043b\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u043f\u0440\u0438\u0451\u043c\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e, \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c.<\/p>\n<p><strong>\u2022 <\/strong>\u0411\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0434\u0440\u043e\u0432<br \/>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0447\u0435\u0440\u0435\u0434\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0431\u0443\u0444\u0435\u0440\u0430 (uart_rezult_buf1 \u0438 uart_rezult_buf2), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0451\u043c \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0448\u043b\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><strong>\u2022 <\/strong>\u0414\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430<br \/>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e micolink_decode, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442 \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b:<\/p>\n<p>flow_vel_x_cop \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e \u043e\u0441\u0438 X<\/p>\n<p>flow_vel_y_cop \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e \u043e\u0441\u0438 Y<\/p>\n<p>distance_m \u2014 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0434\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438<\/p>\n<p><strong>\u2022 <\/strong>\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<br \/>\u0414\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0448\u0443\u043c\u043e\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438 \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 calculate_average. \u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<p><strong>\u2022 <\/strong>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432 \u043f\u0443\u0442\u044c<br \/>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (update_position) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043f\u043e \u043e\u0441\u044f\u043c X \u0438 Y.<br \/>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0449\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u043f\u0443\u0442\u0438 \u0438 \u0443\u0433\u043e\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f (calculateBetaRadians).<\/p>\n<p><strong>\u2022 <\/strong>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<br \/>\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 (sprintf) \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.  <\/p>\n<pre><code class=\"objectivec\">void uart_Handler_MTF(void) { HAL_Delay(1);\/\/\u0447\u0442\u043e\u0431\u044b HAL_GetTick() \u043d\u0435 \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u043d\u043e\u043b\u044c uint32_t ms = HAL_GetTick(); \/\/uint32_t time_sec = ms \/ 1000; char isData=0; char* pData=(char*)uart_rx_buffer_MTF;  if(uartRxFullIRDone){ uartRxFullIRDone = 0;  \/\/ \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 DMA pData=(char*)&amp;uart_rx_buffer_MTF[UART_RX_BUFFER_SIZE\/2]; isData=1; } if(uartRxHalfIRDone){ uartRxHalfIRDone = 0; \/\/ \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 DMA  pData = (char*)uart_rx_buffer_MTF; isData=1; } if(isData) { isData=0;  if(uart_rezult_buf==uart_rezult_buf1){ memcpy(uart_rezult_buf1, pData, UART_RX_BUFFER_SIZE \/ 2); uart_bufRow=uart_rezult_buf1; uart_rezult_buf=uart_rezult_buf2;  }else{ memcpy(uart_rezult_buf2, pData, UART_RX_BUFFER_SIZE \/ 2); uart_bufRow=uart_rezult_buf2; uart_rezult_buf=uart_rezult_buf1;  } memcpy(uart_rx_buffer_MTF_copy,(uint8_t*)uart_bufRow,UART_RX_BUFFER_SIZE); micolink_decode(uart_rx_buffer_MTF_copy,UART_RX_BUFFER_SIZE);              \/\/\u0421\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f flow_vel_x_buffer[buffer_index] = flow_vel_x_cop; flow_vel_y_buffer[buffer_index] = flow_vel_y_cop; distance_buffer[buffer_index] = distance_m; buffer_index = (buffer_index + 1) % BUFFER_SIZE; \/\/ \u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \/\/ \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f  smoothed_x = calculate_average(flow_vel_x_buffer); smoothed_y = calculate_average(flow_vel_y_buffer); smoothed_distance = calculate_average(distance_buffer); \/\/E N D \u0421\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f float time_sec = ms\/1000.0f;\/\/\u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u044b  update_position(smoothed_x,smoothed_y,ms);\/\/\u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u043b\u044b\u0445 \u0448\u0443\u043c\u043e\u0432.  update_motion(smoothed_x,smoothed_y,smoothed_distance, ms);\/\/\u0440\u0430\u0441\u0447\u0451\u0442 \u043e\u0431\u0449\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438  \/\/\u0434\u0435\u043b\u0430\u044e \u043a\u043e\u043f\u0438\u044e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e position_x_m,y \u0438 total_path_m static (\u0435\u0441\u043b\u0438 \u043e\u0434\u0442\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 staic, \u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442) position_x_m_cop = position_x_m; position_y_m_cop = position_y_m; total_path_m_cop = total_path_m*1000.0f; total_path_m_cop_long = (long)roundf(total_path_m_cop);  flow_vel_x_cop_ab=position_x_m_cop * 1000.0f;\/\/\u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432 \u043c\u043c flow_vel_y_cop_ab=position_y_m_cop * 1000.0f; position_x_m_cop_long = (long)roundf(flow_vel_x_cop_ab); position_y_m_cop_long = (long)roundf(flow_vel_y_cop_ab); \/\/E N D  beta_rad = calculateBetaRadians(flow_vel_x_cop_ab, flow_vel_y_cop_ab);\/\/\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0443\u0433\u043b\u0430 \u0432 \u0440\u0430\u0434\u0438\u0430\u043d\u0430\u0445  size_uart_rx_buf_mtf = sprintf((char*)&amp;uart_rx_buf_mtf[0], \"%ld %ld %.6f %ld %.3f %d %d&gt;\", position_x_m_cop_long, position_y_m_cop_long,beta_rad, total_path_m_cop_long, time_sec, 1,0);\/\/\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 UART \u0432\u0435\u0434\u0443\u0449\u0435\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443  } }<\/code><\/pre>\n<h4>\u041c\u0435\u0442\u043e\u0434 update_motion<\/h4>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0440\u0430\u0441\u0447\u0451\u0442 \u043e\u0431\u0449\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438, \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u0443\u044e \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u2014 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 MTF-02  \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442, \u0441 \u043a\u0430\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u043a\u0430\u043a\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u043d \u043f\u0440\u043e\u0448\u0451\u043b \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0430\u0440\u0442\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439.<\/p>\n<p><strong>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b<\/strong><br \/><strong>\u2022 <\/strong>\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0434\u0440\u0430\u043c\u0438<br \/>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 (last_time_ms) \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u043e\u0448\u043b\u043e \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0438 \u043f\u0440\u043e\u0448\u043b\u044b\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435\u043c (delta_time_s). \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p><strong>\u2022 <\/strong>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e \u043e\u0441\u044f\u043c X \u0438 Y (flow_vel_x, flow_vel_y).<\/p>\n<p>\u0418\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 (sqrtf(&#8230;)) \u0434\u0430\u0451\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 (distance_m), \u0447\u0442\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<p>\u0414\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 100 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u0441\u0430\u043d\u0442\u0438\u043c\u0435\u0442\u0440\u0430\u0445 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 (\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a \u043c\/\u0441).<\/p>\n<p><strong>\u2022 <\/strong>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0438<br \/>\u041e\u0431\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u2014 \u044d\u0442\u043e \u0434\u0430\u0451\u0442 \u043f\u0440\u0438\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u0433.<br \/>\u041f\u0440\u0438\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 total_path_m, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p><strong>\u2022 <\/strong>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438<br \/>\u0412 \u043a\u043e\u043d\u0446\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c delta_time_s.<\/p>\n<p><strong>\u041f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 <\/strong><br \/>\u041c\u0435\u0442\u043e\u0434 update_motion \u2014 \u044d\u0442\u043e \u0448\u0430\u0433\u043e\u043c\u0435\u0440 \u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e \u043c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u043e \u043d\u0435 \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0448\u0430\u0433\u043e\u0432, \u0430 \u043f\u043e \u0442\u043e\u0447\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043e\u0442 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430.<br \/>\u041e\u043d \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f, \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442 \u0435\u0451 \u043d\u0430 \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043a\u043e\u043f\u0438\u043b\u043a\u0443 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438<\/p>\n<pre><code class=\"objectivec\">\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043e\u0431\u0449\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 void update_motion(float flow_vel_x, float flow_vel_y, float distance_m,uint32_t time_ms) {  static uint32_t last_time_ms = 0;   \/\/ \u0412\u0440\u0435\u043c\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f  float delta_time_s = (time_ms - last_time_ms) \/ 1000.0f;  \/\/ \u0412\u0440\u0435\u043c\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445  if (delta_time_s &gt; 0) { \/\/ \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0449\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c (\u043c\/\u0441) float total_velocity_m_per_s =distance_m * sqrtf(flow_vel_x * flow_vel_x + flow_vel_y * flow_vel_y)\/100.0f;\/\/ \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 100 \u0435\u0441\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043c\/c \u0435\u0441\u043b\u0438 \u0432 \u043c\/\u0442\u043e \u043d\u0435 \u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0438\u0442\u044c \/\/ \u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043f\u0443\u0442\u0438 total_path_m += total_velocity_m_per_s * delta_time_s; } last_time_ms = time_ms;  \/\/ \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f }<\/code><\/pre>\n<h4>\u041c\u0435\u0442\u043e\u0434 update_position<\/h4>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02 \u0438\u0437 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439 \u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u044c, \u0433\u0434\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043a\u0438 \u0441\u0442\u0430\u0440\u0442\u0430.<\/p>\n<p><strong>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/strong><br \/>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0436\u0434\u0443 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438<br \/>\u041c\u0435\u0442\u043e\u0434 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u043e\u0448\u043b\u043e \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 (delta_time_s).<br \/>\u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u043d\u0430 \u043a\u0430\u043a\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u043e\u0433 \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<p><strong>\u2022 <\/strong>\u041e\u0442\u0441\u0435\u0432 \u0448\u0443\u043c\u043e\u0432<br \/>\u0415\u0441\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e X \u0438\u043b\u0438 Y \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u0430 (\u043c\u0435\u043d\u044c\u0448\u0435 0,01 \u0441\u043c\/\u0441), \u043e\u043d\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0448\u0443\u043c\u043e\u043c \u0438 \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u043d\u0443\u043b\u044e. \u042d\u0442\u043e \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u0437-\u0437\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u0439 \u0438\u043b\u0438 \u0434\u0440\u043e\u0436\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430.<\/p>\n<p><strong>\u2022 <\/strong>\u041f\u0435\u0440\u0435\u0432\u043e\u0434 \u0432 \u043c\u0435\u0442\u0440\u044b \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443<br \/>\u041f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u0441\u0430\u043d\u0442\u0438\u043c\u0435\u0442\u0440\u0430\u0445 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 100, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 (\u043c\/\u0441).<\/p>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043f\u0443\u0442\u044c \u0438\u0437 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438<\/p>\n<p>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0440\u0435\u043c\u044f, \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0435\u0435 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c position_x_m \u0438 position_y_m.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043c\u0435\u0442\u0440\u0430\u0445.<\/p>\n<p><strong>\u2022 <\/strong>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438<br \/>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c delta_time_s.<\/p>\n<p><strong>\u041f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438<\/strong><br \/>update_position \u2014 \u044d\u0442\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u00ab\u0441\u043b\u0435\u0434\u043e\u043f\u044b\u0442\u00bb:<br \/>\u043e\u043d \u0431\u0435\u0440\u0451\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0448\u0443\u043c, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0432 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438.<br \/>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435.  <\/p>\n<pre><code class=\"objectivec\">\/\/\u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u043b\u044b\u0445 \u0448\u0443\u043c\u043e\u0432. void update_position(float flow_vel_x, float flow_vel_y,uint32_t time_ms){  static uint32_t last_time_ms = 0;\/\/ \u0412\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f (\u043c\u0441)  \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0435\u0436\u0434\u0443 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 float delta_time_s = (time_ms - last_time_ms) \/ 1000.0f; if (delta_time_s &gt; 0.0f) {  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043c\u0430\u043b\u044b\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u0448\u0443\u043c\u044b if (fabsf(flow_vel_x) &lt; 0.01f) flow_vel_x = 0.0f; \/\/ \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u0448\u0443\u043c \u043f\u043e X if (fabsf(flow_vel_y) &lt; 0.01f) flow_vel_y = 0.0f; \/\/ \u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u0448\u0443\u043c \u043f\u043e Y  \/\/ \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u0437 \u0441\u043c\/\u0441 \u0432 \u043c\/\u0441 float velocity_x_mps = flow_vel_x \/ 100.0f; \/\/ \u041b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e X (\u043c\/\u0441) float velocity_y_mps = flow_vel_y \/ 100.0f; \/\/ \u041b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e Y (\u043c\/\u0441)  \/\/ \u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044fx` position_x_m += velocity_x_mps * delta_time_s; \/\/ \u041f\u0443\u0442\u044c = \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c * \u0412\u0440\u0435\u043c\u044f position_y_m += velocity_y_mps * delta_time_s; } \/\/ \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f last_time_ms = time_ms; }<\/code><\/pre>\n<h4>\u041c\u0435\u0442\u043e\u0434 calculateBetaRadians \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0443\u0433\u043b\u0430 \u0432 \u0440\u0430\u0434\u0438\u0430\u043d\u044b <\/h4>\n<pre><code class=\"objectivec\">float calculateBetaRadians(float flow_vel_x, float flow_vel_y) { return atan2(flow_vel_y, flow_vel_x); \/\/ \u0423\u0433\u043e\u043b \u0432 \u0440\u0430\u0434\u0438\u0430\u043d\u0430\u0445 }<\/code><\/pre>\n<h4>\u041c\u0435\u0442\u043e\u0434 calculate_average \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438 \u0434\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02<\/h4>\n<pre><code class=\"objectivec\"> float calculate_average(float *buffer) {     float sum = 0.0;     for (int i = 0; i &lt; BUFFER_SIZE; i++) {         sum += buffer[i];     }     return sum \/ BUFFER_SIZE; } \/\/E N D \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 <\/code><\/pre>\n<p><strong>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 MicoLink\u0412<\/strong> <\/p>\n<p>\u0412 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c MTF-02 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 MicoLink. \u042d\u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043f\u0440\u0438\u0451\u043c\u0430 \u2014 \u043e\u0442 \u043f\u043e\u0438\u043c\u043a\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u0432\u044b\u0441\u043e\u0442\u044b.<\/p>\n<p>1. <strong>\u041c\u0435\u0442\u043e\u0434 micolink_parse_char,<\/strong> \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u0451\u043c \u0438 \u0440\u0430\u0437\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0431\u0430\u0439\u0442\u043e\u0432, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u0430.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u00ab\u043c\u0430\u0448\u0438\u043d\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439\u00bb:<\/p>\n<p>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u2014 \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>ID \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u2014 \u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.<\/p>\n<p>ID \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u2014 \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u043b\u044c\u043d\u043e\u043c\u0435\u0440\u0430).<\/p>\n<p>\u0414\u043b\u0438\u043d\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>\u041f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u2014 \u0441\u0430\u043c\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f).<\/p>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u2014 \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0441\u043e\u0432\u043f\u0430\u043b\u0430 \u2014 \u043f\u0430\u043a\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u043c.<\/p>\n<p>2. <strong>\u041c\u0435\u0442\u043e\u0434 micolink_check_sum,<\/strong> \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 <br \/>\u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u2014 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u0431\u0430\u0439\u0442\u0430\u043c \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u0447\u0451\u0442 \u043d\u0430 \u043f\u0440\u0438\u0451\u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0437\u043d\u0430\u0447\u0438\u0442, \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u044b.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u0448\u0430\u0433 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043e\u0442 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432 \u043b\u0438\u043d\u0438\u0438 \u0441\u0432\u044f\u0437\u0438.<\/p>\n<p>3. <strong>\u041c\u0435\u0442\u043e\u0434 micolink_decode,<\/strong> \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435,\u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0451\u043c\u0430 \u043f\u0430\u043a\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u043c\u044b\u0441\u043b\u0443.<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 MICO_LINK_MSG_ID_RANGE_SENSOR \u0438\u0437 \u043d\u0435\u0433\u043e \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044e\u0442\u0441\u044f:<\/p>\n<p>time_ms \u2014 \u043e\u0442\u043c\u0435\u0442\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f;<\/p>\n<p>distance_m \u2014 \u0432\u044b\u0441\u043e\u0442\u0430 \u043d\u0430\u0434 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c\u044e, \u0432 \u043c\u0435\u0442\u0440\u0430\u0445;<\/p>\n<p>flow_vel_x \u0438 flow_vel_y \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e \u043e\u0441\u044f\u043c X \u0438 Y (\u0441\u043c\/\u0441).<\/p>\n<p>\u042d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f.  <\/p>\n<pre><code class=\"objectivec\">\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 uint8_t* data, size_t size   void micolink_decode(uint8_t* data, size_t size) { \/\/static MICOLINK_MSG_t msg;  if (micolink_parse_char(&amp;msg,data,size) == false) { return; }  switch (msg.msg_id) { case MICOLINK_MSG_ID_RANGE_SENSOR: { \/\/MICOLINK_PAYLOAD_RANGE_SENSOR_t payload; memcpy(&amp;payload, msg.payload, msg.len);  \/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 uint32_t time_ms = payload.time_ms; time_ms_s = time_ms;  uint32_t distance = payload.distance; distance_m =(float)distance\/1000.0f;\/\/\u043f\u0435\u0440\u0435\u0432\u0435\u043b \u043c\u043c \u0432 \u043c\u0435\u0442\u0440\u044b \/\/ \u0432\u044b\u0441\u043e\u0442\u0430  int16_t flow_vel_x = payload.flow_vel_x; flow_vel_x_cop = (float)flow_vel_x; int16_t flow_vel_y = payload.flow_vel_y; flow_vel_y_cop = (float)flow_vel_y;  break; } default: \/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 break; } }  \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0443\u043c\u043c\u044b bool micolink_check_sum(MICOLINK_MSG_t* msg) { uint8_t length = msg-&gt;len + 6;  \/\/ \u0414\u043b\u0438\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f uint8_t temp[MICOLINK_MAX_LEN]; uint8_t checksum = 0;  memcpy(temp, msg, length);  for (uint8_t i = 0; i &lt; length; i++) { checksum += temp[i]; }  return (checksum == msg-&gt;checksum); }  \/\/ \u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0431\u0430\u0439\u0442\u0430 bool micolink_parse_char(MICOLINK_MSG_t* msg, uint8_t* data, size_t size) {\/\/uint8_t data for (size_t i = 0; i &lt; size; i++) { uint8_t byte = data[i];  \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0431\u0430\u0439\u0442 \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 switch (msg-&gt;status) { case 0:  \/\/ \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 if (byte == MICOLINK_MSG_HEAD) { msg-&gt;head = byte; msg-&gt;status++; } break;  case 1:  \/\/ ID \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 msg-&gt;dev_id = byte; msg-&gt;status++; break;  case 2:  \/\/ ID \u0441\u0438\u0441\u0442\u0435\u043c\u044b msg-&gt;sys_id = byte; msg-&gt;status++; break;  case 3:  \/\/ ID \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f msg-&gt;msg_id = byte; msg-&gt;status++; break;  case 4:  \/\/ \u041d\u043e\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 msg-&gt;seq = byte; msg-&gt;status++; break;  case 5:  \/\/ \u0414\u043b\u0438\u043d\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 msg-&gt;len = byte; if (msg-&gt;len == 0) { msg-&gt;status += 2; } else if (msg-&gt;len &gt; MICOLINK_MAX_PAYLOAD_LEN) { msg-&gt;status = 0;  \/\/ \u0421\u0431\u0440\u043e\u0441 \u0438\u0437-\u0437\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 } else { msg-&gt;status++; } break;  case 6:  \/\/ \u041f\u0440\u0438\u0435\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 msg-&gt;payload[msg-&gt;payload_cnt++] = byte; if (msg-&gt;payload_cnt == msg-&gt;len) { msg-&gt;payload_cnt = 0; msg-&gt;status++; } break;  case 7:  \/\/ \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0443\u043c\u043c\u0430 msg-&gt;checksum = byte; msg-&gt;status = 0;  \/\/ \u0421\u0431\u0440\u043e\u0441 \u0441\u0442\u0430\u0442\u0443\u0441\u0430  if (micolink_check_sum(msg)) {  return true;  \/\/ \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e } break;  default: msg-&gt;status = 0; msg-&gt;payload_cnt = 0; break; } }  return false; }<\/code><\/pre>\n<h4>\u041c\u0435\u0442\u043e\u0434 uart_startRecieving_MTF<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 MTF-02 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e UART, \u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0438\u0445 \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440, \u043d\u0435 \u0442\u0440\u0430\u0442\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u043f\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u041a\u043e\u0433\u0434\u0430 \u0431\u0443\u0444\u0435\u0440 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 (uartRxHalfIRDone \u0438 uartRxFullIRDone), \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 MicoLink.  <\/p>\n<pre><code class=\"objectivec\">void uart_startRecieving_MTF(void) { status_UART=1;\/\/1=startRecieving 2=RxHalf 3=RxCplt   memset(uart_rx_buffer_MTF,0,sizeof(uart_rx_buffer_MTF));  HAL_UART_Receive_DMA(&amp;huart2, (uint8_t*)uart_rx_buffer_MTF, UART_RX_BUFFER_SIZE);\/\/\u043d\u0430\u0447\u0438\u043d\u0430\u044e \u043f\u0440\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 mtf_02 \u043d\u0430 uart2 }<\/code><\/pre>\n<h4>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u0435\u043c <\/h4>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0443 \u043c\u0435\u043d\u044f, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435. <\/p>\n<pre><code class=\"objectivec\">void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart) \/\/(\u043f\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c \u043e\u0442 MTF) { if(huart == &amp;huart2){\/\/MTF_02 status_UART=2;\/\/1=startRecieving 2=RxHalf 3=RxCplt \/\/\u043e\u0442\u043b\u0430\u0434\u043a\u0430 uartRxHalfIRDone = 1; \/\/\u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 } }  void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) \/\/Callback \u043e\u0442 UART RX (\u043f\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0438\u0435\u043c \u043e\u0442 MTF) { if(huart == &amp;huart2){\/\/MTF_02 status_UART=3;\/\/1=startRecieving 2=RxHalf 3=RxCplt \/\/\u043e\u0442\u043b\u0430\u0434\u043a\u0430 uartRxFullIRDone = 1; \/\/\u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u043b\u043d\u043e\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u0443 }   }<\/code><\/pre>\n<h4>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043e\u0448\u0438\u0431\u043e\u043a<\/h4>\n<pre><code class=\"objectivec\">void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { if (huart-&gt;Instance == USART2 &amp;&amp; enResetUART) { \/\/MTF \/* \u0421\u0431\u0440\u043e\u0441 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b *\/ HAL_UART_DeInit(huart); HAL_UART_Init(huart); uartRxFullIRDone = 0; uartRxHalfIRDone = 0; } }<\/code><\/pre>\n<h4>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <\/h4>\n<pre><code class=\"objectivec\">void proj_main() { volatile const char *ch = \";V-F-BIN;ver: \"VER_PROG(VER_a,VER_b,VER_c);(void)ch;\/\/0x8008b00   HAL_Delay(1);\/\/\u0447\u0442\u043e\u0431\u044b HAL_GetTick() \u043d\u0435 \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u043d\u043e\u043b\u044c  uart_startRecieving_MTF();\/\/\u041d\u0430\u0447\u0438\u043d\u0430\u044e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 mtf_02  while (1){  \/\/\u0445\u044d\u043d\u0434\u043b\u0435\u0440\u044b uart_Handler_MTF(); }\/\/while (1) }<\/code><\/pre>\n<p><em>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 [\u00a0<\/em><a href=\"https:\/\/t.me\/ChipCraft\" rel=\"noopener noreferrer nofollow\"><em>https:\/\/t.me\/ChipCraft<\/em><\/a><em>\u00a0\u0412 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 [ #\u0438\u0441\u0441\u043a\u0443\u0441\u0442\u0432\u043e\u043c\u043a_\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439_\u043a\u043e\u0434 &#8212;<\/em>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02<em>]<\/em>  <\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p>\u0414\u0430\u0442\u0447\u0438\u043a MTF-02 \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0415\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430, \u043d\u0438\u0437\u043a\u0430\u044f \u0446\u0435\u043d\u0430 \u0438 \u044d\u043d\u0435\u0440\u0433\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u043b\u0430\u044e\u0442 \u0435\u0433\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432 \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0435, \u0434\u0440\u043e\u043d\u0430\u0445 \u0438 \u0443\u043c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445.<\/p>\n<hr\/>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0412\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u043b\u044f \u0412\u0430\u0441 \u0435\u0449\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u043e \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0432\u0438\u0434\u0430\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0442\u0430\u043a \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0445 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u2013 \u0431\u0443\u0434\u0443 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0435\u043d \u0437\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0443 \u043d\u0430 \u043c\u043e\u0439 \u0422\u0413-\u043a\u0430\u043d\u0430\u043b:\u00a0<a href=\"https:\/\/t.me\/ChipCraft\" rel=\"noopener noreferrer nofollow\">https:\/\/t.me\/ChipCraft<\/a>.  <\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/articles\/935300\/\"> https:\/\/habr.com\/ru\/articles\/935300\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><\/figure>\n<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0434\u0440\u043e\u043d\u044b \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u041e\u0434\u0438\u043d \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u2014 \u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u043d\u0435\u0440\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a MTF02.<strong> <\/strong>\u042d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0438 \u044d\u043d\u0435\u0440\u0433\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0435\u043d\u0441\u043e\u0440 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c &#171;\u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c&#187; \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 GPS \u0438\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432.<\/p>\n<figure class=\"\">\n<div><figcaption>\u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0430\u0442\u0447\u0438\u043a MTF-02<\/figcaption><\/div>\n<\/figure>\n<h4>\u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u0432\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/h4>\n<ul>\n<li>\n<p>ToF motion sensor (Time-of-Flight) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u0447\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p>\u0421\u0435\u043d\u0441\u043e\u0440 \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 (Optical flow) \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438<\/h3>\n<ul>\n<li>\n<p>\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f:4 &#8212; 5.5\u0412, \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 ~200\u043c\u0412\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440\u044b\/\u0432\u0435\u0441: ~25x10x4,5\u043c\u043c 1,5\u0433;<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0442\u043e\u043a: 42<strong>\u00b0<\/strong> &#8212; \u043f\u0440\u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u0438 60 <strong>\u2265<\/strong> Lux;<\/p>\n<\/li>\n<li>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430: \u2265 8\u0441\u043c;<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c: \u0434\u043e 7\u043c\/c \u043d\u0430 \u0432\u044b\u0441\u043e\u0442\u0435 1 \u043c\u0435\u0442\u0440;<\/p>\n<\/li>\n<li>\n<p>ToF motion sensor: \u0434\u043e 2,5 \u043c @ 90% \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 600 Lux, \u043c\u0435\u0440\u0442\u0432\u0430\u044f \u0437\u043e\u043d\u0430 ToF-\u043a\u0430\u043c\u0435\u0440\u044b \u043f\u043e\u0441\u043b\u0435 2\u0441\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u0438\u043d\u0430 \u0432\u043e\u043b\u043d\u044b ToF: 940\u043d\u043c.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u044b MTF-02:<\/h4>\n<ol>\n<li>\n<p>ToF motion sensor \u2014 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u00a0(\u043b\u0430\u0437\u0435\u0440\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0418\u041a-\u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430). \u0422\u043e\u0447\u0435\u0447\u043d\u044b\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u0438\u0437\u043c\u0435\u0440\u044f\u044e\u0442 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044e\u00a0\u0434\u043e \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u0442\u043e\u043a (Optical flow) &#8212; \u0434\u0430\u0442\u0447\u0438\u043a \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0432\u043d\u0438\u0437 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 ~50 \u0413\u0446, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u044b\u0441\u043e\u0442\u044b 8\u0441\u043c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043b\u0435\u0442\u0435 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u0430\u044f \u043c\u044b\u0448\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u043d\u043e \u0441 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<h4>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b<\/h4>\n<ul>\n<li>\n<p>UART, LVTL 3.3\u0412;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b: Micolink, Mavlink (APM +PX4), MSP(iNav):<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438: 50 \u0413\u0446.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435:<\/h3>\n<h4>\u0414\u0440\u043e\u043d\u044b \u0438 \u043a\u0432\u0430\u0434\u0440\u043e\u043a\u043e\u043f\u0442\u0435\u0440\u044b<\/h4>\n<ul>\n<li>\n<p>\u0421\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0431\u0435\u0437 GPS;<\/p>\n<\/li>\n<li>\n<p>\u0422\u043e\u0447\u043d\u043e\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u043e\u0441\u0430\u0434\u043a\u0435.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0420\u043e\u0431\u043e\u0442\u044b-\u043f\u044b\u043b\u0435\u0441\u043e\u0441\u044b<\/h4>\n<ul>\n<li>\n<p>\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0440\u043e\u0431\u043e\u0442\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0430<\/h3>\n<ul>\n<li>\n<p>\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0445 \u0440\u043e\u0431\u043e\u0442\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u0431\u0435\u0433\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043a\u043e\u043b\u0438\u0436\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h4>\n<p>\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0438 ToF<\/p>\n<h4>\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f<\/h4>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438<\/p>\n<h4>\u041c\u043e\u0435 \u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435:<\/h4>\n<p><strong>\u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u0442\u043e\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f: \u043c\u043d\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043d\u0430\u0434 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c\u044e \u0442.\u0435. \u043f\u043e &#171;\u0432\u043e\u0437\u0434\u0443\u0445\u0443&#187;.<\/strong><\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u0434\u0430\u0442\u0447\u0438\u043a MTF-02, \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 (X, Y) \u0438 \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c\u0443ToF motion sensor, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0434\u0443\u043b\u044e \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, MTF-02 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u044f\u043c\u0430\u044f \u043e\u043f\u043e\u0440\u0430 \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u043d, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0432 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u0433\u0434\u0435 \u0432\u0430\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043f\u043e\u0434\u0432\u0435\u0448\u0435\u043d\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0438\u043b\u0438 \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u043d\u0430\u0434 \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0439\/\u043d\u0435\u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<h4>\u0421\u0445\u0435\u043c\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02<\/h4>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0438\u0433\u043d\u0430\u043b TX \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a STM32F103(PA10-31 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 &#8212; RX), \u0430 \u0442\u0430\u043a \u0436\u0435 +5\u0412 \u0438 GND<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0445\u0435\u043c\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u043d\u0438\u0436\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c MP231, \u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a +12\u0412, \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 (NiMH\/Pb +12\u0412).<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u043e\u043d\u0438\u0436\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u044f [ +12V \u0434\u043e +5V  ]<\/figcaption><\/div>\n<\/figure>\n<h4>\u0412\u0438\u0434 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u044f MTF-02 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 USART (\u043b\u0438\u043d\u0438\u044f TX)<\/h4>\n<figure class=\"full-width\"><\/figure>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 STM32F103 \u0432 CubeIDE<\/h4>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 USART \u0432 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 STM32F103<\/figcaption><\/div>\n<\/figure>\n<ul>\n<li>\n<p>\u0412 \u043f\u0443\u043d\u043a\u0442\u0435 [ 1 ] \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c (Baud Rate [115200]), \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439;<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043f\u0443\u043d\u043a\u0442\u0435 [ 2 ] \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#171;DMA Settings&#187; \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<blockquote>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443(USART) \u0431\u044b\u043b\u0430 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0430 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0430\u043d\u043d\u044b\u043c (DMA), \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0435\u043c\u043d\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b USART(USART_RX) \u0431\u044b\u043b \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 DMA, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u044f\u0434\u0440\u0430.<\/p>\n<\/blockquote>\n<p> <strong>\u2022<\/strong>  \u0412 \u043f\u0443\u043d\u043a\u0442\u0435 [ 3 ] \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 &#171;NVIC Settings&#187; \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435.<\/p>\n<blockquote>\n<p>\u0414\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 USART \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0430\u0436\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438), \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 NVIC Settings \u0431\u044b\u043b\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 USART, \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0431\u0435\u0437 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u043e\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432.<\/p>\n<\/blockquote>\n<\/li>\n<\/ul>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430(\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0438 \u043f\u0440\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445)<\/h2>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 <\/h4>\n<pre><code class=\"objectivec\">extern volatile uint8_t uartRxFullIRDone; \/\/\u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u043b\u043d\u043e\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u0443 extern volatile uint8_t uartRxHalfIRDone; \/\/\u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0431\u0443\u0444\u0435\u0440\u0430 extern short status_UART;  #define UART_RX_BUFFER_SIZE 96\/\/\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 uint8_t uart_rx_buffer_MTF[UART_RX_BUFFER_SIZE]={0,};  uint8_t uart_rx_buffer_MTF_copy[UART_RX_BUFFER_SIZE]={0,};  #define SIZEBUF_uart_rx_buf_mtf 64 \/\/128 16 unsigned char uart_rx_buf_mtf[SIZEBUF_uart_rx_buf_mtf]={0,}; int size_uart_rx_buf_mtf=0;   MICOLINK_MSG_t msg; MICOLINK_PAYLOAD_RANGE_SENSOR_t payload;  \/\/\u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 #define SIZEBUF_result 96 char uart_rezult_buf1[SIZEBUF_result]={0,}; char uart_rezult_buf2[SIZEBUF_result]={0,}; char* uart_rezult_buf=uart_rezult_buf1; short uart_rezult_buf_i=0;\/\/\u0438\u043d\u0434\u0435\u043a\u0441 char* uart_bufRow=uart_rezult_buf1;\/\/\u0431\u0443\u0444\u0435\u0440 \u0441 \u0446\u0435\u043b\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \/\/E N D \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \/\/E N D \u0434\u043b\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a  \/\/\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b float distance_m=0.0f; int16_t flow_vel_x_cop=0; float flow_vel_x_cop_ab=0.0f; int16_t flow_vel_y_cop=0; float flow_vel_y_cop_ab=0.0f; uint32_t time_ms_s = 0; float distance_global =0.0f; \/\/E N D \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b  \/\/\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437.\u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f float smoothed_x = 0.0f;   \/\/ \u0421\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e X (\u0441\u043c\/\u0441) float smoothed_y = 0.0f;   \/\/ \u0421\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e Y (\u0441\u043c\/\u0441) float smoothed_distance = 0.0f; \/\/ \u0421\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u0430\u044f \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f (\u043c) float total_velocity = 0.0f; \/\/ \u041e\u0431\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u0437 \u0441\u0433\u043b\u0430\u0436. \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u0441\u043a\u043e\u0440. \u0438 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u0438 (\u0441\u043c\/\u0441) \/\/E N D \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437.\u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f  static float total_path_m = 0.0f;   \/\/ \u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c (\u043c\u0435\u0442\u0440\u044b) float total_path_m_cop = 0.0f; long total_path_m_cop_long =0; \/\/\u0442\u0435\u0441\u0442 static float position_x_m = 0.0f;   \/\/ \u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e X (\u0432 \u043c\u0435\u0442\u0440\u0430\u0445) float position_x_m_cop = 0.0f; long position_x_m_cop_long= 0; static float position_y_m = 0.0f;   \/\/ \u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e Y (\u0432 \u043c\u0435\u0442\u0440\u0430\u0445) float position_y_m_cop = 0.0f; long position_y_m_cop_long= 0; float beta_rad = 0.0f;  \/\/ \u0411\u0443\u0444\u0435\u0440\u044b \u0434\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 #define BUFFER_SIZE 5 \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u0434\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0435\u0449\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u0435\u0435, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 float flow_vel_x_buffer[BUFFER_SIZE] = {0}; \/\/ \u0411\u0443\u0444\u0435\u0440 \u0434\u043b\u044f flow_vel_x float flow_vel_y_buffer[BUFFER_SIZE] = {0}; \/\/ \u0411\u0443\u0444\u0435\u0440 \u0434\u043b\u044f flow_vel_y float distance_buffer[BUFFER_SIZE] = {0};  \/\/ \u0411\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u0438 uint8_t buffer_index = 0; \/\/ \u0418\u043d\u0434\u0435\u043a\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \/\/  E N D \u0411\u0443\u0444\u0435\u0440\u044b \u0434\u043b\u044f \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/code><\/pre>\n<h4>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b MICOLINK_MSG_t msg \u0438 MICOLINK_PAYLOAD_RANGE_SENSOR_t<\/h4>\n<blockquote>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u044f \u0432\u0437\u044f\u043b \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 [ <a href=\"https:\/\/micoair.com\/docs\/decoding-micolink-messages-from-mtf-01\/\" rel=\"noopener noreferrer nofollow\">https:\/\/micoair.com\/docs\/decoding-micolink-messages-from-mtf-01\/<\/a> ]<\/p>\n<\/blockquote>\n<pre><code class=\"objectivec\">#define MICOLINK_MSG_HEAD            0xEF #define MICOLINK_MAX_PAYLOAD_LEN     64 #define MICOLINK_MAX_LEN             MICOLINK_MAX_PAYLOAD_LEN + 7  enum {     MICOLINK_MSG_ID_RANGE_SENSOR = 0x51,     \/\/ Range Sensor }; \/*     Message Structure Definition *\/ typedef struct {     uint8_t head;     uint8_t dev_id;     uint8_t sys_id;     uint8_t msg_id;     uint8_t seq;     uint8_t len;     uint8_t payload[MICOLINK_MAX_PAYLOAD_LEN];     uint8_t checksum;      uint8_t status;     uint8_t payload_cnt; } MICOLINK_MSG_t;  \/\/ Range Sensor typedef struct {     uint32_t  time_ms;    \/\/ System time in ms     uint32_t  distance;    \/\/ distance(mm), 0 Indicates unavailable     uint8_t   strength;            \/\/ signal strength     uint8_t   precision;    \/\/ distance precision     uint8_t   dis_status;    \/\/ distance status     uint8_t  reserved1;            \/\/ reserved     int16_t   flow_vel_x;    \/\/ optical flow velocity in x     int16_t   flow_vel_y;    \/\/ optical flow velocity in y     uint8_t   flow_quality;    \/\/ optical flow quality     uint8_t   flow_status;    \/\/ optical flow status     uint16_t  reserved2;    \/\/ reserved } MICOLINK_PAYLOAD_RANGE_SENSOR_t; <\/code><\/pre>\n<h4>\u041c\u0435\u0442\u043e\u0434 uart_Handler_MTF<\/h4>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0445 \u043e\u0442 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 MTF-02.<\/p>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u0435\u0442\u043e\u0434\u0430<\/strong><br \/><strong>\u2022 <\/strong>\u041f\u0440\u0438\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430<br \/>\u041c\u0435\u0442\u043e\u0434 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f DMA \u2014 \u043f\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u043b\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u043f\u0440\u0438\u0451\u043c\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e, \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c.<\/p>\n<p><strong>\u2022 <\/strong>\u0411\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0434\u0440\u043e\u0432<br \/>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0447\u0435\u0440\u0435\u0434\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0431\u0443\u0444\u0435\u0440\u0430 (uart_rezult_buf1 \u0438 uart_rezult_buf2), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0451\u043c \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0448\u043b\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><strong>\u2022 <\/strong>\u0414\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430<br \/>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e micolink_decode, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442 \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b:<\/p>\n<p>flow_vel_x_cop \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e \u043e\u0441\u0438 X<\/p>\n<p>flow_vel_y_cop \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e \u043e\u0441\u0438 Y<\/p>\n<p>distance_m \u2014 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0434\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438<\/p>\n<p><strong>\u2022 <\/strong>\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<br \/>\u0414\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0448\u0443\u043c\u043e\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0447\u0435\u0440\u0435\u0437 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438 \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 calculate_average. \u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<p><strong>\u2022 <\/strong>\u0418\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432 \u043f\u0443\u0442\u044c<br \/>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (update_position) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u043f\u043e \u043e\u0441\u044f\u043c X \u0438 Y.<br \/>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0449\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u043f\u0443\u0442\u0438 \u0438 \u0443\u0433\u043e\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f (calculateBetaRadians).<\/p>\n<p><strong>\u2022 <\/strong>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<br \/>\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 (sprintf) \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.  <\/p>\n<pre><code class=\"objectivec\">void uart_Handler_MTF(void) { HAL_Delay(1);\/\/\u0447\u0442\u043e\u0431\u044b HAL_GetTick() \u043d\u0435 \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u043d\u043e\u043b\u044c uint32_t ms = HAL_GetTick(); \/\/uint32_t time_sec = ms \/ 1000; char isData=0; char* pData=(char*)uart_rx_buffer_MTF;  if(uartRxFullIRDone){ uartRxFullIRDone = 0;  \/\/ \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 DMA pData=(char*)&amp;uart_rx_buffer_MTF[UART_RX_BUFFER_SIZE\/2]; isData=1; } if(uartRxHalfIRDone){ uartRxHalfIRDone = 0; \/\/ \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 DMA  pData = <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-470040","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/470040","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=470040"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/470040\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=470040"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=470040"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=470040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}