<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://wikihandbk.com/ruwiki/index.php?action=history&amp;feed=atom&amp;title=Arduino%3A%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%2FGenuino101CurieIMUOrientationVisualiser</id>
	<title>Arduino:Примеры/Genuino101CurieIMUOrientationVisualiser - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://wikihandbk.com/ruwiki/index.php?action=history&amp;feed=atom&amp;title=Arduino%3A%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%2FGenuino101CurieIMUOrientationVisualiser"/>
	<link rel="alternate" type="text/html" href="http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/Genuino101CurieIMUOrientationVisualiser&amp;action=history"/>
	<updated>2026-04-07T10:41:57Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/Genuino101CurieIMUOrientationVisualiser&amp;diff=8495930&amp;oldid=prev</id>
		<title>EducationBot в 08:35, 8 июля 2023</title>
		<link rel="alternate" type="text/html" href="http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/Genuino101CurieIMUOrientationVisualiser&amp;diff=8495930&amp;oldid=prev"/>
		<updated>2023-07-08T08:35:18Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 12:35, 8 июля 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l383&quot;&gt;Строка 383:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 383:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;references /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;references /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Навигационная таблица/Портал/Arduino}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Пример]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Пример]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Примеры]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Примеры]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Пример программирования Arduino]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Пример программирования Arduino]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Примеры программирования Arduino]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Примеры программирования Arduino]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key wikihandbkcom:diff::1.12:old-7673405:rev-8495930 --&gt;
