<?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%2FEsploraPong</id>
	<title>Arduino:Примеры/EsploraPong - История изменений</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%2FEsploraPong"/>
	<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/EsploraPong&amp;action=history"/>
	<updated>2026-04-16T20:36:38Z</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/EsploraPong&amp;diff=8495894&amp;oldid=prev</id>
		<title>EducationBot в 08:34, 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/EsploraPong&amp;diff=8495894&amp;oldid=prev"/>
		<updated>2023-07-08T08:34:19Z</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:34, 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-l332&quot;&gt;Строка 332:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 332:&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;/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/EsploraPong&amp;diff=7735700&amp;oldid=prev</id>
		<title>EducationBot в 08:32, 20 мая 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/EsploraPong&amp;diff=7735700&amp;oldid=prev"/>
		<updated>2023-05-20T08:32: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:32, 20 мая 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-l40&quot;&gt;Строка 40:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 40:&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 Monitor''', то скетчу '''Processing''' к последовательному порту '''Esplora''' доступ будет закрыт. Точно также, при запущенном скетче '''Processing''' открыть '''Serial Monitor''' и перепрограммировать '''Esplora''' будет нельзя.&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 Monitor''', то скетчу '''Processing''' к последовательному порту '''Esplora''' доступ будет закрыт. Точно также, при запущенном скетче '''Processing''' открыть '''Serial Monitor''' и перепрограммировать '''Esplora''' будет нельзя.&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;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-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;===ProcessingPong.pde===&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;===ProcessingPong.pde===&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;Скетч к Processing для игры в Pong&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 для игры в Pong&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/EsploraPong&amp;diff=20879&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/EsploraPong&amp;diff=20879&amp;oldid=prev"/>
		<updated>2016-12-13T17:57:50Z</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;
