{"id":330743,"date":"2022-03-16T21:00:09","date_gmt":"2022-03-16T21:00:09","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=330743"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=330743","title":{"rendered":"<span>\u041f\u0443\u043b\u044c\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u043c\u0435\u0440\u043e\u0439<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 3D \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Unity\/Unreal\/OpenSceneGraph \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f 3D-\u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u0432\u0438\u0434\u0435\u043e\u0444\u0438\u043b\u044c\u043c\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0443\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043f\u043e \u0444\u043e\u0442\u043e\u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u0438\u0434\u0435\u043e, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u201c\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u201d, \u0442.\u0435. \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c 3dMax\/Maya\/Cinema \u0438 \u0442.\u0434.  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c78\/61a\/b81\/c7861ab819bff53868ef4137720db853.webp\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0438\u0437 Unity 3D \/ \u0422\u0440\u0443\u0431\u043e\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442. \u041a\u041f\u041f \u0421\u041e\u0414.\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0438\u0437 Unity 3D \/ \u0422\u0440\u0443\u0431\u043e\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442. \u041a\u041f\u041f \u0421\u041e\u0414.\" width=\"1920\" height=\"1080\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0438\u0437 Unity 3D \/ \u0422\u0440\u0443\u0431\u043e\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442. \u041a\u041f\u041f \u0421\u041e\u0414.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1c5\/994\/c3c\/1c5994c3c4cf2804b89bbe2995b324b7.webp\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0438\u0437 Unity\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0438\u0437 Unity\" width=\"1920\" height=\"1080\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0438\u0437 Unity<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a64\/562\/73e\/a6456273ed0735f1e2ea37476ef4e447.webp\" alt=\"\u0415\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\" title=\"\u0415\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\" width=\"1920\" height=\"1080\"\/><figcaption>\u0415\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u0440<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e3a\/2c0\/aa1\/e3a2c0aa14b68c189f132c16e42793fb.webp\" alt=\"\u0415\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\" title=\"\u0415\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\" width=\"1920\" height=\"1080\"\/><figcaption>\u0415\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u0440<\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043c\u0435\u0440\u043e\u0439 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \/ \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430-\u043c\u044b\u0448\u044c. \u0414\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u043e\u043b\u0435\u0442\u043e\u0432 \u043a\u0430\u043c\u0435\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e \u043e\u0440\u0431\u0438\u0442\u0435 \u0441 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0438\u043b\u0438 \u043e\u0442\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u0445 \u043a\u0430\u043c\u0435\u0440\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u043b\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c. VR \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\/\u0438\u043b\u0438 \u043f\u0440\u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445 \u043a\u0430\u043c\u0435\u0440\u044b.<\/p>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0438\u0437 3D \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0443\u043b\u044c\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u043c\u0435\u0440\u043e\u0439, \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u0430\u043c\u0435\u0440\u044b, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432 3D.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u044b \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0438\u043c\u0435\u044e\u0449\u0435\u0435\u0441\u044f \u201c\u0432 \u0437\u0430\u043f\u0430\u0441\u0435\u201d, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/822\/d42\/953\/822d42953885d3d8950fcbe0f4f81258.webp\" width=\"1182\" height=\"640\"\/><figcaption><\/figcaption><\/figure>\n<p><strong><em>Arduino Due\u00a0<\/em><\/strong><em>\u2014\u00a0\u043f\u043b\u0430\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u00a0<\/em><strong><em>Atmel SAM3X8E\u00a0ARM Cortex-M3<\/em><\/strong><em>\u00a0(<\/em><a href=\"http:\/\/out.arduino.ru\/?redirect=http%3A%2F%2Fwww.atmel.com%2FImages%2Fdoc11057.pdf&amp;baseU=http%3A%2F%2Farduino.ru%2FHardware%2FArduinoDue\" rel=\"noopener noreferrer nofollow\"><em>\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/em><\/a><em>). \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u043b\u0430\u0442\u0430 Arduino \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0441 ARM \u044f\u0434\u0440\u043e\u043c. \u041d\u0430 \u043d\u0435\u0439 \u0438\u043c\u0435\u0435\u0442\u0441\u044f 54 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0432\u0445\u043e\u0434\/\u0432\u044b\u0445\u043e\u0434\u0430 (\u0438\u0437 \u043d\u0438\u0445 12 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0432\u044b\u0445\u043e\u0434\u044b \u0428\u0418\u041c), 12 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432, 4 UART\u0430 (\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u0430), a \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b 84 \u041c\u0413\u0446, \u0441\u0432\u044f\u0437\u044c \u043f\u043e USB \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 OTG, 2 \u0426\u0410\u041f (\u0446\u0438\u0444\u0440\u043e-\u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f), 2 TWI, \u0440\u0430\u0437\u044a\u0435\u043c \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u00a0\u0440\u0430\u0437\u044a\u0435\u043c SPI, \u0440\u0430\u0437\u044a\u0435\u043c JTAG.<\/em>\u00a0\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (CPU) 84 \u041c\u0413\u0446. 96 \u041a\u0411 \u041e\u0417\u0423. 512 \u041a\u0411 \u0444\u043b\u0435\u0448-\u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 DMA, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e.<\/p>\n<p>\u0414\u0430, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0440, \u043d\u043e \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439.<\/p>\n<p>TFT-\u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043d\u0430 \u0431\u0430\u0437\u0435 ILI9341 \u0441 \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d\u043e\u043c (320*240 65\u043a \u0446\u0432\u0435\u0442\u043e\u0432)<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/74e\/e4a\/89b\/74ee4a89b411f013f9fb560cb216d87a.webp\" width=\"1010\" height=\"1010\"\/><figcaption><\/figcaption><\/figure>\n<p>\u042d\u043d\u043a\u043e\u0434\u0435\u0440 \u0441 \u043a\u043d\u043e\u043f\u043a\u043e\u0439, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b, \u0434\u0432\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u043e\u0432, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 \u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0435\u0439 \u0438 \u0431\u0435\u0437 \u0444\u043a\u0441\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0424\u043e\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043c\u043e\u043d\u0442\u0430\u0436\u0430 \u0432 \u043a\u043e\u0440\u043f\u0443\u0441\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f93\/c06\/e8a\/f93c06e8a78a54ea68a80dc01554b18a.webp\" width=\"1042\" height=\"994\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432 Arduino IDE, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:<\/p>\n<ul>\n<li>\n<p>include \u201cSPI.h\u201d<\/p>\n<\/li>\n<li>\n<p>include \u201cAdafruit_GFX.h\u201d<\/p>\n<\/li>\n<li>\n<p>include \u201cAdafruit_ILI9341.h\u201d<\/p>\n<\/li>\n<li>\n<p>include \u201cJoystick.h\u201d<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u0430 \u043f\u043e\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/42c\/dd6\/cc8\/42cdd6cc879fc82a8e6d204d3b36bced.webp\" width=\"1920\" height=\"1281\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fe2\/174\/117\/fe21741171f752da7a3ebd3497d93e3a.webp\" width=\"1025\" height=\"1536\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b9\/e94\/f07\/3b9e94f07ca265d1b3b91d9d521bd36e.webp\" width=\"1536\" height=\"1025\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u043c\u043e\u043d\u0442\u0430\u0436\u0430 (\u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0435\u0449\u0435 \u043d\u0435 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b)  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2dc\/c34\/93a\/2dcc3493aed780c0a696726b56ef99de.webp\" width=\"569\" height=\"496\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e (\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e)  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/222\/4b3\/e66\/2224b3e6611b5565d4224d3852fb024a.webp\" width=\"618\" height=\"689\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0443 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#include \"SPI.h\" #include \"Adafruit_GFX.h\" #include \"Adafruit_ILI9341.h\" #include \"Joystick.h\" #include &lt;EncButton2.h>    Joystick_ Joystick;  \/* Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,    JOYSTICK_TYPE_MULTI_AXIS, 32, 0,   true, true, false, false, false, false,   true, true, false, false, false); *\/  const int analogInPin1 = A0; const int analogInPin2 = A1; const int analogInPin3 = A2; const int analogInPin4 = A3;  const int analogInPin5 = A4; const int analogInPin6 = A5; const int analogInPin7 = A6;    \/\/ For the Adafruit shield, these are the default. #define TFT_RST 8 #define TFT_DC 9 #define TFT_CS 10 #define TFT_MISO 50 #define TFT_MOSI 51 #define TFT_SCK 52 \/\/ Use hardware SPI (on Uno, #13, #12, #11) and the above for CS\/DC \/\/Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); \/\/ If using the breakout, change pins as desired  Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCK, TFT_RST, TFT_MISO);  EncButton2&lt;EB_ENC> enc(INPUT, 45, 43);        \/\/ \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u043d\u043a\u043e\u0434\u0435\u0440    \/\/ the setup function runs once when you press reset or power the board void setup() {    \/\/Serial.begin(9600);    \/\/ Set Range Values   Joystick.setXAxisRange(-127, 127);   Joystick.setYAxisRange(-127, 127);   Joystick.setZAxisRange(0, 255);   Joystick.setRxAxisRange(255, 0);   Joystick.setRyAxisRange(0, 255);   Joystick.setRzAxisRange(255, 0);   Joystick.setThrottleRange(0, 255);   Joystick.setRudderRange(0, 255);    Joystick.setAcceleratorRange(0, 255);   Joystick.setBrakeRange(0, 255);   Joystick.setSteeringRange(0, 255);           Joystick.begin(false);        pinMode(A0, INPUT_PULLUP);   pinMode(A1, INPUT_PULLUP);   pinMode(A2, INPUT_PULLUP);   pinMode(A3, INPUT_PULLUP);   pinMode(A4, INPUT_PULLUP);   pinMode(A5, INPUT_PULLUP);   pinMode(A6, INPUT_PULLUP);   pinMode(A7, INPUT_PULLUP);    pinMode(1, INPUT_PULLUP);   pinMode(2, INPUT_PULLUP);   pinMode(3, INPUT_PULLUP);   pinMode(4, INPUT_PULLUP);   pinMode(5, INPUT_PULLUP);    \/\/pinMode(13, OUTPUT);   pinMode(LED_BUILTIN, OUTPUT);    pinMode(47, INPUT); \/\/butt0 encoder   pinMode(45, INPUT); \/\/encoder1   pinMode(43, INPUT); \/\/encoder2    pinMode(38, INPUT); \/\/butt1   pinMode(40, INPUT); \/\/butt2     tft.begin();    \/\/ read diagnostics (optional but can help debug problems)   uint8_t x = tft.readcommand8(ILI9341_RDMODE);   \/\/Serial.print(\"Display Power Mode: 0x\"); Serial.println(x, HEX);   x = tft.readcommand8(ILI9341_RDMADCTL);   \/\/Serial.print(\"MADCTL Mode: 0x\"); Serial.println(x, HEX);   x = tft.readcommand8(ILI9341_RDPIXFMT);  \/\/ Serial.print(\"Pixel Format: 0x\"); Serial.println(x, HEX);   x = tft.readcommand8(ILI9341_RDIMGFMT);  \/\/ Serial.print(\"Image Format: 0x\"); Serial.println(x, HEX);   x = tft.readcommand8(ILI9341_RDSELFDIAG);  \/\/ Serial.print(\"Self Diagnostic: 0x\"); Serial.println(x, HEX);     tft.setRotation(0); \/\/0 1 2 3     tft.fillScreen(ILI9341_BLACK);   \/\/unsigned long start = micros();   tft.setCursor(0, 0);   tft.setTextColor(ILI9341_WHITE);    tft.setTextSize(2);   tft.println(\"Lcontent.ru\");   tft.setTextColor(ILI9341_BLUE);    tft.println(\"Joy module v.1.0\");   tft.setTextColor(ILI9341_RED);    tft.println(\"by Maxim Gammer\");    }  int OLD_sensorValue1 = 0;  int encoderValue=0; \/\/ the loop function runs over and over again forever void loop()  {     int sensorValue1 = 0;      int outputValue1 = 0;       int sensorValue2 = 0;      int outputValue2 = 0;      int sensorValue3 = 0;      int outputValue3 = 0;      int sensorValue4 = 0;      int outputValue4 = 0;       int sensorValue5 = 0;      int outputValue5 = 0;      int sensorValue6 = 0;      int outputValue6 = 0;      int sensorValue7 = 0;      int outputValue7 = 0;       sensorValue1 = analogRead(analogInPin1);     sensorValue2 = analogRead(analogInPin2);     sensorValue3 = analogRead(analogInPin3);     sensorValue4 = analogRead(analogInPin4);      sensorValue5 = analogRead(analogInPin5);     sensorValue6 = analogRead(analogInPin6);     sensorValue7 = analogRead(analogInPin7);          \/\/ map it to the range of the analog out:     outputValue1 = map(sensorValue1, 0, 1023, 0, 255);     outputValue2 = map(sensorValue2, 0, 1023, 0, 255);     outputValue3 = map(sensorValue3, 0, 1023, 0, 255);     outputValue4 = map(sensorValue4, 0, 1023, 0, 255);     outputValue5 = map(sensorValue5, 0, 1023, 0, 255);     outputValue6 = map(sensorValue6, 0, 1023, 0, 255);     outputValue7 = map(sensorValue7, 0, 1023, 0, 255);          Joystick.setYAxis(outputValue1 - 128);     Joystick.setXAxis(outputValue2 - 128);     Joystick.setRxAxis(outputValue3);     Joystick.setRyAxis(outputValue4);                    Joystick.setZAxis(outputValue5);     Joystick.setRzAxis(outputValue6);     Joystick.setThrottle(outputValue7);          \/\/Joystick.setRudder(255);     Joystick.setRudder(255);     Joystick.setAccelerator(255);     Joystick.setBrake(255);     Joystick.setSteering(255);          int buttonState0 = digitalRead(47);     Joystick.setButton(0, buttonState0);      int buttonState1 = digitalRead(38);     Joystick.setButton(1, buttonState1);      int buttonState2 = digitalRead(40);     Joystick.setButton(2, buttonState2);            enc.tick();                       \/\/ \u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0434\u0435\u0441\u044c     if (enc.left())      {       encoderValue = encoderValue+45;           }     if (enc.right())      {       encoderValue = encoderValue-45;     }     if (encoderValue&lt;=-45)      {       encoderValue=315;     }     else if (encoderValue>=360)     {       encoderValue=0;     }     int hatSwitch =0;     Joystick.setHatSwitch(hatSwitch, -1);     Joystick.setHatSwitch(hatSwitch, encoderValue); \/\/0 45  90  135 180  225 270 315           Joystick.sendState();           \/\/Serial.print(\"sensor = \");     \/\/Serial.println(sensorValue);     \/*    char TX[20];    \/\/tft.fillRect(0, 0, 40, 10, ILI9341_BLACK); \/\/ textbgcolor is protected in Adafruit_GFX.h     tft.setTextSize(1);    tft.setCursor(0, 0);    tft.setTextColor(ILI9341_BLACK);     sprintf(TX,\"%4d\", OLD_sensorValue1);    tft.println(TX);    OLD_sensorValue1 = sensorValue1;    tft.setCursor(0, 0);    tft.setTextColor(ILI9341_WHITE);     sprintf(TX,\"%4d\", sensorValue1);    tft.println(TX); \/\/\"Hello World!\"          delay(2);    *\/      \/\/digitalWrite(LED_BUILTIN, HIGH);   \/\/ turn the LED on (HIGH is the voltage level)   \/\/delay(1000);                       \/\/ wait for a second   \/\/digitalWrite(LED_BUILTIN, LOW);    \/\/ turn the LED off by making the voltage LOW   \/\/delay(1000);                       \/\/ wait for a second }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/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\/post\/656059\/\"> https:\/\/habr.com\/ru\/post\/656059\/<\/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_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 3D \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 Unity\/Unreal\/OpenSceneGraph \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f 3D-\u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0445 \u0432\u0438\u0434\u0435\u043e\u0444\u0438\u043b\u044c\u043c\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u0432\u044b\u0441\u043e\u043a\u0443\u044e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0443\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043f\u043e \u0444\u043e\u0442\u043e\u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u0438\u0434\u0435\u043e, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u201c\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u201d, \u0442.\u0435. \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c 3dMax\/Maya\/Cinema \u0438 \u0442.\u0434.  <\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0438\u0437 Unity 3D \/ \u0422\u0440\u0443\u0431\u043e\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442. \u041a\u041f\u041f \u0421\u041e\u0414.<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0438\u0437 Unity<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u0415\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u0440<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u0415\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u0440<\/figcaption><\/figure>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043c\u0435\u0440\u043e\u0439 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \/ \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430-\u043c\u044b\u0448\u044c. \u0414\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u043e\u043b\u0435\u0442\u043e\u0432 \u043a\u0430\u043c\u0435\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e \u043e\u0440\u0431\u0438\u0442\u0435 \u0441 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0438\u043b\u0438 \u043e\u0442\u0434\u0430\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u0445 \u043a\u0430\u043c\u0435\u0440\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u043b\u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c. VR \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\/\u0438\u043b\u0438 \u043f\u0440\u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445 \u043a\u0430\u043c\u0435\u0440\u044b.<\/p>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u043f\u044b\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0438\u0434\u0435\u043e\u0440\u044f\u0434\u0430 \u0438\u0437 3D \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0443\u043b\u044c\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u043c\u0435\u0440\u043e\u0439, \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u0430\u043c\u0435\u0440\u044b, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u0432 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0432 3D.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u044b \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0438\u043c\u0435\u044e\u0449\u0435\u0435\u0441\u044f \u201c\u0432 \u0437\u0430\u043f\u0430\u0441\u0435\u201d, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong><em>Arduino Due\u00a0<\/em><\/strong><em>\u2014\u00a0\u043f\u043b\u0430\u0442\u0430 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u00a0<\/em><strong><em>Atmel SAM3X8E\u00a0ARM Cortex-M3<\/em><\/strong><em>\u00a0(<\/em><a href=\"http:\/\/out.arduino.ru\/?redirect=http%3A%2F%2Fwww.atmel.com%2FImages%2Fdoc11057.pdf&amp;baseU=http%3A%2F%2Farduino.ru%2FHardware%2FArduinoDue\" rel=\"noopener noreferrer nofollow\"><em>\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/em><\/a><em>). \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u043b\u0430\u0442\u0430 Arduino \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0441 ARM \u044f\u0434\u0440\u043e\u043c. \u041d\u0430 \u043d\u0435\u0439 \u0438\u043c\u0435\u0435\u0442\u0441\u044f 54 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u0432\u0445\u043e\u0434\/\u0432\u044b\u0445\u043e\u0434\u0430 (\u0438\u0437 \u043d\u0438\u0445 12 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u0432\u044b\u0445\u043e\u0434\u044b \u0428\u0418\u041c), 12 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0445 \u0432\u0445\u043e\u0434\u043e\u0432, 4 UART\u0430 (\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0440\u0442\u0430), a \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0442\u0430\u043a\u0442\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b 84 \u041c\u0413\u0446, \u0441\u0432\u044f\u0437\u044c \u043f\u043e USB \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 OTG, 2 \u0426\u0410\u041f (\u0446\u0438\u0444\u0440\u043e-\u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f), 2 TWI, \u0440\u0430\u0437\u044a\u0435\u043c \u043f\u0438\u0442\u0430\u043d\u0438\u044f, \u00a0\u0440\u0430\u0437\u044a\u0435\u043c SPI, \u0440\u0430\u0437\u044a\u0435\u043c JTAG.<\/em>\u00a0\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (CPU) 84 \u041c\u0413\u0446. 96 \u041a\u0411 \u041e\u0417\u0423. 512 \u041a\u0411 \u0444\u043b\u0435\u0448-\u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 DMA, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e.<\/p>\n<p>\u0414\u0430, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0440, \u043d\u043e \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0439.<\/p>\n<p>TFT-\u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043d\u0430 \u0431\u0430\u0437\u0435 ILI9341 \u0441 \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d\u043e\u043c (320*240 65\u043a \u0446\u0432\u0435\u0442\u043e\u0432)<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u042d\u043d\u043a\u043e\u0434\u0435\u0440 \u0441 \u043a\u043d\u043e\u043f\u043a\u043e\u0439, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u044b, \u0434\u0432\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u043e\u0432, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 \u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0435\u0439 \u0438 \u0431\u0435\u0437 \u0444\u043a\u0441\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0424\u043e\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043c\u043e\u043d\u0442\u0430\u0436\u0430 \u0432 \u043a\u043e\u0440\u043f\u0443\u0441\u0435.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432 Arduino IDE, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:<\/p>\n<ul>\n<li>\n<p>include \u201cSPI.h\u201d<\/p>\n<\/li>\n<li>\n<p>include \u201cAdafruit_GFX.h\u201d<\/p>\n<\/li>\n<li>\n<p>include \u201cAdafruit_ILI9341.h\u201d<\/p>\n<\/li>\n<li>\n<p>include \u201cJoystick.h\u201d<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u0430 \u043f\u043e\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u043b\u0435 \u043c\u043e\u043d\u0442\u0430\u0436\u0430 (\u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0435\u0449\u0435 \u043d\u0435 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b)  <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e (\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e)  <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0443 \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>#include \"SPI.h\" #include \"Adafruit_GFX.h\" #include \"Adafruit_ILI9341.h\" #include \"Joystick.h\" #include &lt;EncButton2.h>    Joystick_ Joystick;  \/* Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,    JOYSTICK_TYPE_MULTI_AXIS, 32, 0,   true, true, false, false, false, false,   true, true, false, false, false); *\/  const int analogInPin1 = A0; const int analogInPin2 = A1; const int analogInPin3 = A2; const int analogInPin4 = A3;  const int analogInPin5 = A4; const int analogInPin6 = A5; const int analogInPin7 = A6;    \/\/ For the Adafruit shield, these are the default. #define TFT_RST 8 #define TFT_DC 9 #define TFT_CS 10 #define TFT_MISO 50 #define TFT_MOSI 51 #define TFT_SCK 52 \/\/ Use hardware SPI (on Uno, #13, #12, #11) and the above for CS\/DC \/\/Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC); \/\/ If using the breakout, change pins as desired  Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCK, TFT_RST, TFT_MISO);  EncButton2&lt;EB_ENC> enc(INPUT, 45, 43);        \/\/ \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u043d\u043a\u043e\u0434\u0435\u0440    \/\/ the setup function runs once when you press reset or power the board void setup() {    \/\/Serial.begin(9600);    \/\/ Set Range Values   Joystick.setXAxisRange(-127, 127);   Joystick.setYAxisRange(-127, 127);   Joystick.setZAxisRange(0, 255);   Joystick.setRxAxisRange(255, 0);   Joystick.setRyAxisRange(0, 255);   Joystick.setRzAxisRange(255, 0);   Joystick.setThrottleRange(0, 255);   Joystick.setRudderRange(0, 255);    Joystick.setAcceleratorRange(0, 255);   Joystick.setBrakeRange(0, 255);   Joystick.setSteeringRange(0, 255);           Joystick.begin(false);        pinMode(A0, INPUT_PULLUP);   pinMode(A1, INPUT_PULLUP);   pinMode(A2, INPUT_PULLUP);   pinMode(A3, INPUT_PULLUP);   pinMode(A4, INPUT_PULLUP);   pinMode(A5, INPUT_PULLUP);   pinMode(A6, INPUT_PULLUP);   pinMode(A7, INPUT_PULLUP);    pinMode(1, INPUT_PULLUP);   pinMode(2, INPUT_PULLUP);   pinMode(3, INPUT_PULLUP);   pinMode(4, INPUT_PULLUP);   pinMode(5, INPUT_PULLUP);    \/\/pinMode(13, OUTPUT);   pinMode(LED_BUILTIN, OUTPUT);    pinMode(47, INPUT); \/\/butt0 encoder   pinMode(45, INPUT); \/\/encoder1   pinMode(43, INPUT); \/\/encoder2    pinMode(38, INPUT); \/\/butt1   pinMode(40, INPUT); \/\/butt2     tft.begin();    \/\/ read diagnostics (optional but can help debug problems)   uint8_t x = tft.readcommand8(ILI9341_RDMODE);   \/\/Serial.print(\"Display Power Mode: 0x\"); Serial.println(x, HEX);   x = tft.readcommand8(ILI9341_RDMADCTL);   \/\/Serial.print(\"MADCTL Mode: 0x\"); Serial.println(x, HEX);   x = tft.readcommand8(ILI9341_RDPIXFMT);  \/\/ Serial.print(\"Pixel Format: 0x\"); Serial.println(x, HEX);   x = tft.readcommand8(ILI9341_RDIMGFMT);  \/\/ Serial.print(\"Image Format: 0x\"); Serial.println(x, HEX);   x = tft.readcommand8(ILI9341_RDSELFDIAG);  \/\/ Serial.print(\"Self Diagnostic: 0x\"); Serial.println(x, HEX);     tft.setRotation(0); \/\/0 1 2 3     tft.fillScreen(ILI9341_BLACK);   \/\/unsigned long start = micros();   tft.setCursor(0, 0);   tft.setTextColor(ILI9341_WHITE);    tft.setTextSize(2);   tft.println(\"Lcontent.ru\");   tft.setTextColor(ILI9341_BLUE);    tft.println(\"Joy module v.1.0\");   tft.setTextColor(ILI9341_RED);    tft.println(\"by Maxim Gammer\");    }  int OLD_sensorValue1 = 0;  int encoderValue=0; \/\/ the loop function runs over and over again forever void loop()  {     int sensorValue1 = 0;      int outputValue1 = 0;       int sensorValue2 = 0;      int outputValue2 = 0;      int sensorValue3 = 0;      int outputValue3 = 0;      int sensorValue4 = 0;      int outputValue4 = 0;       int sensorValue5 = 0;      int outputValue5 = 0;      int sensorValue6 = 0;      int outputValue6 = 0;      int sensorValue7 = 0;      int outputValue7 = 0;       sensorValue1 = analogRead(analogInPin1);     sensorValue2 = analogRead(analogInPin2);     sensorValue3 = analogRead(analogInPin3);     sensorValue4 = analogRead(analogInPin4);      sensorValue5 = analogRead(analogInPin5);     sensorValue6 = analogRead(analogInPin6);     sensorValue7 = analogRead(analogInPin7);          \/\/ map it to the range of the analog out:     outputValue1 = map(sensorValue1, 0, 1023, 0, 255);     outputValue2 = map(sensorValue2, 0, 1023, 0, 255);     outputValue3 = map(sensorValue3, 0, 1023, 0, 255);     outputValue4 = map(sensorValue4, 0, 1023, 0, 255);     outputValue5 = map(sensorValue5, 0, 1023, 0, 255);     outputValue6 = map(sensorValue6, 0, 1023, 0, 255);     outputValue7 = map(sensorValue7, 0, 1023, 0, 255);          Joystick.setYAxis(outputValue1 - 128);     Joystick.setXAxis(outputValue2 - 128);     Joystick.setRxAxis(outputValue3);     Joystick.setRyAxis(outputValue4);                    Joystick.setZAxis(outputValue5);     Joystick.setRzAxis(outputValue6);     Joystick.setThrottle(outputValue7);          \/\/Joystick.setRudder(255);     Joystick.setRudder(255);     Joystick.setAccelerator(255);     Joystick.setBrake(255);     Joystick.setSteering(255);          int buttonState0 = digitalRead(47);     Joystick.setButton(0, buttonState0);      int buttonState1 = digitalRead(38);     Joystick.setButton(1, buttonState1);      int buttonState2 = digitalRead(40);     Joystick.setButton(2, buttonState2);            enc.tick();                       \/\/ \u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0434\u0435\u0441\u044c     if (enc.left())      {       encoderValue = encoderValue+45;           }     if (enc.right())      {       encoderValue = encoderValue-45;     }     if (encoderValue&lt;=-45)      {       encoderValue=315;     }     else if (encoderValue>=360)     {       encoderValue=0;     }     int hatSwitch =0;     Joystick.setHatSwitch(hatSwitch, -1);     Joystick.setHatSwitch(hatSwitch, encoderValue); \/\/0 45  90  135 180  225 270 315           Joystick.sendState();           \/\/Serial.print(\"sensor = \");     \/\/Serial.println(sensorValue);     \/*    char TX[20];    \/\/tft.fillRect(0, 0, 40, 10, ILI9341_BLACK); \/\/ textbgcolor is protected in Adafruit_GFX.h     tft.setTextSize(1);    tft.setCursor(0, 0);    tft.setTextColor(ILI9341_BLACK);     sprintf(TX,\"%4d\", OLD_sensorValue1);    tft.println(TX);    OLD_sensorValue1 = sensorValue1;    tft.setCursor(0, 0);    tft.setTextColor(ILI9341_WHITE);     sprintf(TX,\"%4d\", sensorValue1);    tft.println(TX); \/\/\"Hello World!\"          delay(2);    *\/      \/\/digitalWrite(LED_BUILTIN, HIGH);   \/\/ turn the LED on (HIGH is the voltage level)   \/\/delay(1000);                       \/\/ wait for a second   \/\/digitalWrite(LED_BUILTIN, LOW);    \/\/ turn the LED off by making the voltage LOW   \/\/delay(1000);                       \/\/ wait for a second }<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/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\/post\/656059\/\"> https:\/\/habr.com\/ru\/post\/656059\/<\/a><br \/><\/br><\/br><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-330743","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/330743","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=330743"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/330743\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=330743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=330743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=330743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}