&lt;/table&gt;</summary>
		<author><name>EducationBot</name></author>
	</entry>
	<entry>
		<id>http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/Genuino101CurieIMUOrientationVisualiser&amp;diff=7673405&amp;oldid=prev</id>
		<title>EducationBot в 14:19, 14 мая 2023</title>
		<link rel="alternate" type="text/html" href="http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/Genuino101CurieIMUOrientationVisualiser&amp;diff=7673405&amp;oldid=prev"/>
		<updated>2023-05-14T14:19:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 18:19, 14 мая 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l44&quot;&gt;Строка 44:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 44:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Сначала давайте создадим экземпляр '''класса Madgwick''', чтобы получить доступ к его функциям. Даем ему название '''filter''':&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Сначала давайте создадим экземпляр '''класса Madgwick''', чтобы получить доступ к его функциям. Даем ему название '''filter''':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; enclose=&quot;div&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Madgwick filter;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Madgwick filter;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l50&quot;&gt;Строка 50:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 50:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Теперь считываем данные от гироскопа и акселерометра при помощи функции [[Arduino:Библиотеки/CurieIMU|библиотеки Curie IMU]]:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Теперь считываем данные от гироскопа и акселерометра при помощи функции [[Arduino:Библиотеки/CurieIMU|библиотеки Curie IMU]]:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; enclose=&quot;div&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;CurieIMU.readMotionSensor(ax, ay, az, gx, gy, gz);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;CurieIMU.readMotionSensor(ax, ay, az, gx, gy, gz);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l56&quot;&gt;Строка 56:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 56:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Теперь используем функцию '''updateIMU()''' из '''библиотеки Madgwick''':&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Теперь используем функцию '''updateIMU()''' из '''библиотеки Madgwick''':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; enclose=&quot;div&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;filter.updateIMU(gx / factor, gy / factor, gz / factor, ax, ay, az);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;filter.updateIMU(gx / factor, gy / factor, gz / factor, ax, ay, az);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l68&quot;&gt;Строка 68:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 68:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Теперь о том, как будет происходить последовательная коммуникация. Сначала проверяем, не прислал ли скетч '''Processing''' значение '''«s»''' – он отправляет его в конце каждого цикла. Это нужно для того, чтобы скетч '''Arduino''' не отправлял данные слишком часто, иначе скетч '''Processing''' просто не успеет их обработать, вследствие чего визуализация будет сильно запаздывать. Если значение '''«s»''' получено, скетч '''Arduino''' отправляет данные через последовательный порт, разделяя их запятой, а в конце ставя символ новой строки – чтобы скетчу '''Processing''' было проще их обрабатывать. Весь этот код полностью смотрите ниже:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Теперь о том, как будет происходить последовательная коммуникация. Сначала проверяем, не прислал ли скетч '''Processing''' значение '''«s»''' – он отправляет его в конце каждого цикла. Это нужно для того, чтобы скетч '''Arduino''' не отправлял данные слишком часто, иначе скетч '''Processing''' просто не успеет их обработать, вследствие чего визуализация будет сильно запаздывать. Если значение '''«s»''' получено, скетч '''Arduino''' отправляет данные через последовательный порт, разделяя их запятой, а в конце ставя символ новой строки – чтобы скетчу '''Processing''' было проще их обрабатывать. Весь этот код полностью смотрите ниже:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; enclose=&quot;div&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;if (Serial.available() &amp;gt; 0) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;if (Serial.available() &amp;gt; 0) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     int val = Serial.read();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     int val = Serial.read();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l92&quot;&gt;Строка 92:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 92:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Теперь надо сделать так, чтобы скетч '''Processing''' считывал данные с того же последовательного порта, по которому их передает скетч '''Arduino'''. Это указывается во втором аргументе переменной '''myPort''', находящейся в блоке [[Arduino:Справочник языка Arduino/setup()|setup()]]:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Теперь надо сделать так, чтобы скетч '''Processing''' считывал данные с того же последовательного порта, по которому их передает скетч '''Arduino'''. Это указывается во втором аргументе переменной '''myPort''', находящейся в блоке [[Arduino:Справочник языка Arduino/setup()|setup()]]:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; enclose=&quot;div&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;myPort = new Serial(this, Serial.list()[0], 9600);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;myPort = new Serial(this, Serial.list()[0], 9600);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l98&quot;&gt;Строка 98:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 98:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нужный порт можно найти при помощи [https://processing.org/reference/libraries/serial/Serial_list_.html функции list()], принадлежащей [[Arduino:Справочник языка Arduino/Библиотеки/Serial|классу Serial]]. Число в квадратных скобочках – это номер последовательного порта (это может быть '''«0»''', '''«1»''', '''«2»''' и т.д.). По умолчанию скетч будет работать, если на вашей машине активен лишь один '''COM'''-порт. Если же их несколько, то порт, к которому подключена плата, можно указать напрямую (в формате '''«COMx»''') – это тот же самый порт, который используется скетчем '''Arduino'''. Но в таком случае вот эту строчку...&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Нужный порт можно найти при помощи [https://processing.org/reference/libraries/serial/Serial_list_.html функции list()], принадлежащей [[Arduino:Справочник языка Arduino/Библиотеки/Serial|классу Serial]]. Число в квадратных скобочках – это номер последовательного порта (это может быть '''«0»''', '''«1»''', '''«2»''' и т.д.). По умолчанию скетч будет работать, если на вашей машине активен лишь один '''COM'''-порт. Если же их несколько, то порт, к которому подключена плата, можно указать напрямую (в формате '''«COMx»''') – это тот же самый порт, который используется скетчем '''Arduino'''. Но в таком случае вот эту строчку...&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; enclose=&quot;div&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;myPort = new Serial(this, Serial.list()[0], 9600);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;myPort = new Serial(this, Serial.list()[0], 9600);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l104&quot;&gt;Строка 104:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 104:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;...нужно будет закомментировать, а вот эту...&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;...нужно будет закомментировать, а вот эту...&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; enclose=&quot;div&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;myPort = new Serial(this, &amp;quot;COM5&amp;quot;, 9600);&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;myPort = new Serial(this, &amp;quot;COM5&amp;quot;, 9600);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l114&quot;&gt;Строка 114:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 114:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Далее пишем функцию '''serialEvent()''', с помощью которой принимаем и обрабатываем данные:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Далее пишем функцию '''serialEvent()''', с помощью которой принимаем и обрабатываем данные:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; enclose=&quot;div&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;void serialEvent()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;void serialEvent()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l135&quot;&gt;Строка 135:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 135:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Скетч для Arduino===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Скетч для Arduino===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; enclose=&quot;div&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/*&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;/*&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   ===============================================&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   ===============================================&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l292&quot;&gt;Строка 292:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 292:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Скетч для Processing===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Скетч для Processing===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot; enclose=&quot;div&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import processing.serial.*;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;import processing.serial.*;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Serial myPort;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Serial myPort;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>EducationBot</name></author>
	</entry>
	<entry>
		<id>http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/Genuino101CurieIMUOrientationVisualiser&amp;diff=21270&amp;oldid=prev</id>
		<title>Myagkij: Замена текста — «&lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&quot;&gt;» на «&lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&quot; enclose=&quot;div&quot;&gt;»</title>
		<link rel="alternate" type="text/html" href="http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/Genuino101CurieIMUOrientationVisualiser&amp;diff=21270&amp;oldid=prev"/>
		<updated>2016-12-14T03:53:09Z</updated>

		<summary type="html">&lt;p&gt;Замена текста — «&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot;&amp;gt;» на «&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Arduino панель перехода}}&lt;br /&gt;
{{Перевод от Сubewriter}}&lt;br /&gt;
{{Myagkij-редактор}}&lt;br /&gt;
&lt;br /&gt;
=3D-визуализатор положения платы в пространстве&amp;lt;ref&amp;gt;[https://www.arduino.cc/en/Tutorial/Genuino101CurieIMUOrientationVisualiser Arduino.cc - Genuino101CurieIMUOrientationVisualiser]&amp;lt;/ref&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
Этот пример демонстрирует, как считывать значения для '''X''', '''Y''' и '''Z''' с [http://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BMI160-DS000-07.pdf 6-осевого IMU], встроенного в плату '''Arduino/Genuino 101'''. '''IMU''' (от '''«inertial measurement unit»''') – это инерционное измерительное устройство, задачей которого является определение положения платы в пространстве. Оно состоит из акселерометра, определяющего ускорение свободного падения, и гироскопа, определяющего угловую скорость. В этом примере используется фильтр Мэджвика – с его помощью рассчитываются четыре кватерниона для шести осей '''IMU''', после чего эти кватернионы используются для расчета углов Эйлера (крена, тангажа и рыскания), а они, в свою очередь, передаются в Processing. Там они используются для 3D-визуализации положения платы в пространстве – все действия (наклоны, вращение и т.д.), совершаемые с платой, будут повторяться '''3D'''-объектом, нарисованным в окне '''Processing'''.&lt;br /&gt;
&lt;br /&gt;
==Необходимое оборудование==&lt;br /&gt;
&lt;br /&gt;
* Плата '''Arduino/Genuino''' &lt;br /&gt;
&lt;br /&gt;
[[Arduino:Библиотеки/CurieIMU|Библиотека Curie IMU]] использует '''IMU''' (акселерометр + гироскоп), встроенный в '''Arduino/Genuino 101'''.&lt;br /&gt;
&lt;br /&gt;
==Инструкции==&lt;br /&gt;
&lt;br /&gt;
# Установите '''IDE Arduino''' в соответствии с инструкциями в [[Arduino:Знакомство_с_Arduino/Знакомство_с_Arduino/Genuino_101|этой статье]].&lt;br /&gt;
# Подключите плату '''Arduino/Genuino 101''' с компьютеру.&lt;br /&gt;
# Запустите '''IDE Arduino''', а затем кликните на '''Инструменты &amp;gt; Плата (Tools &amp;gt; Board)''' и выберите '''Arduino/Genuino 101'''.&lt;br /&gt;
# Зайдите в '''«Менеджер библиотек»''' и установите там библиотеку '''Madgwick'''. Чтобы сделать это, откройте '''IDE Arduino''' и кликните на '''Скетч &amp;gt; Подключить библиотеку &amp;gt; Управлять библиотеками (Sketch &amp;gt; Include Library &amp;gt; Manage Libraries)'''. В открывшемся окне нужно найти библиотеку '''Madgwick''' и там же ее установить. Более подробно об установке и импорте библиотек читайте в [[Arduino:Знакомство_с_Arduino/Установка_дополнительных_библиотек|этой статье]].&lt;br /&gt;
# Загрузите и установите [https://processing.org/download IDE Processing], а затем создайте файл с '''Processing'''-скетчем, который выложен ниже, под '''Arduino'''-скетчем.&lt;br /&gt;
# Поменяйте последовательный порт на тот, который использует ваша '''Arduino 101''' (см. раздел '''«Код для Processing»''' ниже)&lt;br /&gt;
# Загрузите скетч в '''Arduino 101''' и убедитесь, что плата лежит ровно и неподвижно – это нужно для правильной калибровки.&lt;br /&gt;
# Через несколько секунд запустите '''Processing'''-скетч, а затем как-нибудь поменяйте положение платы – соответствующим образом должно поменяться и положение '''3D'''-объекта в окне '''Processing'''.&lt;br /&gt;
&lt;br /&gt;
==Цепь==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Genuino101fzz.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
==Как это работает==&lt;br /&gt;
&lt;br /&gt;
'''Фильтр Мэджвика''' – это '''ПО''' с открытым кодом, и то, как он работает, можно посмотреть, например, [https://www.youtube.com/watch?v=BXsGWoOMtmU здесь]. Он был разработан Себастьяном Мэджвиком во время работы над получением докторской степени и создавался с прицелом на низкие требования к вычислительным ресурсам и эффективную работу даже на малых скоростях передачи данных. '''Фильтр Мэджвика''' принимает необработанные данные от гироскопа и акселерометра, а затем использует их для вычисления четырех кватернионов. '''Кватернионы''' – это 4-мерные числа, содержащие значения для '''X''', '''Y''', и '''Z''' (они обозначают ось, вокруг которой происходит вращение), а также значение ω (оно обозначает вращение, которое происходит вокруг этой оси). Эти кватернионы можно использовать для расчета углов Эйлера – трех углов, используемых для описания положения твердого тела в пространстве касаемо осей '''X''', '''Y''' и '''Z''' (этот концепт был представлен '''Леонардом Эйлером в 1700 году'''). В статье '''Мэджвика''' в формулах '''7''', '''8''' и '''9''' с помощью углов '''Эйлера''' рассчитываются крен, тангаж и рыскание (соответствующие функции включены в '''библиотеку Мэджвика''').&lt;br /&gt;
&lt;br /&gt;
Поскольку в плату '''Arduino/Genuino 101''' встроен '''IMU''', мы можем определить ее положение в пространстве, а затем повторить эти действия через '''3D'''-визуализацию в '''IDE Processing'''. Это выполняется как раз при помощи крена, тангажа и рыскания, рассчитанных при помощи '''фильтра Мэджвика'''. Эти данные через последовательный порт передаются в скетч '''Processing''', где становятся аргументами для функций [https://processing.org/reference/rotateX_.html rotateX()], [https://processing.org/reference/rotateY_.html rotateY()] и [https://processing.org/reference/rotateZ_.html rotateZ()] (в радианах), а они, в свою очередь, запускают вращение объекта в соответствии со значениями, указанными в этих аргументах.&lt;br /&gt;
&lt;br /&gt;
==Скетч для Arduino==&lt;br /&gt;
&lt;br /&gt;
Чтобы получить данные от акселерометра и гироскопа, скетч '''Arduino''' использует функции из [[Arduino:Библиотеки/CurieIMU|библиотеки Curie IMU]].&lt;br /&gt;
&lt;br /&gt;
Поставленная задача (т.е. '''3D'''-визуализация платы в '''Processing''') требует от скетча '''Arduino''' двух вещей. Первая – он должен при помощи данных от '''IMU''' и алгоритма Мэджвика рассчитать крен, тангаж и рыскание. Вторая – он должен запустить последовательную коммуникацию, чтобы передать эти значения скетчу '''Processing'''.&lt;br /&gt;
&lt;br /&gt;
В блоке [[Arduino:Справочник языка Arduino/setup()|setup()]] имеет место процесс калибровки, но его, если хотите, можно отключить. Для этого в переменной '''calibrateOffsets''' нужно вместо '''«1»''' поставить '''«0»'''. Таким образом, если в скетче будет выполнено условие '''if (calibrateOffsets == 1)''', это запустит процесс калибровки: система определит начальные значения для каждой оси, а затем рассчитает для них компенсационные значения. Имейте в виду, что во время калибровки плата должна лежать горизонтально и максимально ровно, как показано в пункте '''5.2''' [http://www.mouser.com/ds/2/783/BST-BMI160-DS000-07-786474.pdf даташита BMI160].&lt;br /&gt;
&lt;br /&gt;
Сначала давайте создадим экземпляр '''класса Madgwick''', чтобы получить доступ к его функциям. Даем ему название '''filter''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
Madgwick filter;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь считываем данные от гироскопа и акселерометра при помощи функции [[Arduino:Библиотеки/CurieIMU|библиотеки Curie IMU]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
CurieIMU.readMotionSensor(ax, ay, az, gx, gy, gz);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь используем функцию '''updateIMU()''' из '''библиотеки Madgwick''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
filter.updateIMU(gx / factor, gy / factor, gz / factor, ax, ay, az);&lt;br /&gt;
&lt;br /&gt;
yaw = filter.getYaw();&lt;br /&gt;
roll = filter.getRoll();&lt;br /&gt;
pitch = filter.getPitch();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как видите, значения от гироскопа уменьшаются при помощи делителя '''factor''', чтобы подогнать их под числовой диапазон, более подходящий для '''фильтра Мэджвика'''. Если подгонки не делать, значения останутся очень большими, вследствие чего визуализатор станет гиперчувствительным – виртуальный '''3D'''-объект начнет сильно вращаться даже при малейших изменениях в положении платы. В скетче значением для делителя '''factor''' указано '''«800»''', но оно лишь приблизительное, поэтому с ним лучше поэкспериментировать. В частности, если вы увеличиваете скорость передачи данных, то и значение в '''factor''' тоже нужно будет увеличить.&lt;br /&gt;
&lt;br /&gt;
Теперь о том, как будет происходить последовательная коммуникация. Сначала проверяем, не прислал ли скетч '''Processing''' значение '''«s»''' – он отправляет его в конце каждого цикла. Это нужно для того, чтобы скетч '''Arduino''' не отправлял данные слишком часто, иначе скетч '''Processing''' просто не успеет их обработать, вследствие чего визуализация будет сильно запаздывать. Если значение '''«s»''' получено, скетч '''Arduino''' отправляет данные через последовательный порт, разделяя их запятой, а в конце ставя символ новой строки – чтобы скетчу '''Processing''' было проще их обрабатывать. Весь этот код полностью смотрите ниже:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
if (Serial.available() &amp;gt; 0) {&lt;br /&gt;
    int val = Serial.read();&lt;br /&gt;
    if(val == 's')&lt;br /&gt;
    {&lt;br /&gt;
      Serial.print(yaw);&lt;br /&gt;
      Serial.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
      Serial.print(pitch);&lt;br /&gt;
      Serial.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
      Serial.println(roll);&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что в скетче '''Arduino''' есть также вывод значений '''ax''', '''ay''', '''az''', '''gx''', '''gy''' и '''gz''' на монитор порта. Но этот блок закомментирован, потому что его следует использовать лишь в отладочных целях.&lt;br /&gt;
&lt;br /&gt;
==Скетч для Processing==&lt;br /&gt;
&lt;br /&gt;
Самое первое – вам нужно, если вы этого еще не сделали, загрузить последнюю версию '''Processing''' [https://processing.org отсюда]. '''Processing''' – это язык, позволяющий рисовать динамические изображения, и в нем, как и в языке '''Arduino''', используется структура скетча, состоящая из блоков [[Arduino:Справочник языка Arduino/setup()|setup()]] и [[Arduino:Справочник языка Arduino/loop()|loop().]] Более подробно о языке '''Processing''' читайте на [https://processing.org/tutorials/gettingstarted этой странице].&lt;br /&gt;
&lt;br /&gt;
'''Скетч Processing''' принимает данные, присланные через последовательный порт, затем обрабатывает их, а получившийся результат заносит в переменные '''yaw''', '''pitch''' и '''roll'''. Затем значения в этих переменных становятся аргументами в функциях '''rotateX()''', '''rotateY()''' и '''rotateZ()''', которые, в свою очередь, используются для отрисовки новой позиции объекта. В завершение скетч '''Processing''' отправляет скетчу '''Arduino''' значение '''«s»''', тем самым сообщая, что он готов к получению новых данных. Все эти действия совершаются при каждом проходе через блок [[Arduino:Справочник языка Arduino/loop()|loop()]].&lt;br /&gt;
&lt;br /&gt;
Теперь надо сделать так, чтобы скетч '''Processing''' считывал данные с того же последовательного порта, по которому их передает скетч '''Arduino'''. Это указывается во втором аргументе переменной '''myPort''', находящейся в блоке [[Arduino:Справочник языка Arduino/setup()|setup()]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
myPort = new Serial(this, Serial.list()[0], 9600);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нужный порт можно найти при помощи [https://processing.org/reference/libraries/serial/Serial_list_.html функции list()], принадлежащей [[Arduino:Справочник языка Arduino/Библиотеки/Serial|классу Serial]]. Число в квадратных скобочках – это номер последовательного порта (это может быть '''«0»''', '''«1»''', '''«2»''' и т.д.). По умолчанию скетч будет работать, если на вашей машине активен лишь один '''COM'''-порт. Если же их несколько, то порт, к которому подключена плата, можно указать напрямую (в формате '''«COMx»''') – это тот же самый порт, который используется скетчем '''Arduino'''. Но в таком случае вот эту строчку...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
myPort = new Serial(this, Serial.list()[0], 9600);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...нужно будет закомментировать, а вот эту...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
myPort = new Serial(this, &amp;quot;COM5&amp;quot;, 9600);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...наоборот, раскомментировать. При этом значение '''COM5''' надо будет поменять на порт, который используется в вашем проекте.&lt;br /&gt;
&lt;br /&gt;
Если сомневаетесь, можно создать отдельный скетч и с его помощью [https://processing.org/reference/libraries/serial/Serial_list_.html вывести список всех доступных последовательных портов].&lt;br /&gt;
&lt;br /&gt;
Далее пишем функцию '''serialEvent()''', с помощью которой принимаем и обрабатываем данные:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
void serialEvent()&lt;br /&gt;
{&lt;br /&gt;
  message = myPort.readStringUntil(13);&lt;br /&gt;
  if (message != null) {&lt;br /&gt;
    ypr = split(message, &amp;quot;,&amp;quot;);&lt;br /&gt;
    yaw = float(ypr[0]);&lt;br /&gt;
    pitch = float(ypr[1]);&lt;br /&gt;
    roll = float(ypr[2]);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Она будет считывать данные от скетча '''Arduino''', пока не получит '''13'''-ый '''ASCII'''-символ (т.е. символ новой строки), а затем при помощи функции '''split()''' отделит друг от друга значения, разделенные запятой. Мы знаем, что эти данные передаются от '''Arduino''' в порядке '''yaw-pitch-roll''' (т.е. сначала крен, потом тангаж, а потом рыскание), поэтому записываем их в трехсоставной массив строк '''ypr[]''', а затем в переменные '''yaw, pitch и roll''', тем самым конвертируя их в числа с плавающей точкой.&lt;br /&gt;
&lt;br /&gt;
Полные версии скетчей для '''Arduino''' и '''Processing''' смотрите ниже.&lt;br /&gt;
&lt;br /&gt;
==Код==&lt;br /&gt;
&lt;br /&gt;
===Скетч для Arduino===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  ===============================================&lt;br /&gt;
  Скетч-пример для библиотеки Curie IMU, предназначенной для &lt;br /&gt;
  устройств Intel Curie. Все права защищены и принадлежат&lt;br /&gt;
  Intel Corporation (2015). &lt;br /&gt;
&lt;br /&gt;
  Основан на демонстрационном Arduino-скетче Джеффа Роуберга &lt;br /&gt;
  (Jeff Rowberg) для библиотеки I2Cdev и устройства MPU6050: &lt;br /&gt;
  https://github.com/jrowberg/i2cdevlib&lt;br /&gt;
&lt;br /&gt;
  ===============================================&lt;br /&gt;
  Код библиотеки I2Cdev размещен в соответствии с лицензией MIT. &lt;br /&gt;
  Права принадлежат Джеффу Роубергу. &lt;br /&gt;
&lt;br /&gt;
  Настоящим разрешается любому лицу, владеющему копией этой программы&lt;br /&gt;
  и сопутствующих документационных файлов (далее – «ПО»), а также тем,&lt;br /&gt;
  кому это ПО поставляется, обращаться с этим ПО без ограничений,&lt;br /&gt;
  включая права на использование, копирование, модификацию, слияние, &lt;br /&gt;
  публикацию, распространение, сублицензирование и/или продажу копий &lt;br /&gt;
  ПО, но при соблюдении следующих условий:&lt;br /&gt;
  &lt;br /&gt;
  Запись об авторском праве, написанная выше, а также запись о&lt;br /&gt;
  разрешениях, написанная ниже, должна быть включена во все копии&lt;br /&gt;
  или существенные части этого ПО.&lt;br /&gt;
&lt;br /&gt;
  ДАННОЕ ПО ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗО ВСЯКИХ ГАРАНТИЙ, ЯВНЫХ &lt;br /&gt;
  ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ НА КОММЕРЧЕСКОЕ КАЧЕСТВО,&lt;br /&gt;
  ПРИГОДНОСТЬ ПРИМЕНЕНИЯ ДЛЯ КОНКРЕТНЫХ ЦЕЛЕЙ И НЕНАРУШЕНИЕ ЧЬИХ-ЛИБО&lt;br /&gt;
  ПРАВ. НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ&lt;br /&gt;
  НЕСУТ ОТВЕТСВЕННОСТИ ЗА ЛЮБЫЕ ЖАЛОБЫ, УЩЕРБ И ПРОЧИЕ ПРЕТЕНЗИИ,&lt;br /&gt;
  БУДЬ ТО ИСК ПО КОНТРАКТУ, ПРАВОНАРУШЕНИЮ И Т.Д., ВОЗНИКШИЙ ИЗ ИЛИ &lt;br /&gt;
  В СВЯЗИ С ПО, ИСПОЛЬЗОВАНИЯ ПО ИЛИ ПРОЧИХ ДЕЙСТВИЙ С ПО. &lt;br /&gt;
&lt;br /&gt;
  ===============================================&lt;br /&gt;
&lt;br /&gt;
  3D-визуализатор положение платы в пространстве для Arduino 101&lt;br /&gt;
&lt;br /&gt;
  Необходимое оборудование:&lt;br /&gt;
  * Arduino/Genuino 101&lt;br /&gt;
&lt;br /&gt;
  Модифицирован в ноябре 2015 года &lt;br /&gt;
  Хеленой Бисби (Helena Bisby) &amp;lt;support@arduino.cc&amp;gt;&lt;br /&gt;
  Этот скетч-пример находится в публичном доступе. &lt;br /&gt;
  http://arduino.cc/en/Tutorial/Genuino101CurieIMUOrientationVisualiser&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;CurieIMU.h&amp;gt;&lt;br /&gt;
#include &amp;lt;MadgwickAHRS.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Madgwick filter; // инициализируем объект Madgwick&lt;br /&gt;
int ax, ay, az;&lt;br /&gt;
int gx, gy, gz;&lt;br /&gt;
float yaw;&lt;br /&gt;
float pitch;&lt;br /&gt;
float roll;&lt;br /&gt;
int factor = 800; // на это значение будут поделены данные от&lt;br /&gt;
                  // гироскопа (нужно для контроля чувствительности);&lt;br /&gt;
                  // обратите внимание, что если вы повышаете скорость&lt;br /&gt;
                  // передачи данных, то значение в этой переменной&lt;br /&gt;
                  // тоже нужно увеличить&lt;br /&gt;
&lt;br /&gt;
int calibrateOffsets = 1; // здесь устанавливается, будет ли &lt;br /&gt;
                          // запущена калибровка или нет &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // инициализируем последовательную коммуникацию:&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  // инициализируем IMU:&lt;br /&gt;
  CurieIMU.begin();&lt;br /&gt;
  &lt;br /&gt;
  if (calibrateOffsets == 1) {&lt;br /&gt;
    // код для калибровки смещения у акселерометра/гироскопа:&lt;br /&gt;
    Serial.println(&amp;quot;Internal sensor offsets BEFORE calibration...&amp;quot;);  //  &amp;quot;Смещение ПЕРЕД калибровкой...&amp;quot;   &lt;br /&gt;
    Serial.print(CurieIMU.getAccelerometerOffset(X_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.print(CurieIMU.getAccelerometerOffset(Y_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.print(CurieIMU.getAccelerometerOffset(Z_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.print(CurieIMU.getGyroOffset(X_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.print(CurieIMU.getGyroOffset(Y_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.print(CurieIMU.getGyroOffset(Z_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // используйте эти функции, если хотите задать компенсационные&lt;br /&gt;
    // значения вручную; если хотите, чтобы эти значения выставились&lt;br /&gt;
    // автоматически, используйте функцию autoCalibrate...()&lt;br /&gt;
    //    CurieIMU.setGyroOffset(X_AXIS, 220);&lt;br /&gt;
    //    CurieIMU.setGyroOffset(Y_AXIS, 76);&lt;br /&gt;
    //    CurieIMU.setGyroOffset(Z_AXIS, -85);&lt;br /&gt;
    //    CurieIMU.setAccelerometerOffset(X_AXIS, -76);&lt;br /&gt;
    //    CurieIMU.setAccelerometerOffset(Y_AXIS, -235);&lt;br /&gt;
    //    CurieIMU.setAccelerometerOffset(Z_AXIS, 168);&lt;br /&gt;
&lt;br /&gt;
    // чтобы калибровка прошла правильно, IMU-устройство&lt;br /&gt;
    // должно неподвижно лежать в горизонтальном положении: &lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;Starting Gyroscope calibration...&amp;quot;);  //  &amp;quot;Запускаем калибровку гироскопа...&amp;quot;   &lt;br /&gt;
    CurieIMU.autoCalibrateGyroOffset();&lt;br /&gt;
    Serial.println(&amp;quot; Done&amp;quot;);  //  &amp;quot; Готово&amp;quot;   &lt;br /&gt;
    Serial.print(&amp;quot;Starting Acceleration calibration...&amp;quot;);  //  &amp;quot;Запускаем калибровку акселерометра...&amp;quot;   &lt;br /&gt;
    CurieIMU.autoCalibrateAccelerometerOffset(X_AXIS, 0);&lt;br /&gt;
    CurieIMU.autoCalibrateAccelerometerOffset(Y_AXIS, 0);&lt;br /&gt;
    CurieIMU.autoCalibrateAccelerometerOffset(Z_AXIS, 1);&lt;br /&gt;
    Serial.println(&amp;quot; Done&amp;quot;);  //  &amp;quot; Готово&amp;quot;   &lt;br /&gt;
&lt;br /&gt;
    Serial.println(&amp;quot;Internal sensor offsets AFTER calibration...&amp;quot;); //  &amp;quot;Смещение ПОСЛЕ калибровки...&amp;quot;   &lt;br /&gt;
    Serial.print(CurieIMU.getAccelerometerOffset(X_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.print(CurieIMU.getAccelerometerOffset(Y_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.print(CurieIMU.getAccelerometerOffset(Z_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.print(CurieIMU.getAccelerometerOffset(X_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.print(CurieIMU.getAccelerometerOffset(Y_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.print(CurieIMU.getAccelerometerOffset(Z_AXIS)); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // считываем «сырые» данные с гироскопа и акселерометра: &lt;br /&gt;
  CurieIMU.readMotionSensor(ax, ay, az, gx, gy, gz); &lt;br /&gt;
&lt;br /&gt;
  // используем функцию из MagdwickAHRS.h, чтобы рассчитать кватернионы:&lt;br /&gt;
  filter.updateIMU(gx / factor, gy / factor, gz / factor, ax, ay, az);&lt;br /&gt;
&lt;br /&gt;
  // функции для расчета крена, тангажа и рыскания из кватернионов: &lt;br /&gt;
  yaw = filter.getYaw();&lt;br /&gt;
  roll = filter.getRoll();&lt;br /&gt;
  pitch = filter.getPitch();&lt;br /&gt;
  &lt;br /&gt;
  // задача этого фрагмента – вывод на монитор порта значений от &lt;br /&gt;
  // гироскопа и акселерометра; он нужен только для отладки, поэтому&lt;br /&gt;
  // при работе со скетчем Processing его нужно отключить.&lt;br /&gt;
  /* &lt;br /&gt;
  Serial.print(ax); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
  Serial.print(ay); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
  Serial.print(az); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
  Serial.print(gx); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
  Serial.print(gy); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
  Serial.print(gz); Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;&amp;quot;);&lt;br /&gt;
  */&lt;br /&gt;
&lt;br /&gt;
  if (Serial.available() &amp;gt; 0) {&lt;br /&gt;
    int val = Serial.read();&lt;br /&gt;
    if (val == 's') { // если получили символ &amp;quot;s&amp;quot;&lt;br /&gt;
      Serial.print(yaw);&lt;br /&gt;
      Serial.print(&amp;quot;,&amp;quot;); // пишем запятую, чтобы скетчу Processing было легче обрабатывать данные&lt;br /&gt;
      Serial.print(pitch);&lt;br /&gt;
      Serial.print(&amp;quot;,&amp;quot;); // пишем запятую, чтобы скетчу Processing было легче обрабатывать данные&lt;br /&gt;
      Serial.println(roll);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Скетч для Processing===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
import processing.serial.*;&lt;br /&gt;
Serial myPort;&lt;br /&gt;
&lt;br /&gt;
int newLine = 13; // символ новой стоки в ASCII-формате&lt;br /&gt;
float yaw;&lt;br /&gt;
float pitch;&lt;br /&gt;
float roll;&lt;br /&gt;
String message;&lt;br /&gt;
String [] ypr = new String [3];&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  size(600, 500, P3D);&lt;br /&gt;
  &lt;br /&gt;
  /* порт делаем таким же, как у Arduino, скорость – 9600 бод */&lt;br /&gt;
  myPort = new Serial(this, Serial.list()[0], 9600); // если у вас активен только один COM-порт &lt;br /&gt;
  //myPort = new Serial(this, &amp;quot;COM5&amp;quot;, 9600);  // если вы знаете, какой именно порт использует Arduino 101&lt;br /&gt;
&lt;br /&gt;
  textSize(16); // задаем размер текста &lt;br /&gt;
  textMode(SHAPE); // режимом текста делаем SHAPE &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw()&lt;br /&gt;
{&lt;br /&gt;
  serialEvent();  // считываем и обрабатываем сообщение, пришедшее по последовательному порту&lt;br /&gt;
  background(255); // делаем фон белым&lt;br /&gt;
&lt;br /&gt;
  translate(width/2, height/2); // задаем позицию в центре&lt;br /&gt;
  &lt;br /&gt;
  pushMatrix(); // начинаем объект&lt;br /&gt;
  &lt;br /&gt;
  rotateX(pitch); // вращение по оси крена&lt;br /&gt;
  rotateY(-yaw); // вращение по оси тангажа &lt;br /&gt;
  rotateZ(-roll); // вращение по оси рыскания&lt;br /&gt;
  &lt;br /&gt;
  drawArduino(); // функция, рисующая виртуальную версию Arduino&lt;br /&gt;
  &lt;br /&gt;
  popMatrix(); // заканчиваем объект&lt;br /&gt;
&lt;br /&gt;
  // выводим данные на консоль:&lt;br /&gt;
  print(pitch);&lt;br /&gt;
  print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
  print(roll); &lt;br /&gt;
  print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
  print(-yaw);   &lt;br /&gt;
  println(&amp;quot;\t&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  myPort.write(&amp;quot;s&amp;quot;); // передаем символ «s», чтобы получить новые данные от Arduino&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
void serialEvent()&lt;br /&gt;
{&lt;br /&gt;
  message = myPort.readStringUntil(newLine); // считываем данные, пока не получим символ новой строки (13-ый символ в ASCII-формате)&lt;br /&gt;
  if (message != null) {&lt;br /&gt;
    ypr = split(message, &amp;quot;,&amp;quot;); // дробим сообщение по запятым и сохраняем их в массив строк &lt;br /&gt;
    yaw = float(ypr[0]); // полученное число с плавающей точкой конвертируем в переменную yaw&lt;br /&gt;
    pitch = float(ypr[1]); // полученное число с плавающей точкой конвертируем в переменную pitch&lt;br /&gt;
    roll = float(ypr[2]); // полученное число с плавающей точкой конвертируем в переменную roll &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
void drawArduino() {&lt;br /&gt;
  /* функция, рисующая фигуры, вращаемые IMU */&lt;br /&gt;
  stroke(0, 90, 90); // делаем цвет контура темно-бирюзовым &lt;br /&gt;
  fill(0, 130, 130); // делаем цвет заливки светло-бирюзовым &lt;br /&gt;
  box(300, 10, 200); // рисуем основание платы Arduino &lt;br /&gt;
&lt;br /&gt;
  stroke(0); // делаем цвет контура черным &lt;br /&gt;
  fill(80); // делаем цвет заливки темно-серым&lt;br /&gt;
&lt;br /&gt;
  translate(60, -10, 90); // задаем позицию для первого штырьевого разъема &lt;br /&gt;
  box(170, 20, 10); // рисуем первый штырьевой разъем &lt;br /&gt;
&lt;br /&gt;
  translate(-20, 0, -180); // задаем позицию для второго штырьевого разъема&lt;br /&gt;
  box(210, 20, 10); // рисуем второй штырьевой разъем&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= См.также=&lt;br /&gt;
&lt;br /&gt;
# Curie IMU Accelerometer&lt;br /&gt;
# Curie IMU Accelerometer Orientation&lt;br /&gt;
# Curie IMU Gyro&lt;br /&gt;
# Curie IMU Raw Imu Data Serial&lt;br /&gt;
# Curie IMU Shock Detect&lt;br /&gt;
# Curie IMU Step Count&lt;br /&gt;
# Curie IMU Tap Detect&lt;br /&gt;
&lt;br /&gt;
=Внешние ссылки=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория:Пример]]&lt;br /&gt;
[[Категория:Примеры]]&lt;br /&gt;
[[Категория:Пример программирования Arduino]]&lt;br /&gt;
[[Категория:Примеры программирования Arduino]]&lt;/div&gt;</summary>
		<author><name>Myagkij</name></author>
	</entry>
</feed>