==Игра в Pong с помощью Esplora&amp;lt;ref&amp;gt;[http://www.arduino.cc/en/Tutorial/EsploraPong Arduino - Esplora Pong]&amp;lt;/ref&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
А не хотите ли поиграть с помощью '''Esplora в Pong'''? Этот пример покажет как.&lt;br /&gt;
&lt;br /&gt;
Он создан, чтобы работать в паре со скетчем '''Processing''' (это язык программирования с открытым кодом). '''Esplora''' считывает данных со своих кнопок и слайдера, а затем через последовательный порт отправляет данные скетчу '''Processing''', а он, в свою очередь использует их для перемещения '''«рокеток»''' в '''Pong'''.&lt;br /&gt;
&lt;br /&gt;
Если [http://www.processing.org Processing] на вашем компьютере нет, его можно [http://www.processing.org/download загрузить] с сайта '''Processing''', а затем установить, следуя руководству по инсталляции.&lt;br /&gt;
&lt;br /&gt;
Скетч '''Processing''' к этому примеру можно скачать по [http://www.arduino.cc/en/uploads/Tutorial/ProcessingPong.zip этой ссылке](также с кодом можно ознакомиться ниже).&lt;br /&gt;
&lt;br /&gt;
Вам нужно лишь распаковать этот фал в папке скетчей '''Processing''', а затем открыть саму Processing и запустить там нужный файл с расширением '''*.pde'''.&lt;br /&gt;
&lt;br /&gt;
==Необходимое оборудование==&lt;br /&gt;
&lt;br /&gt;
* Плата '''Arduino Esplora''';&lt;br /&gt;
&lt;br /&gt;
==Необходимое ПО==&lt;br /&gt;
&lt;br /&gt;
* [http://processing.org Processing];&lt;br /&gt;
&lt;br /&gt;
==Цепь==&lt;br /&gt;
&lt;br /&gt;
Для этого примера нужна лишь плата '''Arduino Esplora'''.&lt;br /&gt;
&lt;br /&gt;
[[File:Esplora_Pong.png]]&lt;br /&gt;
&lt;br /&gt;
Элементы '''Esplora''', необходимые для этого примера – кнопки и линейный потенциометр&lt;br /&gt;
&lt;br /&gt;
==Код для Arduino==&lt;br /&gt;
&lt;br /&gt;
Этот пример отправляет на компьютер данные о позиции слайдера линейного потенциометра и состоянии трех кнопок. '''Processing'''-скетч, связанный с этим '''Esplora'''-скетчем, считывает эти данные, чтобы управлять '''«рокетками»''' и другими элементами игры '''Pong'''.&lt;br /&gt;
&lt;br /&gt;
Данные всегда отправляются в таком порядке: слайдер, '''1-ая кнопка''', '''3-тья кнопка''', '''4-ая кнопка'''. Кроме того, эти данные разделены запятыми. Функция Serial.printIn() отправляет данные о последней кнопке, завершая их символом новой &lt;br /&gt;
строки. '''Processing'''-скетчу этот символ нужен для того, чтобы знать, что он получил все необходимые данные от датчиков.&lt;br /&gt;
&lt;br /&gt;
'''ПРИМЕЧАНИЕ:''' Одновременно к последовательным портам компьютера может иметь доступ только одна программа. То есть, если у вас открыт '''Serial Monitor''', то скетчу '''Processing''' к последовательному порту '''Esplora''' доступ будет закрыт. Точно также, при запущенном скетче '''Processing''' открыть '''Serial Monitor''' и перепрограммировать '''Esplora''' будет нельзя.&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;
Игра в Pong с помощью Esplora&lt;br /&gt;
&lt;br /&gt;
Этот скетч через последовательный порт подключается к скетчу Processing, &lt;br /&gt;
чтобы сделать Esplora контроллером для игры в Pong.&lt;br /&gt;
Он передает скетчу Processing информацию о позиции слайдера и состояниях трех кнопок Esplora.&lt;br /&gt;
Эти данные отделены друг от друга запятыми.&lt;br /&gt;
Скетч Processing использует эти данные, чтобы управлять имеющейся в нем графикой.&lt;br /&gt;
&lt;br /&gt;
Слайдер отвечает за высоту «рокетки»,&lt;br /&gt;
кнопка 1 перезагружает игру,&lt;br /&gt;
кнопка 2 ставит мячик в центр,&lt;br /&gt;
кнопка 3 меняет игрока.&lt;br /&gt;
&lt;br /&gt;
В эту игру можно играть и на одной, и на двух Esplora.&lt;br /&gt;
&lt;br /&gt;
Создан 22 декабря 2012 Томом Иго (Tom Igoe).&lt;br /&gt;
&lt;br /&gt;
Этот код не защищен авторским правом.&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Esplora.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);     // инициализируем последовательную передачу данных&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  // Считываем данные от слайдера и трех кнопок&lt;br /&gt;
  int slider = Esplora.readSlider();&lt;br /&gt;
  int resetButton = Esplora.readButton(SWITCH_1);&lt;br /&gt;
  int serveButton = Esplora.readButton(SWITCH_3);&lt;br /&gt;
  int switchPlayerButton = Esplora.readButton(SWITCH_4);&lt;br /&gt;
&lt;br /&gt;
  Serial.print(slider);                // выводим на Serial Monitor данные от слайдера&lt;br /&gt;
  Serial.print(&amp;quot;,&amp;quot;);                   // добавляем запятую&lt;br /&gt;
  Serial.print(resetButton);           // выводим данные от перезагружающей кнопки&lt;br /&gt;
  Serial.print(&amp;quot;,&amp;quot;);                   // добавляем еще запятую&lt;br /&gt;
  Serial.print(serveButton);           // выводим данные от кнопки, ставящей мячик в центр экрана&lt;br /&gt;
  Serial.print(&amp;quot;,&amp;quot;);                   // добавляем еще запятую&lt;br /&gt;
  Serial.println(switchPlayerButton);  // выводим данные от последней кнопки плюс символ новой строки&lt;br /&gt;
  delay(10);                           // делаем задержку перед тем, как отправлять следующую порцию данных&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Код для Processing==&lt;br /&gt;
&lt;br /&gt;
===ProcessingPong.pde===&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;
Скетч к Processing для игры в Pong&lt;br /&gt;
 &lt;br /&gt;
Этот скетч принимает через последовательный порт входящие данные &lt;br /&gt;
от одной или двух плат Esplora, тем самым позволяя играть в Pong.&lt;br /&gt;
«Эсплоры» пересылают скетчу четыре значения, разделенных запятыми &lt;br /&gt;
и заканчивающихся переводом строки.&lt;br /&gt;
&lt;br /&gt;
Это значения от четырех устройств ввода:&lt;br /&gt;
* слайдера (отвечает за ход «ракетки» вверх-вниз),&lt;br /&gt;
* кнопки номер 1 (перезагружает игру), &lt;br /&gt;
* кнопки номер 2 (ставит мячик в центр),&lt;br /&gt;
* кнопки номер 3 (меняет игроков местами).&lt;br /&gt;
&lt;br /&gt;
Эти значения отсылаются скетчу Processing при помощи Arduino-скетча&lt;br /&gt;
под названием «Игра в Pong с помощью Esplora» (EsploraPong).&lt;br /&gt;
&lt;br /&gt;
Чтобы начать игру, выберите номер порта (портов) Esplora.&lt;br /&gt;
&lt;br /&gt;
Создан 22 декабря 2012 Томом Иго (Tom Igoe).&lt;br /&gt;
 &lt;br /&gt;
Этот код не защищен авторским правом.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import processing.serial.*;              // импортируем библиотеку Serial&lt;br /&gt;
import java.awt.Rectangle;               // импортируем Java-класс Rectangle&lt;br /&gt;
&lt;br /&gt;
Serial[] EsploraList = new Serial[2];    // список девайсов, коммуникация с которыми будет осуществляться при помощи последовательного порта&lt;br /&gt;
int portCount = 0;                       // количество инициализированных последовательных портов&lt;br /&gt;
String portNumber = &amp;quot;&amp;quot;;                  // строка, обозначающая следующий порт, который будет инициализирован&lt;br /&gt;
&lt;br /&gt;
Rectangle leftPaddle, rightPaddle;       // прямоугольники, играющие роль «ракеток»&lt;br /&gt;
&lt;br /&gt;
int resetButton = 1;              // значение для кнопки сброса&lt;br /&gt;
int serveButton = 1;              // значение для кнопки, которая ставит мячик в центр экрана&lt;br /&gt;
int switchSidesButton = 1;        // значение для кнопки, меняющей игроков местами &lt;br /&gt;
int paddleHeight = 50;            // вертикальный размер «ракетки» &lt;br /&gt;
int paddleWidth = 10;             // горизонтальный размер «ракетки»&lt;br /&gt;
&lt;br /&gt;
int ballSize = 10;     // размер мячика&lt;br /&gt;
int xDirection = 2;    // для перемещения мячика по горизонтали: влево «-2», вправо «2»&lt;br /&gt;
int yDirection = 2;    // для перемещения мячика по вертикали: вверх «-2», вниз «2»&lt;br /&gt;
int xPos, yPos;        // вертикальная и горизонтальная позиция мячика &lt;br /&gt;
&lt;br /&gt;
boolean ballInMotion = false;  // должен ли мячик двигаться или нет &lt;br /&gt;
&lt;br /&gt;
int leftScore = 0;      // счетчик очков для игрока слева &lt;br /&gt;
int rightScore = 0;     // счетчик очков для игрока справа&lt;br /&gt;
&lt;br /&gt;
int fontSize = 20;      // размер шрифтов на экране&lt;br /&gt;
void setup() {&lt;br /&gt;
  size(640, 480);       // размер для экрана программы&lt;br /&gt;
&lt;br /&gt;
  // Инициализируем «ракетки»:&lt;br /&gt;
  leftPaddle = new Rectangle(50, height/2, paddleWidth, paddleHeight);&lt;br /&gt;
  rightPaddle = new Rectangle(width-50, height/2, paddleWidth, paddleHeight);&lt;br /&gt;
&lt;br /&gt;
  // Делаем так, чтобы у рисуемых нами фигур не было контура:&lt;br /&gt;
  noStroke();&lt;br /&gt;
&lt;br /&gt;
  // Инициализируем мячик в центре экрана:&lt;br /&gt;
  xPos = width/2;&lt;br /&gt;
  yPos = height/2;&lt;br /&gt;
&lt;br /&gt;
  // Создаем шрифт. Это будет третий шрифт, доступный системе:&lt;br /&gt;
  PFont myFont = createFont(PFont.list()[2], fontSize);&lt;br /&gt;
  textFont(myFont);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  // Очищаем экран:&lt;br /&gt;
  background(0);&lt;br /&gt;
  fill(255);&lt;br /&gt;
&lt;br /&gt;
  // Если было инициализировано недостаточно портов... :&lt;br /&gt;
  if (portCount &amp;lt; 2) {&lt;br /&gt;
    // Требуем список последовательных портов:&lt;br /&gt;
    String[] portList = Serial.list();&lt;br /&gt;
    // Выводим на экране инструкции:&lt;br /&gt;
    text(&amp;quot;Type the port number of Esplora #&amp;quot; + (portCount+1), 20, 20);  //  &amp;quot;Введите номер порта Esplora #&amp;quot;&lt;br /&gt;
    text(&amp;quot;(or type enter to finish):&amp;quot;, 20, 40);  //  &amp;quot;Или нажмите Enter, чтобы закончить&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    // Выводим на экране список портов:&lt;br /&gt;
    for (int i = 0; i &amp;lt; portList.length; i++) {&lt;br /&gt;
      text(&amp;quot;port &amp;quot; + i + &amp;quot;:  &amp;quot; + portList[i], 20, (i+4)*20);&lt;br /&gt;
    }&lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  // Если портов достаточно... :&lt;br /&gt;
  else {&lt;br /&gt;
    // Рисуем первую «ракетку»:&lt;br /&gt;
    rect(leftPaddle.x, leftPaddle.y, leftPaddle.width, leftPaddle.height);&lt;br /&gt;
    // Рисуем вторую «ракетку»:&lt;br /&gt;
    rect(rightPaddle.x, rightPaddle.y, rightPaddle.width, rightPaddle.height);&lt;br /&gt;
    // Вычисляем позицию мячика и рисуем его:&lt;br /&gt;
    if (ballInMotion == true) {&lt;br /&gt;
      animateBall();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Показываем счетчики очков:&lt;br /&gt;
    text(leftScore, fontSize, fontSize);&lt;br /&gt;
    text(rightScore, width-fontSize, fontSize);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Функция serialEvent будет запускаться автоматически всякий раз, &lt;br /&gt;
// когда в буфере появятся байты от bufferUntil(): &lt;br /&gt;
void serialEvent(Serial thisPort) {&lt;br /&gt;
  // Считываем значения в буфере последовательного порта:&lt;br /&gt;
  String inputString = thisPort.readStringUntil('\n');&lt;br /&gt;
&lt;br /&gt;
  // Отрезаем от входящей строки символы возврата строки и перевода строки:&lt;br /&gt;
  inputString = trim(inputString);&lt;br /&gt;
&lt;br /&gt;
  // Делим входящую строку по запятым и конвертируем результат в целые числа:&lt;br /&gt;
  int sensors[] = int(split(inputString, ','));&lt;br /&gt;
&lt;br /&gt;
  // Если получили от датчиков все необходимые данные, используем их:&lt;br /&gt;
  if (sensors.length == 4) {&lt;br /&gt;
    // Если это левая Esplora:&lt;br /&gt;
    if (thisPort == EsploraList[0] &amp;amp;&amp;amp; EsploraList[0] != null) {&lt;br /&gt;
      // подгоняем значения от слайдера к диапазону хода «ракеток»:&lt;br /&gt;
      leftPaddle.y = int(map(sensors[0], 0, 1023, 0, height - leftPaddle.height));&lt;br /&gt;
    }&lt;br /&gt;
    // если это правая Esplora:&lt;br /&gt;
    if (thisPort == EsploraList[1] &amp;amp;&amp;amp; EsploraList[1] != null) {&lt;br /&gt;
      rightPaddle.y = int(map(sensors[0], 0, 1023, 0, height- rightPaddle.height));&lt;br /&gt;
    }&lt;br /&gt;
    // Если кнопка сброса поменяла свое состояние, сбрасываем очки:&lt;br /&gt;
    if (resetButton == 1 &amp;amp;&amp;amp; sensors[1] == 0) {&lt;br /&gt;
      leftScore = 0;&lt;br /&gt;
      rightScore = 0;&lt;br /&gt;
      resetBall();&lt;br /&gt;
      ballInMotion = true;&lt;br /&gt;
    }&lt;br /&gt;
    // Сохраняем текущее состояние кнопки сброса для сравнения при следующем считывании:&lt;br /&gt;
    resetButton = sensors[1];&lt;br /&gt;
&lt;br /&gt;
    // Если кнопка для перемещения мячика в центр экрана поменяла свое состояние,&lt;br /&gt;
    // то ставим мячик в центр:&lt;br /&gt;
    if (serveButton == 1 &amp;amp;&amp;amp; sensors[2] == 0) {&lt;br /&gt;
      resetBall();&lt;br /&gt;
      ballInMotion = true;&lt;br /&gt;
    }&lt;br /&gt;
    // сохраняем текущее состояние этой кнопки для сравнения при следующем считывании:&lt;br /&gt;
    serveButton = sensors[2]; &lt;br /&gt;
    &lt;br /&gt;
    // Если кнопка смены игроков поменяла свое состояние,&lt;br /&gt;
    // то меняем правого и левого игроков местами:&lt;br /&gt;
    if (switchSidesButton == 1 &amp;amp;&amp;amp; sensors[3] == 0) {&lt;br /&gt;
      switchSides();&lt;br /&gt;
    }&lt;br /&gt;
    // Сохраняем текущее состояние этой кнопки для сравнения при следующем считывании:&lt;br /&gt;
    switchSidesButton = sensors[3];&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void animateBall() {&lt;br /&gt;
  if (leftPaddle.contains(xPos, yPos) ||    // если позиция мячика внутри левой «ракетки» &lt;br /&gt;
  rightPaddle.contains(xPos, yPos)) {       // или если позиция мячика внутри правой «ракетки»&lt;br /&gt;
    xDirection = -xDirection;               // реверсируем направление движения мячика по оси X&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Если мячик вышел за пределы экрана слева, засчитываем очки правому игроку:&lt;br /&gt;
  if (xPos &amp;lt; 0) {&lt;br /&gt;
    rightScore++;&lt;br /&gt;
    resetBall();&lt;br /&gt;
  }&lt;br /&gt;
  // Если мячик вышел за пределы экрана справа, засчитываем очки левому игроку:&lt;br /&gt;
  if (xPos &amp;gt; width) {&lt;br /&gt;
    leftScore++;&lt;br /&gt;
    resetBall();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Делаем так, чтобы мячик не мог выйти за пределы экрана сверху и снизу:&lt;br /&gt;
  if ((yPos &amp;lt;= 0) || (yPos &amp;gt;=height)) {&lt;br /&gt;
    // Реверсируем движение мячика по оси Y:&lt;br /&gt;
    yDirection = -yDirection;&lt;br /&gt;
  }&lt;br /&gt;
  // Обновляем позицию мячика:&lt;br /&gt;
  xPos = xPos + xDirection;&lt;br /&gt;
  yPos = yPos + yDirection;&lt;br /&gt;
&lt;br /&gt;
  // Рисуем мячик:&lt;br /&gt;
  rect(xPos, yPos, ballSize, ballSize);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void resetBall() {&lt;br /&gt;
  // Ставим мячик в центр:&lt;br /&gt;
  xPos = width/2;&lt;br /&gt;
  yPos = height/2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void keyReleased() {&lt;br /&gt;
  // Если нажат Enter, останавливаем выбор номера порта:&lt;br /&gt;
  if (key == ENTER) {&lt;br /&gt;
    if (portNumber != &amp;quot;&amp;quot; &amp;amp;&amp;amp; portCount &amp;lt; 2) {&lt;br /&gt;
      choosePort(int(portNumber));&lt;br /&gt;
    }&lt;br /&gt;
    portCount++;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Если пользователь жмет на клавиши от 0 до 9, используем это как выбор номера порта:&lt;br /&gt;
  if (key &amp;gt;= '0' &amp;amp;&amp;amp; key &amp;lt;= '9') {&lt;br /&gt;
    portNumber += key;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void choosePort(int whichPort) {&lt;br /&gt;
  // Получаем название порта из списка последовательных портов:&lt;br /&gt;
  String portName = Serial.list()[whichPort];&lt;br /&gt;
  // Инициализируем следующую Esplora:&lt;br /&gt;
  EsploraList[portCount] = new Serial(this, portName, 9600);&lt;br /&gt;
  // Считываем байты в буфер последовательного порта до тех пор,&lt;br /&gt;
  // пока не доберемся до символа перевода строки (номер 10 в таблице ASCII):&lt;br /&gt;
  EsploraList[portCount].bufferUntil('\n');&lt;br /&gt;
  // Очищаем строку с номером порта:&lt;br /&gt;
  portNumber = &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void switchSides() {&lt;br /&gt;
  Serial temp = EsploraList[0];      // на время сохраняем первый элемент&lt;br /&gt;
  EsploraList[0] = EsploraList[1];   // перемещаем второй элемент к первому&lt;br /&gt;
  EsploraList[1] = temp;             // перемещаем первый элемент ко второму&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См.также==&lt;br /&gt;
&lt;br /&gt;
# Esplora Pong&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>