<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bruno Soares &#187; Electronics</title>
	<atom:link href="http://blog.bsoares.com.br/category/electronics/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.bsoares.com.br</link>
	<description></description>
	<lastBuildDate>Sun, 11 Jul 2010 02:16:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ping Pong com Matriz de Leds 8&#215;8</title>
		<link>http://blog.bsoares.com.br/arduino/ping-pong-with-8x8-led-matrix-on-arduino</link>
		<comments>http://blog.bsoares.com.br/arduino/ping-pong-with-8x8-led-matrix-on-arduino#comments</comments>
		<pubDate>Mon, 06 Jul 2009 22:41:57 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[8x8 Led Matrix]]></category>
		<category><![CDATA[Led]]></category>
		<category><![CDATA[Open Hardware]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=532</guid>
		<description><![CDATA[Há alguns dias consegui duas matrizes de leds 8&#215;8 azuis e resolvi brincar com elas :)
O resultado foi um jogo de Ping Pong, sim O primeiro videogame lucrativo da história. É de fato um joguinho bem interessante e facíl para quem pratica eletrônica digital por hobby.

YouTube

Em primeiro lugar achei melhor criar um protótipo do game [...]]]></description>
			<content:encoded><![CDATA[<p>Há alguns dias consegui duas matrizes de leds 8&#215;8 azuis e resolvi brincar com elas :)<br />
O resultado foi um jogo de Ping Pong, sim <a href="http://pt.wikipedia.org/wiki/Pong" target="_blank">O primeiro videogame lucrativo da história</a>. É de fato um joguinho bem interessante e facíl para quem pratica <a href="http://pt.wikipedia.org/wiki/Circuito_digital" target="_blank">eletrônica digital</a> por hobby.</p>
<p></p>
<div style="text-align:center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="470" height="360" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=5469191&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="470" height="360" src="http://vimeo.com/moogaloop.swf?clip_id=5469191&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object><br /><a href="http://www.youtube.com/watch?v=lvAlKH5SzYk" target="_blank">YouTube</a></div>
<p></p>
<p>Em primeiro lugar achei melhor criar um protótipo do game em Flash (<a href="http://pt.wikipedia.org/wiki/ActionScript" target="_blank">ActionScript</a> 3.0) para não ficar &#8220;queimando os miolos&#8221; direto no C++. Pra quem quiser anexo o código fonte do game final e protótipo aqui.</p>
<div style="text-align:center">
<object width="161" height="161">
<param name="movie" value="http://blog.bsoares.com.br/wp-content/uploads/2009/07/PongMatrix.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<embed type="application/x-shockwave-flash" width="161" height="161" src="http://blog.bsoares.com.br/wp-content/uploads/2009/07/PongMatrix.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</div>
<p>Espaço para iniciar.<br />
Seta para cima e para baixo para mover as astes.</p>
<p>Para ligar e desligar cada led da matriz utilizei como referência o código encontrado no <a href="http://www.arduino.cc/playground/" target="_blank">Arduino Playground</a> (<a href="http://www.arduino.cc/playground/Main/DirectDriveLEDMatrix" target="_blank">http://www.arduino.cc/playground/Main/DirectDriveLEDMatrix</a>), só que minha matriz é diferente do utilizado no exemplo, então fiz algumas pequenas alterações no método doubleBuffer. Resumindo, no exemplo encontrado no Playground a matriz utilizada tem a linha como cátodo já minha matriz tem a coluna como cátodo.<br />
Abaixo a especificação da matriz utilizada:</p>
<p></p>
<div style="text-align:center"><img src="http://blog.bsoares.com.br/wp-content/uploads/2009/07/8x8-led-matriz-especification.png" alt="8x8-led-matriz-especification" title="8x8-led-matriz-especification" /></div>
<p></p>
<p><strong>Código-fonte:</strong></p>
<div class="codecolorer-container cpp mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br />227<br />228<br />229<br />230<br />231<br />232<br />233<br />234<br />235<br />236<br />237<br />238<br />239<br />240<br />241<br />242<br />243<br />244<br />245<br />246<br />247<br />248<br />249<br />250<br />251<br />252<br />253<br />254<br />255<br />256<br />257<br />258<br />259<br />260<br />261<br />262<br />263<br />264<br />265<br />266<br />267<br />268<br />269<br />270<br />271<br />272<br />273<br />274<br />275<br />276<br />277<br />278<br />279<br />280<br />281<br />282<br />283<br />284<br />285<br />286<br />287<br />288<br />289<br />290<br />291<br />292<br />293<br />294<br />295<br />296<br />297<br />298<br />299<br />300<br />301<br />302<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000; font-style: italic;">/**<br />
&nbsp;* Ping Pong with 8x8 Led Dot Matrix on Arduino<br />
&nbsp;*<br />
&nbsp;* @author &nbsp;Bruno Soares<br />
&nbsp;* @website www.bsoares.com.br<br />
&nbsp;*/</span><br />
<br />
<span style="color: #339900;">#include &quot;TimerOne.h&quot;</span><br />
<br />
<span style="color: #339900;">#define PIN_LEFT 4</span><br />
<span style="color: #339900;">#define PIN_RIGHT 5</span><br />
<br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> left <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> right <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> angle <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> radians<span style="color: #008080;">;</span><br />
<br />
byte rows<span style="color: #008000;">&#91;</span>8<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span>9, 14, 8, 12, 1, 7, 2, 5<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
byte cols<span style="color: #008000;">&#91;</span>8<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span>13, 3, 4, 10, 6, 11, 15, 16<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
byte pins<span style="color: #008000;">&#91;</span>16<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span>5, 4, 3, 2, 14, 15, 16, 17, 13, 12, 11, 10, 9, 8, 7, 6<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
byte screen<span style="color: #008000;">&#91;</span>8<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span>0, 0, 0, 0, 0, 0, 0, 0<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">volatile</span> byte screenRow <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">volatile</span> byte screenCol <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">int</span> _angle<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> _px<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> _py<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> _w <span style="color: #000080;">=</span> <span style="color: #0000dd;">7</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> _h <span style="color: #000080;">=</span> <span style="color: #0000dd;">7</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> _wall<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #008000;">&#123;</span>3, 3<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> _count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> _speed <span style="color: #000080;">=</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> _countPoints <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<br />
<span style="color: #0000ff;">void</span> setup<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; Timer1.<span style="color: #007788;">initialize</span><span style="color: #008000;">&#40;</span>100<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">2</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;=</span> <span style="color: #0000dd;">17</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; pinMode<span style="color: #008000;">&#40;</span>i, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; Timer1.<span style="color: #007788;">attachInterrupt</span><span style="color: #008000;">&#40;</span>doubleBuffer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; Serial.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span>9600<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; face<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; reset<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> doubleBuffer<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>translatePin<span style="color: #008000;">&#40;</span>rows<span style="color: #008000;">&#91;</span>screenRow<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>, LOW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>translatePin<span style="color: #008000;">&#40;</span>cols<span style="color: #008000;">&#91;</span>screenCol<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; screenCol<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>screenCol <span style="color: #000080;">&gt;=</span> 8<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; screenCol <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; screenRow<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>screenRow <span style="color: #000080;">&gt;=</span> 8<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; screenRow <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>screen<span style="color: #008000;">&#91;</span>screenRow<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;&gt;</span> screenCol<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span> B1 <span style="color: #000080;">==</span> B1<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>translatePin<span style="color: #008000;">&#40;</span>rows<span style="color: #008000;">&#91;</span>screenRow<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>translatePin<span style="color: #008000;">&#40;</span>cols<span style="color: #008000;">&#91;</span>screenCol<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>, LOW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>translatePin<span style="color: #008000;">&#40;</span>rows<span style="color: #008000;">&#91;</span>screenRow<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>, LOW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>translatePin<span style="color: #008000;">&#40;</span>cols<span style="color: #008000;">&#91;</span>screenCol<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
byte translatePin<span style="color: #008000;">&#40;</span>byte original<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">return</span> pins<span style="color: #008000;">&#91;</span>original <span style="color: #000040;">-</span> 1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> allOFF<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; screen<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> on<span style="color: #008000;">&#40;</span>byte row, byte column<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; screen<span style="color: #008000;">&#91;</span>column<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span> <span style="color: #000040;">|</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>B1 <span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span>row <span style="color: #000040;">-</span> 1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> off<span style="color: #008000;">&#40;</span>byte row, byte column<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; screen<span style="color: #008000;">&#91;</span>column<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;</span><span style="color: #000080;">=</span> ~<span style="color: #008000;">&#40;</span>B1 <span style="color: #000080;">&lt;&lt;</span> <span style="color: #008000;">&#40;</span>row <span style="color: #000040;">-</span> 1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> calcWall<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; left <span style="color: #000080;">=</span> analogRead<span style="color: #008000;">&#40;</span>PIN_LEFT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; right <span style="color: #000080;">=</span> analogRead<span style="color: #008000;">&#40;</span>PIN_RIGHT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; left <span style="color: #000080;">=</span> constrain<span style="color: #008000;">&#40;</span>map<span style="color: #008000;">&#40;</span>left, 223, 800, 0, 6<span style="color: #008000;">&#41;</span>, 0, 6<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; right <span style="color: #000080;">=</span> constrain<span style="color: #008000;">&#40;</span>map<span style="color: #008000;">&#40;</span>right, 223, 800, 6, 0<span style="color: #008000;">&#41;</span>, 0, 6<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; clearWall<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; on<span style="color: #008000;">&#40;</span>1, left <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>1, left <span style="color: #000040;">+</span> 2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>8, right <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>8, right <span style="color: #000040;">+</span> 2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; _wall<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> left<span style="color: #008080;">;</span><br />
&nbsp; _wall<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> right<span style="color: #008080;">;</span><br />
&nbsp; show<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> clearWall<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; screen<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;</span><span style="color: #000080;">=</span> B01111110<span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> clearGame<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; screen<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000040;">&amp;</span><span style="color: #000080;">=</span> B10000001<span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> loop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; calcWall<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; enterFrameHandler<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; delay<span style="color: #008000;">&#40;</span>50<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> enterFrameHandler<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_count<span style="color: #000040;">++</span> <span style="color: #000080;">&lt;</span> _speed<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; _count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; checkCollision<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; calcAngleIncrement<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; show<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> retorted<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> angle<span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; Serial.<span style="color: #007788;">println</span><span style="color: #008000;">&#40;</span>angle<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; _angle <span style="color: #000080;">=</span> angle<span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>_countPoints <span style="color: #000040;">%</span> 5 <span style="color: #000080;">==</span> 0 <span style="color: #000040;">&amp;&amp;</span> _speed <span style="color: #000080;">&gt;</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; _speed<span style="color: #000040;">--</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> resetAnim<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; screen<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> B11111111<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; delay<span style="color: #008000;">&#40;</span>25<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; screen<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> B00000000<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; delay<span style="color: #008000;">&#40;</span>25<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> face<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>1, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>1, 2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>2, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>2, 2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>7, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>7, 2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>8, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>8, 2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>1, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>1, 2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>4, 4<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>4, 5<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>5, 4<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>5, 5<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>2, 7<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>7, 7<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>3, 8<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>4, 8<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>5, 8<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>6, 8<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; delay<span style="color: #008000;">&#40;</span>5000<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> reset<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; resetAnim<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; _px <span style="color: #000080;">=</span> random<span style="color: #008000;">&#40;</span>3, 5<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; _py <span style="color: #000080;">=</span> random<span style="color: #008000;">&#40;</span>3, 5<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; _angle <span style="color: #000080;">=</span> random<span style="color: #008000;">&#40;</span>0, 2<span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> 0 <span style="color: #008080;">?</span> 0 <span style="color: #008080;">:</span> <span style="color: #0000dd;">180</span><span style="color: #008080;">;</span><br />
&nbsp; _speed <span style="color: #000080;">=</span> <span style="color: #0000dd;">5</span><span style="color: #008080;">;</span><br />
&nbsp; _countPoints <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; show<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; delay<span style="color: #008000;">&#40;</span>500<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> show<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; clearGame<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; on<span style="color: #008000;">&#40;</span>_px <span style="color: #000040;">+</span> 1, _py <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> checkCollision<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_px <span style="color: #000080;">==</span> _w <span style="color: #000040;">-</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 315 <span style="color: #000040;">||</span> _angle <span style="color: #000080;">==</span> 0 <span style="color: #000040;">||</span> _angle <span style="color: #000080;">==</span> 45<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span> <span style="color: #000040;">||</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 0 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>225<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 0 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>135<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 45 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>135<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 45 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>180<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 315 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>180<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 315 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>225<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_px <span style="color: #000080;">==</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 225 <span style="color: #000040;">||</span> _angle <span style="color: #000080;">==</span> 180 <span style="color: #000040;">||</span> _angle <span style="color: #000080;">==</span> 135<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span> <span style="color: #000040;">||</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 180 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>315<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 180 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>45<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 135 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>45<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 135 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 225 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 225 <span style="color: #000040;">&amp;&amp;</span> _py <span style="color: #000080;">==</span> _wall<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retorted<span style="color: #008000;">&#40;</span>315<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_px <span style="color: #000080;">==</span> _w<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; reset<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_px <span style="color: #000080;">==</span> 0<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; reset<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_py <span style="color: #000080;">==</span> _h<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 45<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; _angle <span style="color: #000080;">=</span> <span style="color: #0000dd;">315</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 135<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; _angle <span style="color: #000080;">=</span> <span style="color: #0000dd;">225</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_py <span style="color: #000080;">==</span> 0<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 225<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; _angle <span style="color: #000080;">=</span> <span style="color: #0000dd;">135</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 315<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; _angle <span style="color: #000080;">=</span> <span style="color: #0000dd;">45</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> calcAngleIncrement<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 0 <span style="color: #000040;">||</span> _angle <span style="color: #000080;">==</span> 360<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; _px <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 45<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; _px <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; _py <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 135<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; _px <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; _py <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 180<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; _px <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 225<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; _px <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; _py <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_angle <span style="color: #000080;">==</span> 315<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; _px <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; _py <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p><a href="http://blog.bsoares.com.br/wp-content/uploads/2009/07/PongMatrix.zip" target="_blank">Código fonte do experimento (Arduino e Flash).</a></p>

<div class="ngg-galleryoverview" id="ngg-gallery-6-532">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-36" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/ping-pong-com-matriz-de-leds-8x8-arduino/pong-with-8x8-led-matrix-on-arduino-4.jpg" title=" "  >
								<img title="pong-with-8x8-led-matrix-on-arduino-4" alt="pong-with-8x8-led-matrix-on-arduino-4" src="http://blog.bsoares.com.br/wp-content/gallery/ping-pong-com-matriz-de-leds-8x8-arduino/thumbs/thumbs_pong-with-8x8-led-matrix-on-arduino-4.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-35" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/ping-pong-com-matriz-de-leds-8x8-arduino/pong-with-8x8-led-matrix-on-arduino-3.jpg" title=" "  >
								<img title="pong-with-8x8-led-matrix-on-arduino-3" alt="pong-with-8x8-led-matrix-on-arduino-3" src="http://blog.bsoares.com.br/wp-content/gallery/ping-pong-com-matriz-de-leds-8x8-arduino/thumbs/thumbs_pong-with-8x8-led-matrix-on-arduino-3.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-34" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/ping-pong-com-matriz-de-leds-8x8-arduino/pong-with-8x8-led-matrix-on-arduino-2.jpg" title=" "  >
								<img title="pong-with-8x8-led-matrix-on-arduino-2" alt="pong-with-8x8-led-matrix-on-arduino-2" src="http://blog.bsoares.com.br/wp-content/gallery/ping-pong-com-matriz-de-leds-8x8-arduino/thumbs/thumbs_pong-with-8x8-led-matrix-on-arduino-2.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-33" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/ping-pong-com-matriz-de-leds-8x8-arduino/pong-with-8x8-led-matrix-on-arduino-1.jpg" title=" "  >
								<img title="pong-with-8x8-led-matrix-on-arduino-1" alt="pong-with-8x8-led-matrix-on-arduino-1" src="http://blog.bsoares.com.br/wp-content/gallery/ping-pong-com-matriz-de-leds-8x8-arduino/thumbs/thumbs_pong-with-8x8-led-matrix-on-arduino-1.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p><strong>Conteúdo relacionado:</strong><br />
<a href="http://www.instructables.com/id/Pong-with-8x8-Led-Matrix-on-Arduino" target="_blank">Instructables</a><br />
<a href="http://www.flickr.com/photos/bsoares/sets/72157620919850875/" target="_blank">Mais fotos no Flickr</a><br />
<a href="http://www.youtube.com/watch?v=lvAlKH5SzYk" target="_blank">Ping Pong com Matriz de Leds 8&#215;8 no YouTube</a><br />
<a href="http://www.arduino.cc/playground/Main/DirectDriveLEDMatrix" target="_blank">Arduino 8&#215;8 LED Matrix Direct drive</a><br />
<a href="http://pt.wikipedia.org/wiki/Pong" target="_blank">O primeiro videogame lucrativo da história (Pong)</a><br />
<a href="http://en.wikipedia.org/wiki/Dot_matrix" target="_blank">Led Dot Matrix</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/arduino/ping-pong-with-8x8-led-matrix-on-arduino/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>PianoDuino (Arduino + Processing + SoundCipher)</title>
		<link>http://blog.bsoares.com.br/processing/pianoduino-arduino-processing-soundcipher</link>
		<comments>http://blog.bsoares.com.br/processing/pianoduino-arduino-processing-soundcipher#comments</comments>
		<pubDate>Sat, 30 May 2009 18:17:48 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[4051]]></category>
		<category><![CDATA[Demultiplexer]]></category>
		<category><![CDATA[Multiplexer]]></category>
		<category><![CDATA[Open Hardware]]></category>
		<category><![CDATA[Sound]]></category>
		<category><![CDATA[SoundCipher]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=406</guid>
		<description><![CDATA[PianoDuino é um experimento simples que integra Arduino, Processing e uma biblioteca para manipular sons, a SoundCipher. A ideia serviu para experimentar o Multiplexador / Demultiplexador 4051.

PianoDuino (Arduino + Processing + SoundCipher) from Bruno Soares on Vimeo.

Arduino:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152/**
&#160;* PianoDuino
&#160;*
&#160;* @author &#160; Bruno Soares
&#160;* @link &#160; &#160; http://www.bsoares.com.br
&#160;* @language Arduino / C++
&#160;*/

#define PIN_SELECTOR0 2
#define PIN_SELECTOR1 3
#define PIN_SELECTOR2 [...]]]></description>
			<content:encoded><![CDATA[<p>PianoDuino é um experimento simples que integra <a href="http://arduino.cc" target="_blank">Arduino</a>, <a href="http://processing.org" target="_blank">Processing</a> e uma biblioteca para manipular sons, a <a href="http://soundcipher.org/" target="_blank">SoundCipher</a>. A ideia serviu para experimentar o <a href="http://www.arduino.cc/playground/Learning/4051" target="_blank">Multiplexador / Demultiplexador 4051</a>.</p>
<p><center><object width="400" height="307"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4916367&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=c9ff23&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=4916367&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=c9ff23&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="307"></embed></object>
<p><a href="http://vimeo.com/4916367">PianoDuino (Arduino + Processing + SoundCipher)</a> from <a href="http://vimeo.com/bsoares">Bruno Soares</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p></center></p>
<p><strong>Arduino:</strong></p>
<div class="codecolorer-container cpp mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000; font-style: italic;">/**<br />
&nbsp;* PianoDuino<br />
&nbsp;*<br />
&nbsp;* @author &nbsp; Bruno Soares<br />
&nbsp;* @link &nbsp; &nbsp; http://www.bsoares.com.br<br />
&nbsp;* @language Arduino / C++<br />
&nbsp;*/</span><br />
<br />
<span style="color: #339900;">#define PIN_SELECTOR0 2</span><br />
<span style="color: #339900;">#define PIN_SELECTOR1 3</span><br />
<span style="color: #339900;">#define PIN_SELECTOR2 4</span><br />
<br />
<span style="color: #0000ff;">int</span> value<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">int</span> count<span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// Selectors</span><br />
byte s0<span style="color: #008080;">;</span><br />
byte s1<span style="color: #008080;">;</span><br />
byte s2<span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">void</span> setup<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; Serial.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span>9600<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; pinMode<span style="color: #008000;">&#40;</span>PIN_SELECTOR0, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; pinMode<span style="color: #008000;">&#40;</span>PIN_SELECTOR1, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; pinMode<span style="color: #008000;">&#40;</span>PIN_SELECTOR2, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> loop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> count <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #008080;">;</span> count<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666;">// Extract active bits</span><br />
&nbsp; &nbsp; s0 <span style="color: #000080;">=</span> &nbsp;count &nbsp; &nbsp; &nbsp; <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; s1 <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>count <span style="color: #000080;">&gt;&gt;</span> 1<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; s2 <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>count <span style="color: #000080;">&gt;&gt;</span> 2<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666;">// Select input</span><br />
&nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>2, s0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>3, s1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>4, s2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666;">// Read input selected</span><br />
&nbsp; &nbsp; value <span style="color: #000080;">=</span> analogRead<span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>value <span style="color: #000080;">&gt;</span> 5<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span>count<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">while</span><span style="color: #008000;">&#40;</span>analogRead<span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> 5<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p><strong>Processing:</strong></p>
<div class="codecolorer-container java mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp;* PianoDuino<br />
&nbsp;*<br />
&nbsp;* @author &nbsp; Bruno Soares<br />
&nbsp;* @link &nbsp; &nbsp; http://www.bsoares.com.br<br />
&nbsp;* @language Processing<br />
&nbsp;*/</span><br />
<br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">arb.soundcipher.*</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.serial.*</span><span style="color: #339933;">;</span><br />
<br />
SoundCipher<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> sc <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SoundCipher<span style="color: #009900;">&#91;</span>8<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
Serial port<span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">int</span> portValue <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> sc.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; sc<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SoundCipher<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; println<span style="color: #009900;">&#40;</span>Serial.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; port <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Serial<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, Serial.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>1<span style="color: #009900;">&#93;</span>, 14400<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span>port.<span style="color: #006633;">available</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> 0<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; portValue <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>port.<span style="color: #006633;">readString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span>0, 1<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; print<span style="color: #009900;">&#40;</span>portValue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; sc<span style="color: #009900;">&#91;</span>portValue<span style="color: #009900;">&#93;</span>.<span style="color: #006633;">playNote</span><span style="color: #009900;">&#40;</span>80 <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>portValue <span style="color: #339933;">*</span> 7<span style="color: #009900;">&#41;</span>, 100, 2.5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p><a href="http://blog.bsoares.com.br/wp-content/uploads/2009/05/pianduino.zip">Baixe o código fonte completo aqui</a>.</p>
<p>&nbsp;<br />

<div class="ngg-galleryoverview" id="ngg-gallery-4-406">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-17" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/pianoduino/PianoDuino-Arduino-Processing-SoundCipher-(3).jpg" rel="shadowbox[post-406];player=img;" title=" "  >
								<img title="PianoDuino-Arduino-Processing-SoundCipher-(3).jpg" alt="PianoDuino-Arduino-Processing-SoundCipher-(3).jpg" src="http://blog.bsoares.com.br/wp-content/gallery/pianoduino/thumbs/thumbs_PianoDuino-Arduino-Processing-SoundCipher-(3).jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-18" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/pianoduino/PianoDuino-Arduino-Processing-SoundCipher-(5).jpg" rel="shadowbox[post-406];player=img;" title=" "  >
								<img title="PianoDuino-Arduino-Processing-SoundCipher-(5).jpg" alt="PianoDuino-Arduino-Processing-SoundCipher-(5).jpg" src="http://blog.bsoares.com.br/wp-content/gallery/pianoduino/thumbs/thumbs_PianoDuino-Arduino-Processing-SoundCipher-(5).jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-19" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/pianoduino/PianoDuino-Arduino-Processing-SoundCipher-(6).jpg" rel="shadowbox[post-406];player=img;" title=" "  >
								<img title="PianoDuino-Arduino-Processing-SoundCipher-(6).jpg" alt="PianoDuino-Arduino-Processing-SoundCipher-(6).jpg" src="http://blog.bsoares.com.br/wp-content/gallery/pianoduino/thumbs/thumbs_PianoDuino-Arduino-Processing-SoundCipher-(6).jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-20" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/pianoduino/PianoDuino-Arduino-Processing-SoundCipher.jpg" rel="shadowbox[post-406];player=img;" title=" "  >
								<img title="PianoDuino-Arduino-Processing-SoundCipher.jpg" alt="PianoDuino-Arduino-Processing-SoundCipher.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/pianoduino/thumbs/thumbs_PianoDuino-Arduino-Processing-SoundCipher.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>

<br />
&nbsp;</p>
<p><strong>Conteúdo relacionado:</strong><br />
<a href="http://www.flickr.com/photos/bsoares/sets/72157619009072330/" target="_blank">Fotos no Flickr</a><br />
<a href="http://arduino.cc" target="_blank">Arduino</a><br />
<a href="http://processing.org" target="_blank">Processing</a><br />
<a href="http://soundcipher.org/" target="_blank">SoundCipher</a><br />
<a href="http://www.arduino.cc/playground/Learning/4051" target="_blank">Analog multiplexer / demultiplexer 4051</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/processing/pianoduino-arduino-processing-soundcipher/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Operações binárias</title>
		<link>http://blog.bsoares.com.br/aspnet/operacoes-binarias</link>
		<comments>http://blog.bsoares.com.br/aspnet/operacoes-binarias#comments</comments>
		<pubDate>Tue, 26 May 2009 02:28:09 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Matemática]]></category>
		<category><![CDATA[Open Hardware]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=340</guid>
		<description><![CDATA[Ultimamente tenho me deparado com muitos trechos de códigos que utilizam operações binárias, como chaveamento de multiplexador, extração de RGB a partir de um inteiro ou hexadecimal, bitshift para controlar LED Matrix, etc&#8230; E finalmente dei aquela estuda, agora vai ai um post sobre o que resultou o estudo.
Obs.: Os trechos de códigos deste post [...]]]></description>
			<content:encoded><![CDATA[<p>Ultimamente tenho me deparado com muitos trechos de códigos que utilizam <a href="http://en.wikipedia.org/wiki/Bitwise_operation" target="_blank">operações binárias</a>, como chaveamento de <a href="http://pt.wikipedia.org/wiki/Multiplexador" target="_blank">multiplexador</a>, extração de <a href="http://pt.wikipedia.org/wiki/RGB" target="_blank">RGB</a> a partir de um inteiro ou <a href="http://pt.wikipedia.org/wiki/Sistema_hexadecimal" target="_blank">hexadecimal</a>, bitshift para controlar <a href="http://blog.bsoares.com.br/tag/8x8-led-matrix">LED Matrix</a>, etc&#8230; E finalmente dei aquela estuda, agora vai ai um post sobre o que resultou o estudo.</p>
<p>Obs.: Os trechos de códigos deste post foram escritos em <a href="http://blog.bsoares.com.br/tag/as3">ActionScript</a>, mas pode ser aplicado a C, <a href="http://blog.bsoares.com.br/tag/cpp">C++</a>, Java, <a href="http://blog.bsoares.com.br/tag/processing">Processing</a>, <a href="http://blog.bsoares.com.br/tag/php">PHP</a>, entre outras linguagens.</p>
<hr />
• <a href="#introducao">Introdução</a><br />
• Bit Shift<br />
&nbsp;&nbsp;&nbsp;• <a href="#bitwise-right-shift">Operador >> (bitwise right shift)</a><br />
&nbsp;&nbsp;&nbsp;• <a href="#bitwise-left-shift">Operador << (bitwise left shift)</a><br />
• Operações Bitwise<br />
&nbsp;&nbsp;&nbsp;• <a href="#bitwise-and">Operador &#038; (bitwise AND)</a><br />
&nbsp;&nbsp;&nbsp;• <a href="#bitwise-or">Operador | (bitwise OR)</a><br />
&nbsp;&nbsp;&nbsp;• <a href="#bitwise-xor">Operador ^ (bitwise XOR)</a><br />
&nbsp;&nbsp;&nbsp;• <a href="#bitwise-not">Operador ~ (bitwise NOT)</a><br />
• Exemplos<br />
&nbsp;&nbsp;&nbsp;• <a href="#extract-rgb">Extraindo o RGB de uma cor</a><br />
&nbsp;&nbsp;&nbsp;• <a href="#multiplexer-4051">Chaveando multiplexador 4051</a><br />
&nbsp;</p>
<hr /><a name="introducao"><strong>Introdução</strong></a><br />
Um operador binário, como o nome sugere, é um operador que trabalha com a representação binária do número, e como normalmente não sabemos a representação binária dos números de cabeça, vamos utilizar a tabela abaixo:</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"> -----------------------
|      BIN |  DEC | HEX |
|-----------------------|
|        1 |    1 |   1 |
|       10 |    2 |   2 |
|       11 |    3 |   3 |
|      100 |    4 |   4 |
|      101 |    5 |   5 |
|      110 |    6 |   6 |
|      111 |    7 |   7 |
|     1000 |    8 |   8 |
|     1001 |    9 |   9 |
|     1010 |   10 |   A |
|     1011 |   11 |   B |
|     1100 |   12 |   C |
|     1101 |   13 |   D |
|     1110 |   14 |   E |
|     1111 |   15 |   F |
|    10000 |   16 |  10 |
|    10001 |   17 |  11 |
|    10010 |   18 |  12 |
|    10011 |   19 |  13 |
|    10100 |   20 |  14 |
|-----------------------|
| 11111111 |  255 |  FF |
 ----------------------- </pre>
<p>A tabela lista os números de 1 à 20 e 255 em três bases diferentes:<br />
• <a href="http://pt.wikipedia.org/wiki/Sistema_bin%C3%A1rio_%28matem%C3%A1tica%29" target="_blank">Binário (BIN)</a><br />
• Decimal (DEC)<br />
• <a href="http://pt.wikipedia.org/wiki/Sistema_hexadecimal" target="_blank">Hexadecimal (HEX)</a></p>
<p>Analisando a tabela podemos concluir que 3d = 11b, 19d = 10011b (as letras d e b significam decimal e binário respectivamente). Lembrando que pode ser utilizada uma calculadora que opere em binário (como a do windows) ou uma alternativa de conversão de bases on-line como está: <a href="http://calculadoraonline.com.br/view/conversao-binario.php" target="_blank">&#8220;Conversão de número binário&#8221;</a>.</p>
<p>Então vamos <strong>deslocar</strong>, <strong>escorregar</strong>, <strong>escovar</strong> alguns bits para entender melhor.</p>
<p>
<hr /><a name="bitwise-right-shift"><strong>Operador >></strong></a><br />
Deslocamento de bits para a direita (bitwise right shift)</p>
<div class="codecolorer-container actionscript3 mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>8 <span style="color: #000066; font-weight: bold;">&gt;&gt;</span> 1<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> <span style="color: #009900; font-style: italic;">// 4</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>8 <span style="color: #000066; font-weight: bold;">&gt;&gt;</span> 2<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> <span style="color: #009900; font-style: italic;">// 2</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>8 <span style="color: #000066; font-weight: bold;">&gt;&gt;</span> 3<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> <span style="color: #009900; font-style: italic;">// 1</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>8 <span style="color: #000066; font-weight: bold;">&gt;&gt;</span> 4<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> <span style="color: #009900; font-style: italic;">// 0</span></div></td></tr></tbody></table></div>
<p>Olhando os números na base decimal faz pouco sentido, ou talvez nenhum sentido, então passamos os números corretos para a base binária e tudo fica mais claro:<br />
8d = 1000b (8 decimal é igual a 1000 em binário), então:<br />
1000b >> 1 (deslocando uma casa para direita) temos o número:<br />
100b que em decimal é 4(dê uma olhada na tabela).</p>
<p>Agora ficou fácil não? Vamos deslocar o número 13:</p>
<div class="codecolorer-container actionscript3 mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>13 <span style="color: #000066; font-weight: bold;">&gt;&gt;</span> 1<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> <span style="color: #009900; font-style: italic;">// 6</span></div></td></tr></tbody></table></div>
<p>13 em binário é 1101, deslocando uma casa para a direita (ou removendo 1 bit), fica 110, e 110 é igual a 6 em decimal.</p>
<p>
<hr /><a name="bitwise-left-shift"><strong>Operador <<</strong></a><br />
Deslocamento de bits para a esquerda (bitwise left shift)</p>
<div class="codecolorer-container actionscript3 mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>2 <span style="color: #000066; font-weight: bold;">&lt;&lt;</span> 1<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> <span style="color: #009900; font-style: italic;">// 4</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>2 <span style="color: #000066; font-weight: bold;">&lt;&lt;</span> 2<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> <span style="color: #009900; font-style: italic;">// 8</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>2 <span style="color: #000066; font-weight: bold;">&lt;&lt;</span> 3<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> <span style="color: #009900; font-style: italic;">// 16</span></div></td></tr></tbody></table></div>
<p>Agora é só seguir o mesmo raciocino já utilizando anteriormente.<br />
Se 2 em base binária é igual a 10 e deslocarmos um bit para esquerda, vamos ganhar mais um zero, ficando com 100 que é igual a 4 em decimal.</p>
<p>
<hr /><a name="bitwise-and"><strong>Operador &#038;</strong></a><br />
AND binário (bitwise AND)<br />
O operador &#038; compara bit a bit os números a sua direita e esquerda, por exemplo o resultado de 10 &#038; 11 é 10:</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  1010
&#038; 1011
------
  1010</pre>
<p>A comparação bit-a-bit somente retorna True (1) quando os bits comparados são iguais a 1, caso contrário retorna False (0). Formando assim um novo número.<br />
Mais alguns exemplos para fortalecer:</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
|14 &#038;  9|13 &#038; 11|20 &#038;  9|14 &#038; 10|89 &#038;  112|45  &#038;  77|255  &#038;  13|112 &#038;  255|
|       |       |       |       |         |         |          |          |
|  1110 |  1101 |  10100|  1110 |  1011001|   101101|  11111111|   1110000|
|&#038; 1001 |&#038; 1011 |&#038;  1001|&#038; 1010 |&#038; 1110000|&#038; 1001101|&#038;     1101|&#038; 11111111|
|  ---- |  ---- |  -----|  ---- |  -------|  -------|  --------|  --------|
|  1000 |  1001 |      0|  1010 |  1010000|     1101|      1101|   1110000|
|    8d |    9d |     0d|   10d |      80d|      13d|       13d|      112d|</pre>
<p>
<hr /><a name="bitwise-or"><strong>Operador |</strong></a><br />
OR binário (bitwise OR)<br />
O operador | tem a mesma função do operador OR comum (||) só que atua bit-a-bit, assim como os outros operadores binários. Vejamos um exemplo:</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  1010
| 1011
------
  1011</pre>
<p>Se um dos bits comparados forem iguais a 1 a expressão retornará 1, caso os dois bits comparados forem iguais a 0, a expressão retorna 0. Agora vamos refazer o exemplo anterior trocando apenas o operador &#038; (and binário) por | (or binário):</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
|14 |  9|13 | 11|20 |  9|14 | 10|89 |  112|45  |  77|255  |  13|112 |  255|
|       |       |       |       |         |         |          |          |
|  1110 |  1101 |  10100|  1110 |  1011001|   101101|  11111111|   1110000|
|| 1001 || 1011 ||  1001|| 1010 || 1110000|| 1001101||     1101|| 11111111|
|  ---- |  ---- |  -----|  ---- |  -------|  -------|  --------|  --------|
|  1111 |  1111 |  11101|  1110 |  1111001|  1101101|  11111111|  11111111|
|   15d |   15d |    29d|   14d |     121d|     109d|      255d|      255d|</pre>
<p>
<hr /><a name="bitwise-xor"><strong>Operador ^</strong></a><br />
OU exclusivo (bitwise XOR)<br />
A letra X na frente do OR significa Exclusive (Exclusive OR). Isso quer dizer que este operador faz a comparação binária de dois números e resulta os bits que são diferentes. Por exemplos, quais são os bits diferentes entre os números 10 e 11?</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  1010
^ 1011
------
     1</pre>
<p>Vamos novamente trocar o operador do exemplo anterior para analisar os resultados:</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
|14 ^  9|13 ^ 11|20 ^  9|14 ^ 10|89 ^  112|45  ^  77|255  ^  13|112 ^  255|
|       |       |       |       |         |         |          |          |
|  1110 |  1101 |  10100|  1110 |  1011001|   101101|  11111111|   1110000|
|^ 1001 |^ 1011 |^  1001|^ 1010 |^ 1110000|^ 1001101|^     1101|^ 11111111|
|  ---- |  ---- |  -----|  ---- |  -------|  -------|  --------|  --------|
|   111 |   110 |  11101|   100 |   101001|  1100000|  11110010|  10001111|
|    7d |    6d |    29d|    4d |      41d|      96d|      242d|      143d|</pre>
<p>
<hr /><a name="bitwise-not"><strong>Operador ~</strong></a><br />
Negação (bitwise NOT)<br />
O operador NOT inverte o sinal e complementa em um.<br />
Negando o número 168 (~168) teremos -169.</p>
<p>Alguns exemplos:</p>
<div class="codecolorer-container actionscript3 mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #000066; font-weight: bold;">~</span>7<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> &nbsp; <span style="color: #009900; font-style: italic;">// -8</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #000066; font-weight: bold;">~-</span>7<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> &nbsp;<span style="color: #009900; font-style: italic;">// 6</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #000066; font-weight: bold;">~</span>14<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> &nbsp;<span style="color: #009900; font-style: italic;">// -15</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #000066; font-weight: bold;">~</span>13<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> &nbsp;<span style="color: #009900; font-style: italic;">// -14</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #000066; font-weight: bold;">~</span>255<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> <span style="color: #009900; font-style: italic;">// -256</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #000066; font-weight: bold;">~</span>112<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span> <span style="color: #009900; font-style: italic;">// -113</span></div></td></tr></tbody></table></div>
</p>
<p>&nbsp;</p>
<hr /><a name="extract-rgb"><strong>Extraindo o RGB de uma cor</strong></a><br />
Sabendo que uma cor no formato RGB utiliza dois dígitos hexadecimais para definir quanto existe de Vermelho, Verde e Azul (respectivamente), formando cores como: Vermelho (FF0000), Cinza (C0C0C0), Laranja (FF9900), etc. Temos ai a possibilidade de gerar 16.581.375 de cores com este código, é só fazer a conta para conferir: 255 * 255 * 255 ou FF * FF * FF.<br />
Vamos desmembrar um tom de azul (<strong><font color="#347BB7">#347BB7</font></strong>) para saber quanto esta cor tem de Vermelho, Verde e Azul (o valor dos canais RGB).</p>
<div class="codecolorer-container actionscript3 mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900; font-style: italic;">// DEC: 3439543</span><br />
<span style="color: #009900; font-style: italic;">// BIN: 1101000111101110110111</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">color</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a> = 0x347BB7<span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #6699cc; font-weight: bold;">var</span> r<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a> = <span style="color: #000000;">&#40;</span><span style="color: #004993;">color</span> <span style="color: #000066; font-weight: bold;">&gt;&gt;</span> 16<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">&amp;</span> 0xFF<span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> g<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a> = <span style="color: #000000;">&#40;</span><span style="color: #004993;">color</span> <span style="color: #000066; font-weight: bold;">&gt;&gt;</span> &nbsp;8<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">&amp;</span> 0xFF<span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">b</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a> = &nbsp;<span style="color: #004993;">color</span> &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">&amp;</span> 0xFF<span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Red:&quot;</span><span style="color: #000066; font-weight: bold;">,</span> r<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;Green:&quot;</span><span style="color: #000066; font-weight: bold;">,</span> g<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;Blue:&quot;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">b</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #009900; font-style: italic;">// Red: 52 Green: 123 Blue: 183</span></div></td></tr></tbody></table></div>
<p>Linha 5) Deslocando 16 bits para a direita temos:</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  1101000111101110110111 >> 16
=                 110100 (DEC: 52)</pre>
<p>Para o caso do vermelho não precisamos continuar a expressão (&#038; 0xFF),<br />
pois deslocando 16 bits para a direita já temos o resultado do vermelho,<br />
mas se a cor estivesse no formato ARGB (Alpha Red Green Blue), seria necessário.</p>
<p>Linha 6) Deslocando 8 bits para conseguir o verde:</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  1101000111101110110111 >> 8
=         11010001111011 (DEC: 13435)</pre>
<p>Só com o valor do deslocamentos não vamos conseguir a cor verde, então utilizamos o<br />
operador &#038; (AND) com o valor 255 (0xFF) para extrair a parte binária que nos interessa:</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  11010001111011 (DEC: 13435)
&#038;       11111111 (DEC: 255, HEX: 0xFF)
  --------------
        01111011 (DEC: 123)</pre>
<p>Linha 7) Para extrair o azul não precisamos deslocar bits e sim pegar os últimos 8 bits:</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  1101000111101110110111
&#038;               11111111 (DEC: 255, HEX: 0xFF)
  ----------------------
                10110111 (DEC: 183)</pre>
<p>Agora voltando para o hexadecimal:</p>
<div class="codecolorer-container actionscript3 mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #6699cc; font-weight: bold;">var</span> r<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a> = <span style="color: #000000; font-weight:bold;">52</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> g<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a> = <span style="color: #000000; font-weight:bold;">123</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">b</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a> = <span style="color: #000000; font-weight:bold;">183</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">color</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a> = <span style="color: #000000;">&#40;</span>r <span style="color: #000066; font-weight: bold;">&lt;&lt;</span> 16<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">|</span> <span style="color: #000000;">&#40;</span>g <span style="color: #000066; font-weight: bold;">&lt;&lt;</span> 8<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">|</span> <span style="color: #004993;">b</span><span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">color</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">toString</span><span style="color: #000000;">&#40;</span>16<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #009900; font-style: italic;">// 347bb7</span></div></td></tr></tbody></table></div>
<p>Linha 4) Deslocando 16 bits para a esquerda do número 52 (Vermelho):</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  110100 << 16
= 1101000000000000000000</pre>
<p>Deslocando 8 bits para a esquerda do número 123 (Verde):</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  1111011 << 8
= 111101100000000</pre>
<p>Efetuando o OR (|) com o resultado das duas operações ((r << 16) | (g << 8)):</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  1101000000000000000000
|        111101100000000
  ----------------------
  1101000111101100000000</pre>
<p>Efetuando a última operação, o OR com o Azul (183)</p>
<pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;">
  1101000111101100000000
| 0000000000000010110111
  ----------------------
  1101000111101110110111</pre>
<p>O resultado agora ficou claro. O número 1101000111101110110111 (binário) é igual a 3439543 (decimal) e 347BB7 (hexadecimal).</p>
<p>&nbsp;</p>
<hr /><a name="multiplexer-4051"><strong>Chaveando multiplexador 4051</strong></a><br />
A tarefa de chavear um Multiplexador / Demultiplexador (MUX / DEMUX) 4051 é muito parecida com a extração dos canais RGB de uma cor. Você só precisa Ligar ou Desligar três pinos de seleção (select pins) para que o circuito interprete o valor gerado e transmita a voltagem da entrada desejada.<br />
Existe um gif animado do <a href="http://www.rogercom.com" target="_blank">RogerCom</a> muito didático que demonstra o funcionamento do CI 4051, <a href="http://blog.bsoares.com.br/wp-content/uploads/2009/05/animacd4051b.gif" rel="shadowbox[post-340];player=img;" target="_blank">gif animado CI 4051 aqui</a>.<br />
Por exemplo, para ler a entrada 3, precisamos desligar o pino de seleção 0, ligar o 1 e o 2, formando assim o número 011 (binário) que é igual a 3 em decimal. Veja no código (Escrito em Arduino / C++):</p>
<div class="codecolorer-container cpp mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666;">// Entrada desejada</span><br />
<span style="color: #0000ff;">int</span> count <span style="color: #000080;">=</span> <span style="color: #0000dd;">3</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// Extração dos bits ativos</span><br />
byte s0 <span style="color: #000080;">=</span> &nbsp;count &nbsp; &nbsp; &nbsp; <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x1</span><span style="color: #008080;">;</span><br />
byte s1 <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>count <span style="color: #000080;">&gt;&gt;</span> 1<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x1</span><span style="color: #008080;">;</span><br />
byte s2 <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>count <span style="color: #000080;">&gt;&gt;</span> 2<span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0x1</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// Ligando ou desligando os pinos de seleção</span><br />
digitalWrite<span style="color: #008000;">&#40;</span>2, s0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
digitalWrite<span style="color: #008000;">&#40;</span>3, s1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
digitalWrite<span style="color: #008000;">&#40;</span>4, s2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></div></td></tr></tbody></table></div>
<hr /><strong>Conteúdo relacionado:</strong><br />
• <a href="http://en.wikipedia.org/wiki/Bitwise_operation" target="_blank">Bitwise operation on Wikipedia</a><br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/aspnet/operacoes-binarias/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Funções do C++ úteis para Arduino</title>
		<link>http://blog.bsoares.com.br/arduino/useful-functions-of-the-cpp-for-arduino</link>
		<comments>http://blog.bsoares.com.br/arduino/useful-functions-of-the-cpp-for-arduino#comments</comments>
		<pubDate>Sat, 16 May 2009 14:31:52 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Open Hardware]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=373</guid>
		<description><![CDATA[Para aqueles que sempre gostaram de eletrônica e que agora se envolveram com eletrônica digital, vai uma diga bem interessante.
Nós sabemos que para programar para microcontroladores é necessário entender um pouco de C, C++ ou até mesmo Assembly, e isso pode ser uma barreira para aqueles que tem interesse mas não dominam tais linguagens, então [...]]]></description>
			<content:encoded><![CDATA[<p>Para aqueles que sempre gostaram de eletrônica e que agora se envolveram com eletrônica digital, vai uma diga bem interessante.<br />
Nós sabemos que para programar para <a href="http://pt.wikipedia.org/wiki/Microcontrolador" target="_self">microcontroladores</a> é necessário entender um pouco de <a href="http://pt.wikipedia.org/wiki/C_(linguagem_de_programa%C3%A7%C3%A3o)" target="_blank">C</a>, <a href="http://pt.wikipedia.org/wiki/C%2B%2B" target="_blank">C++</a> ou até mesmo <a href="http://pt.wikipedia.org/wiki/Assembly" target="_blank">Assembly</a>, e isso pode ser uma barreira para aqueles que tem interesse mas não dominam tais linguagens, então vai ai um site que pode ajudar muito a encontrar as funções necessárias para se manipular string, arrays, converter tipos, alocar memória, efetuar operações matemáticas entre outros:<br />
<a href="http://www.cplusplus.com/" target="_blank">http://www.cplusplus.com/</a></p>
<p>Na verdade o que o programa compilador do código <a href="http://arduino.cc/" target="_self">Arduino</a> faz é simplesmente converter o código &#8220;Arduino&#8221; para C++, compilar e gravar no microcontrolador. Por isso que podemos utilizar muitas funções do C++ para o Arduino. Para conferir entre no diretório /applet (sua aplicação/applet) e abra o arquivo com o mesmo nome do seu &#8220;.pde&#8221; só que com a extensão &#8220;.cpp&#8221;.<br />
<strong><br />
</strong><em>Vou listar aqui algumas funções bem úteis:</em></p>
<p><strong>Conversão de tipos:</strong><a href="http://www.cplusplus.com/reference/clibrary/cstdlib/atof/" target="_blank"><br />
atof</a> &#8211; Converte string para double<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/" target="_blank">atoi</a> &#8211; Converte string  para integer<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdlib/itoa/" target="_blank">itoa</a> &#8211; Converte integer para string<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdlib/atol/" target="_blank">atol</a> &#8211; Converte string  para long integer<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdlib/strtod/" target="_blank">strtod</a> &#8211; Converte string  para double<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdlib/strtol/" target="_blank">strtol</a> &#8211; Converte string  para long integer<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdlib/strtoul/" target="_blank">strtoul</a> &#8211; Converte string  para unsigned long integer<br />
<span style="color: #ff0000;">Obs.:</span><strong> </strong>Você pode encontrar mais funões de conversão de tipos no site da <a href="http://arduino.cc/en/Reference/HomePage" target="_self">Arduino</a>:<br />
<a href="http://arduino.cc/en/Reference/CharCast" target="_blank">char()</a>, <a href="http://arduino.cc/en/Reference/ByteCast" target="_blank">byte()</a>, <a href="http://arduino.cc/en/Reference/IntCast" target="_blank">int()</a>, <a href="http://arduino.cc/en/Reference/LongCast" target="_blank">long()</a> e <a href="http://arduino.cc/en/Reference/FloatCast" target="_blank">float()</a></p>
<p><strong>Manipulação dinâmica da memória:<br />
</strong><a href="http://www.cplusplus.com/reference/clibrary/cstdlib/calloc/" target="_blank">calloc</a> &#8211; Aloca espaço na memória para um array<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdlib/free/" target="_blank">free</a> &#8211; Desaloca espaço na memória</p>
<p><strong>Busca e ordenação:</strong><br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdlib/bsearch/" target="_blank">bsearch</a> &#8211; Busca binária em arrays<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/" target="_blank">qsort</a> &#8211; Ordena elementos de um array</p>
<p><strong>Operações matemáticas (Math):<br />
</strong><a href="http://www.cplusplus.com/reference/clibrary/cmath/atan2/" target="_blank">atan2</a> &#8211; Calcula o arco tangente com dois parâmetros<br />
<a href="http://www.cplusplus.com/reference/clibrary/cmath/log/" target="_blank">log</a> &#8211; Calcula o logaritmo natural<br />
<a href="http://www.cplusplus.com/reference/clibrary/cmath/log10/" target="_blank">log10</a> &#8211; Calcula o logaritmo comum<br />
<a href="http://www.cplusplus.com/reference/clibrary/cmath/floor/" target="_blank">floor</a> &#8211; Arredonda um valor para baixo</p>
<p><strong>Manipulação de strings (char*):</strong><br />
<a href="http://www.cplusplus.com/reference/clibrary/cstring/strcat/" target="_blank">strcat</a> &#8211; Concatena strings<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstring/strncat/" target="_blank">strncat</a> &#8211; Concatena caracteres com base nas suas posições<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstring/strchr/" target="_blank">strchr</a> &#8211; Localiza a primeira ocorrência do caracter em uma string<br />
<a href="http://www.cplusplus.com/reference/clibrary/cstring/strstr/" target="_blank">strstr</a> &#8211; Localiza a primeira ocorrência de uma string dentro de outra</p>
<p>Vale a pena conferir e dar uma estudada.<strong></strong></p>
<p><strong>Conteúdo relacionado:</strong><br />
<a href="http://www.cplusplus.com" target="_blank"> Referência</a><a href="http://arduino.cc/" target="_blank"><br />
Arduino</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/arduino/useful-functions-of-the-cpp-for-arduino/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Classe C++ para controlar Display de 7 seguimentos</title>
		<link>http://blog.bsoares.com.br/arduino/cpp-class-for-controlling-7-segments-led-display</link>
		<comments>http://blog.bsoares.com.br/arduino/cpp-class-for-controlling-7-segments-led-display#comments</comments>
		<pubDate>Tue, 05 May 2009 03:25:58 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[7 Segments Display]]></category>
		<category><![CDATA[Open Hardware]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=312</guid>
		<description><![CDATA[No meio de um experimento com Display de 7 seguimentos e Arduino, achei melhor criar uma classe para tratar dos números exibidos no Display.
Deixo aqui a Classe e um exemplo de como usá-la.

Configuração de pinos (Digital) utilizada no exemplo:

Obs.: Está configuração pode ser modificada no momento em que é criada a instância da classe &#8220;Simple7Segments&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>No meio de um experimento com <a href="http://en.wikipedia.org/wiki/Seven-segment_display" target="_blank">Display de 7 seguimentos</a> e <a href="http://www.arduino.cc/" target="_blank">Arduino</a>, achei melhor criar uma classe para tratar dos números exibidos no Display.<br />
Deixo aqui a Classe e um exemplo de como usá-la.</p>
<p style="text-align: center;"><object width="470" height="360"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4447498&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=4447498&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="470" height="360"></embed></object></p>
<p><strong>Configuração de pinos (Digital) utilizada no exemplo:</strong><br />
<img src="http://blog.bsoares.com.br/wp-content/uploads/2009/05/7-segments-display-pin-configuration.gif" alt="7 Segments LED Display - Pin Configuration" /><br />
Obs.: Está configuração pode ser modificada no momento em que é criada a instância da classe &#8220;<strong>Simple7Segments</strong>&#8221; (<em>Simple7Segments display(2, 3, 4, 5, 6, 7, 8, 9);</em>).</p>
<p><strong>Simple7Segments.h</strong></p>
<div class="codecolorer-container cpp mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:200px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000; font-style: italic;">/**<br />
&nbsp;* Simple seven segments LED display<br />
&nbsp;*<br />
&nbsp;* @author &nbsp;Bruno Soares<br />
&nbsp;* @website www.bsoares.com.br<br />
&nbsp;*/</span><br />
<br />
<span style="color: #339900;">#ifndef Simple7Segments_h</span><br />
<span style="color: #339900;">#define Simple7Segments_h</span><br />
<br />
<span style="color: #339900;">#include &lt;inttypes.h&gt;</span><br />
<br />
<span style="color: #0000ff;">class</span> Simple7Segments<br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">private</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; uint8_t <span style="color: #000040;">*</span>_pins<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; uint8_t _count<span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #0000ff;">public</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; Simple7Segments<span style="color: #008000;">&#40;</span>uint8_t, uint8_t, uint8_t, uint8_t,<br />
&nbsp; &nbsp; &nbsp; uint8_t, uint8_t, uint8_t, uint8_t<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">void</span> showNumber<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">void</span> showAll<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">void</span> clearAll<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #339900;">#endif</span></div></td></tr></tbody></table></div>
<p><strong>Simple7Segments.cpp</strong></p>
<div class="codecolorer-container cpp mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:200px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000; font-style: italic;">/**<br />
&nbsp;* Simple seven segments LED display<br />
&nbsp;*<br />
&nbsp;* @author &nbsp;Bruno Soares<br />
&nbsp;* @website www.bsoares.com.br<br />
&nbsp;*/</span><br />
<br />
<span style="color: #339900;">#include &quot;Simple7Segments.h&quot;</span><br />
<span style="color: #339900;">#include &quot;WProgram.h&quot;</span><br />
<br />
<span style="color: #339900;">#include &lt;inttypes.h&gt;</span><br />
<br />
<span style="color: #339900;">#define QUANTITY_PINS 8</span><br />
<br />
Simple7Segments<span style="color: #008080;">::</span><span style="color: #007788;">Simple7Segments</span><span style="color: #008000;">&#40;</span>uint8_t a, uint8_t b, uint8_t c, uint8_t d,<br />
&nbsp; uint8_t e, uint8_t f, uint8_t g, uint8_t pd<span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #666666;">// Alocate memory for Array _pins</span><br />
&nbsp; _pins <span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>uint8_t<span style="color: #000040;">*</span><span style="color: #008000;">&#41;</span><span style="color: #0000dd;">calloc</span><span style="color: #008000;">&#40;</span>QUANTITY_PINS, 4<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666;">// Transfer parameters to array pins</span><br />
&nbsp; _pins<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> a<span style="color: #008080;">;</span><br />
&nbsp; _pins<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> b<span style="color: #008080;">;</span><br />
&nbsp; _pins<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> c<span style="color: #008080;">;</span><br />
&nbsp; _pins<span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> d<span style="color: #008080;">;</span><br />
&nbsp; _pins<span style="color: #008000;">&#91;</span>4<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> e<span style="color: #008080;">;</span><br />
&nbsp; _pins<span style="color: #008000;">&#91;</span>5<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> f<span style="color: #008080;">;</span><br />
&nbsp; _pins<span style="color: #008000;">&#91;</span>6<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> g<span style="color: #008080;">;</span><br />
&nbsp; _pins<span style="color: #008000;">&#91;</span>7<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> pd<span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666;">// Set pin mode to all</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>_count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> _count <span style="color: #000080;">&lt;</span> QUANTITY_PINS<span style="color: #008080;">;</span> _count<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; pinMode<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>_count<span style="color: #008000;">&#93;</span>, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> Simple7Segments<span style="color: #008080;">::</span><span style="color: #007788;">showNumber</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> letter<span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; clearAll<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">switch</span> <span style="color: #008000;">&#40;</span>letter<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">case</span> <span style="color: #FF0000;">'0'</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>4<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>5<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">case</span> <span style="color: #FF0000;">'1'</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">case</span> <span style="color: #FF0000;">'2'</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>6<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>4<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">case</span> <span style="color: #FF0000;">'3'</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>6<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">case</span> <span style="color: #FF0000;">'4'</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>5<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>6<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">case</span> <span style="color: #FF0000;">'5'</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>5<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>6<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">case</span> <span style="color: #FF0000;">'6'</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>4<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>5<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>6<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">case</span> <span style="color: #FF0000;">'7'</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">case</span> <span style="color: #FF0000;">'8'</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>4<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>5<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>6<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">case</span> <span style="color: #FF0000;">'9'</span><span style="color: #008080;">:</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>5<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>6<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> Simple7Segments<span style="color: #008080;">::</span><span style="color: #007788;">clearAll</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>_count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> _count <span style="color: #000080;">&lt;</span> QUANTITY_PINS<span style="color: #008080;">;</span> _count<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>_count<span style="color: #008000;">&#93;</span>, LOW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> Simple7Segments<span style="color: #008080;">::</span><span style="color: #007788;">showAll</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>_count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> _count <span style="color: #000080;">&lt;</span> QUANTITY_PINS<span style="color: #008080;">;</span> _count<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; digitalWrite<span style="color: #008000;">&#40;</span>_pins<span style="color: #008000;">&#91;</span>_count<span style="color: #008000;">&#93;</span>, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p><strong>SevenSegmentsExample.pde</strong></p>
<div class="codecolorer-container cpp mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000; font-style: italic;">/**<br />
&nbsp;* Simple seven segments LED display<br />
&nbsp;*<br />
&nbsp;* @author &nbsp;Bruno Soares<br />
&nbsp;* @website www.bsoares.com.br<br />
&nbsp;*/</span><br />
<br />
<span style="color: #339900;">#include &quot;Simple7Segments.h&quot;</span><br />
<br />
<span style="color: #339900;">#define LED_FINISH 12</span><br />
<span style="color: #339900;">#define DELAY 500</span><br />
<br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// Define variable display.</span><br />
<span style="color: #666666;">// The numbers are the pins of the display</span><br />
Simple7Segments display<span style="color: #008000;">&#40;</span>2, 3, 4, 5, 6, 7, 8, 9<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">void</span> setup<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; pinMode<span style="color: #008000;">&#40;</span>LED_FINISH, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> loop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> buffer<span style="color: #008080;">;</span><br />
&nbsp; itoa<span style="color: #008000;">&#40;</span>count, buffer, 10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; display.<span style="color: #007788;">showNumber</span><span style="color: #008000;">&#40;</span>buffer<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; delay<span style="color: #008000;">&#40;</span>DELAY<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">++</span>count <span style="color: #000080;">==</span> 10<span style="color: #008000;">&#41;</span><br />
&nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; finish<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> finish<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>LED_FINISH, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; delay<span style="color: #008000;">&#40;</span>50<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>LED_FINISH, LOW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; delay<span style="color: #008000;">&#40;</span>50<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>LED_FINISH, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; delay<span style="color: #008000;">&#40;</span>50<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>LED_FINISH, LOW<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p>Linha 17) Cria uma instância da classe Simple7Segments passando no construtor os pinos correspondentes as posições no display.<br />
Linha 27) Converte o valor da variável contadora (count) para char* (&#8220;String&#8221;).<br />
Linha 28) Chama o método showNumber da instância display passando o número a exibir.<br />
Linha 37) Método chamado quando uma contagem de 0 à 9 chega ao fim (pisca o LED).</p>

<div class="ngg-galleryoverview" id="ngg-gallery-3-312">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-13" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/7-segments-led-display/7-segments-led-display-1.jpg" rel="shadowbox[post-312];player=img;" title=" "  >
								<img title="7-segments-led-display-1.jpg" alt="7-segments-led-display-1.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/7-segments-led-display/thumbs/thumbs_7-segments-led-display-1.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-14" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/7-segments-led-display/7-segments-led-display-2.jpg" rel="shadowbox[post-312];player=img;" title=" "  >
								<img title="7-segments-led-display-2.jpg" alt="7-segments-led-display-2.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/7-segments-led-display/thumbs/thumbs_7-segments-led-display-2.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-15" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/7-segments-led-display/7-segments-led-display-3.jpg" rel="shadowbox[post-312];player=img;" title=" "  >
								<img title="7-segments-led-display-3.jpg" alt="7-segments-led-display-3.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/7-segments-led-display/thumbs/thumbs_7-segments-led-display-3.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-16" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/7-segments-led-display/7-segments-led-display-4.jpg" rel="shadowbox[post-312];player=img;" title=" "  >
								<img title="7-segments-led-display-4.jpg" alt="7-segments-led-display-4.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/7-segments-led-display/thumbs/thumbs_7-segments-led-display-4.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>Faça o <a href="http://blog.bsoares.com.br/wp-content/uploads/2009/05/sevensegmentsexample.zip">download do código fonte completo aqui</a>.</p>
<p><strong>Conteúdo relacionado:</strong><br />
Arduino: <a href="http://www.arduino.cc/" target="_blank">http://www.arduino.cc/</a><br />
Mais fotos: <a href="http://www.flickr.com/photos/bsoares/sets/72157617609513978/" target="_blank">http://www.flickr.com/photos/bsoares/sets/72157617609513978/</a><br />
Display de 7 seguimento na Wikipedia: <a href="http://en.wikipedia.org/wiki/Seven-segment_display" target="_blank">http://en.wikipedia.org/wiki/Seven-segment_display</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/arduino/cpp-class-for-controlling-7-segments-led-display/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Controlando a Arduino com PHP via porta serial</title>
		<link>http://blog.bsoares.com.br/php/controlling-arduino-with-php</link>
		<comments>http://blog.bsoares.com.br/php/controlling-arduino-with-php#comments</comments>
		<pubDate>Sat, 02 May 2009 02:58:02 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Led]]></category>
		<category><![CDATA[Led RGB]]></category>
		<category><![CDATA[Open Hardware]]></category>
		<category><![CDATA[PWM]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=274</guid>
		<description><![CDATA[É isso mesmo, o PHP pode escrever ou ler dados da porta serial, e com isso podemos controlar a Arduino.

Você pode ligar o seu ar-condicionado, cafeteira, luz, etc&#8230; via Internet, e de uma forma bem simples.
Serialproxy também é uma ótima forma de se conectar a Arduino via Internet, utilizei no projeto Twitter Hardware, mas este [...]]]></description>
			<content:encoded><![CDATA[<p>É isso mesmo, o <a href="http://www.php.net/" target="_blank">PHP</a> pode escrever ou ler dados da porta serial, e com isso podemos controlar a <a href="http://www.arduino.cc/" target="_blank">Arduino</a>.</p>
<p style="text-align: center;"><object width="480" height="368"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4437541&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=4437541&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="368"></embed></object></p>
<p>Você pode ligar o seu ar-condicionado, cafeteira, luz, etc&#8230; via Internet, e de uma forma bem simples.<br />
Serialproxy também é uma ótima forma de se conectar a Arduino via Internet, utilizei no projeto <a href="http://blog.bsoares.com.br/arduino/twitter-hardware">Twitter Hardware</a>, mas este post é sobre <a href="http://www.php.net/" target="_blank">PHP</a>, então vamos lá.</p>
<p style="text-align: center;"><img src="http://blog.bsoares.com.br/wp-content/uploads/2009/04/arduino-php-diagram.jpg" alt="Arduino + PHP Diagram" /></p>
<p>Vou utilizar o exemplo descrito no post &#8220;<a href="http://blog.bsoares.com.br/processing/controlling-rgb-led-with-arduino-and-processing">Controlando Led RGB com Arduino e Processing</a>&#8221; (trocando o <a href="http://www.processing.org/" target="_blank">Processing</a> pelo PHP).</p>
<p>A função <a href="http://br2.php.net/manual/en/function.fopen.php" target="_blank">fopen</a> do PHP da suporte a escrita na porta serial:</p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$port</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/fopen"><span style="color: #990000;">fopen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'COM2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/fwrite"><span style="color: #990000;">fwrite</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$port</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<a href="http://www.php.net/fclose"><span style="color: #990000;">fclose</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$port</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Linha 1) Abre a conexão com a COM2 (porta serial onde a minha Arduino está conectada).<br />
Linha 2) Escreve na porta<br />
Linha 3) Fecha a conexão</p>
<p><strong>Código PHP do exemplo:</strong></p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009933; font-style: italic;">/**<br />
&nbsp;* Arduino + PHP<br />
&nbsp;*<br />
&nbsp;* @author &nbsp;Bruno Soares<br />
&nbsp;* @website www.bsoares.com.br<br />
&nbsp;*/</span><br />
<br />
<span style="color: #000088;">$color</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_REQUEST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'color'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$color</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$color</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$color</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/hexdec"><span style="color: #990000;">hexdec</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$color</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$message</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'^'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$color</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'$'</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// USB Serial Port (COM2)</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$portAddress</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'COM2'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Open connection on port</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$port</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/fopen"><span style="color: #990000;">fopen</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$portAddress</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Necessary when the Arduino reset after the connection</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/sleep"><span style="color: #990000;">sleep</span></a><span style="color: #009900;">&#40;</span>2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Send chars</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/fwrite"><span style="color: #990000;">fwrite</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$port</span><span style="color: #339933;">,</span> <span style="color: #000088;">$message</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">// Close connection</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/fclose"><span style="color: #990000;">fclose</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$port</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Linha 12) Converte a cor de hexadecimal para decimal.<br />
Linha 13) Coloca os caracteres que indicam o inicio e fim da mensagem.<br />
Linha 16) Define a variável com o endereço da porta (no meu caso COM2).<br />
Linha 19) Abre a &#8220;conexão&#8221; com a porta serial.<br />
Linha 22) Pausa o código por 2 segundo, pois a Arduino costuma reiniciar quando é feita uma conexão a ela.<br />
Linha 25) Escreve a mensagem com a cor na porta serial.<br />
Linha 28) Fecha a &#8220;conexão&#8221; com a porta serial.</p>
<p><em><font color="#990000">Update 09/07/2009:</font></em><br />
<strong>Lendo dados:</strong><br />
Tenho recebido diversos e-mails e até alguns comentários de pessoas que precisam ler dados de um sensor, potenciometro, ou qualquer coisa conectada a Arduino, e isso via PHP. Então vamos lá, preparei um código que faz isso de forma fácil.<br />
Acredito que um problema que o pessoal tem tido com esta tarefa é: você deve se dar tempo para a mensagem chegar a Arduino (não que isso seja muito tempo), e também para que a Arduino consiga responder:</p>
<p><strong>Código Arduino:</strong></p>
<div class="codecolorer-container cpp mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000; font-style: italic;">/**<br />
&nbsp;* Arduino + PHP<br />
&nbsp;*<br />
&nbsp;* @author &nbsp;Bruno Soares<br />
&nbsp;* @website www.bsoares.com.br<br />
&nbsp;*/</span><br />
<br />
<span style="color: #339900;">#define ANALOG_PIN 4</span><br />
<br />
<span style="color: #0000ff;">void</span> setup<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; Serial.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span>9600<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> loop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Serial.<span style="color: #007788;">available</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> 0<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Serial.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> <span style="color: #FF0000;">'1'</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span>analogRead<span style="color: #008000;">&#40;</span>ANALOG_PIN<span style="color: #008000;">&#41;</span>, DEC<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p><strong>Código PHP:</strong></p>
<div class="codecolorer-container php mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #009933; font-style: italic;">/**<br />
&nbsp;* Arduino + PHP<br />
&nbsp;*<br />
&nbsp;* @author &nbsp;Bruno Soares<br />
&nbsp;* @website www.bsoares.com.br<br />
&nbsp;*/</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Conecta na porta</span><br />
<span style="color: #000088;">$port</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/fopen"><span style="color: #990000;">fopen</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'COM2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w+'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Em alguns casos a Arduino pode reiniciar, por isso</span><br />
<span style="color: #666666; font-style: italic;">// é bom esperar para enviar informação depois de conectar</span><br />
<a href="http://www.php.net/sleep"><span style="color: #990000;">sleep</span></a><span style="color: #009900;">&#40;</span>2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Envia &quot;1&quot; para o programa na Arduino saber que deve responder</span><br />
<a href="http://www.php.net/fwrite"><span style="color: #990000;">fwrite</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$port</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Espera para que o dado enviado pelo PHP chegue até a Arduino</span><br />
<a href="http://www.php.net/sleep"><span style="color: #990000;">sleep</span></a><span style="color: #009900;">&#40;</span>1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Agora que a Arduino &quot;Provavelmente já respondeu&quot;, pega</span><br />
<span style="color: #666666; font-style: italic;">// o valor da resposta</span><br />
<span style="color: #b1b100;">echo</span> <a href="http://www.php.net/fgets"><span style="color: #990000;">fgets</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$port</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Fecha a conexão com a porta</span><br />
<a href="http://www.php.net/fclose"><span style="color: #990000;">fclose</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$port</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p><strong>O que esse código faz?</strong><br />
A Arduino fica em loop esperando  receber pela porta serial o numero 1, assim que recebido ela lê a voltagem do pino analógico 4 e escreve na porta serial.<br />
O PHP abre a porta serial, escreve &#8220;1&#8243;, e espera para ler novamente, quando lê novamente encontra o valor do pino analógico 4, assim como a Arduino escreveu.<br />
Bom, espero que este exemplo acabe com as dúvidas do pessoal que precise ler dados da Arduino :)</p>
<p><strong>Observações:</strong><br />
Caso você precise fazer um projeto onde muitos usuário vão acessar o script que escreve na porta serial, você deve implementar uma fila, de forma a não ter um usuário escrevendo na porta ao mesmo tempo que outro, isto geraria um erro.<br />
O código fonte escrito para a Arduino é o mesmo do post <a href="http://blog.bsoares.com.br/processing/controlling-rgb-led-with-arduino-and-processing">Controlando Led RGB com Arduino e Processing</a></p>
<p>Faça o <a href="http://blog.bsoares.com.br/wp-content/uploads/2009/05/arduino-php.zip">download do código fonte aqui</a>.</p>
<p><strong>Conteúdo relacionado:</strong><br />
Arduino: <a href="http://www.arduino.cc/" target="_blank">http://www.arduino.cc/</a><br />
Referência: <a href="http://www.arduinoprojects.com/?q=node/10" target="_blank">http://www.arduinoprojects.com/?q=node/10</a><br />
jQuery ColorPicker: <a href="http://www.eyecon.ro/colorpicker/" target="_blank">http://www.eyecon.ro/colorpicker/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/php/controlling-arduino-with-php/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Controlando Led RGB com Arduino e Processing</title>
		<link>http://blog.bsoares.com.br/processing/controlling-rgb-led-with-arduino-and-processing</link>
		<comments>http://blog.bsoares.com.br/processing/controlling-rgb-led-with-arduino-and-processing#comments</comments>
		<pubDate>Mon, 27 Apr 2009 02:10:31 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Led]]></category>
		<category><![CDATA[Led RGB]]></category>
		<category><![CDATA[Open Hardware]]></category>
		<category><![CDATA[PWM]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=247</guid>
		<description><![CDATA[Vamos a um exemplo de uso da Arduino onde controlo um Led RGB de quatro terminais através da porta serial.
Para enviar as cores através da serial usaremos processing.

Para combinar as cores de um Led RGB é necessário variar a voltagem em cada terminal, e para isso a Arduino conta com 6 pinos PWM (Pulse Width [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a um exemplo de uso da <a href="http://www.arduino.cc" target="_blank">Arduino</a> onde controlo um <a href="http://en.wikipedia.org/wiki/LED#RGB_systems" target="_blank">Led RGB</a> de quatro terminais através da porta serial.<br />
Para enviar as cores através da serial usaremos <a href="http://processing.org/" target="_blank">processing</a>.</p>
<p style="text-align: center;"><object width="480" height="360"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4334495&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=4334495&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00adef&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="360"></embed></object></p>
<p>Para combinar as cores de um Led RGB é necessário variar a voltagem em cada terminal, e para isso a Arduino conta com 6 pinos PWM (<a href="http://www.arduino.cc/en/Tutorial/PWM" target="_blank">Pulse Width Modulation</a>, <a href="http://pt.wikipedia.org/wiki/Modula%C3%A7%C3%A3o_por_largura_de_pulso" target="_blank">Modulação por largura de pulso</a>), somente 3 são necessários, pois o quarto terminal deve ser conectado a <a href="http://pt.wikipedia.org/wiki/Terra_(eletricidade)" target="_blank">GND</a> (terra).</p>
<p>No exemplo conectamos os pinos da seguinte forma:</p>
<ul>
<li>Terminal Vermelho no pino 9 (utilizando resistência de 150 Ohm)</li>
<li>Terminal Azul no pino 10 (utilizando resistência de 90 Ohm)</li>
<li>Terminal Verde no pino 11 (utilizando resistência de 90 Ohm)</li>
<li>Terminal terra no pino GND</li>
</ul>
<p>Obs.: Como não tinha em mãos os resistores liguei os terminais diretamente aos pinos da arduino, mas é importante ressaltar que isso pode danificar o seu led e com certeza reduzir o seu tempo de vida útil.</p>
<p><strong>Espesificação do Led usado:</strong></p>
<ul>
<li>Diâmetro: 5mm.</li>
<li>Bulbo: transparente.</li>
<li>Intensidade Luminosa: 8000 mcd.</li>
<li>Voltagem: vermelho = 1.9 ~ 2.4v; verde e azul = 3.2 ~ 3.6v.</li>
<li>Corrente: 20mA.</li>
<li>Ângulo: 20 ~ 25º.</li>
<li><img class="alignnone size-full wp-image-251" title="led_rgb_5mm" src="http://blog.bsoares.com.br/wp-content/uploads/2009/04/5mm_rgb_led-color-especification.jpg" alt="5mm rgb led color especification" /></li>
</ul>
<p><strong>Vamos ao código utilizado na arduino:</strong></p>
<div class="codecolorer-container cpp mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000; font-style: italic;">/**<br />
&nbsp;* Controller LED RGB<br />
&nbsp;* <br />
&nbsp;* @author &nbsp;Bruno Soares<br />
&nbsp;* @website www.bsoares.com.br<br />
&nbsp;*/</span><br />
<br />
<span style="color: #339900;">#define START_COLOR_CHAR '^'</span><br />
<span style="color: #339900;">#define END_COLOR_CHAR '$'</span><br />
<span style="color: #339900;">#define COLOR_SIZE 8</span><br />
<span style="color: #339900;">#define PIN_RED 9</span><br />
<span style="color: #339900;">#define PIN_GREEN 11</span><br />
<span style="color: #339900;">#define PIN_BLUE 10</span><br />
<br />
<span style="color: #0000ff;">char</span> serialMessage<span style="color: #008000;">&#91;</span>COLOR_SIZE<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> readChar<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> count<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> color<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> r<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> g<span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> b<span style="color: #008080;">;</span><br />
boolean readingSerial<span style="color: #008080;">;</span><br />
<br />
<span style="color: #0000ff;">void</span> setup<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; Serial.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span>9600<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; readingSerial <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> loop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Serial.<span style="color: #007788;">available</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> 0 <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>readingSerial<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Serial.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> START_COLOR_CHAR<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; serialReadColor<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> serialReadColor<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; readingSerial <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; count <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; iniReading<span style="color: #008080;">:</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Serial.<span style="color: #007788;">available</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> 0<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; readChar <span style="color: #000080;">=</span> Serial.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>readChar <span style="color: #000080;">==</span> END_COLOR_CHAR <span style="color: #000040;">||</span> count <span style="color: #000080;">==</span> COLOR_SIZE<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">goto</span> endReading<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; serialMessage<span style="color: #008000;">&#91;</span>count<span style="color: #000040;">++</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> readChar<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">goto</span> iniReading<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">goto</span> iniReading<span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; endReading<span style="color: #008080;">:</span><br />
&nbsp; readingSerial <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
&nbsp; serialMessage<span style="color: #008000;">&#91;</span>count<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; setColor<span style="color: #008000;">&#40;</span>serialMessage<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> setColor<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> value<span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #666666;">// Convert Char* to Long</span><br />
&nbsp; color <span style="color: #000080;">=</span> <span style="color: #0000dd;">atol</span><span style="color: #008000;">&#40;</span>value<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666;">// Extract RGB</span><br />
&nbsp; r <span style="color: #000080;">=</span> color <span style="color: #000080;">&gt;&gt;</span> 16 <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0xFF</span><span style="color: #008080;">;</span><br />
&nbsp; g <span style="color: #000080;">=</span> color <span style="color: #000080;">&gt;&gt;</span> &nbsp;8 <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0xFF</span><span style="color: #008080;">;</span><br />
&nbsp; b <span style="color: #000080;">=</span> color <span style="color: #000080;">&gt;&gt;</span> &nbsp;0 <span style="color: #000040;">&amp;</span> <span style="color: #208080;">0xFF</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666;">// Send values to analog pins</span><br />
&nbsp; analogWrite<span style="color: #008000;">&#40;</span>PIN_RED, r<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; analogWrite<span style="color: #008000;">&#40;</span>PIN_GREEN, g<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; analogWrite<span style="color: #008000;">&#40;</span>PIN_BLUE, b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span></div></td></tr></tbody></table></div>
<p>Linha 25) Iniciamos a conexão com a porta serial na velocidade 9600.<br />
Linha 30) Verifica se existe mensagem na porta serial.<br />
Linha 32) Chama o método serialReadColor para iniciar a leitura da serial.<br />
Linha 57) Envia o texto lido entre os caracteres ^ e $ para o método setColor.<br />
Linha 63) Converte o valor obtido para Long.<br />
Linha 66 à 68) Extrai a quantidade de Red, Green e Blue da cor.<br />
Linha 71 à 73) Envia a voltagem para os pinos correspondêntes a cada cor.</p>
<p><strong>Conclusão:</strong> A Arduino está programada para receber a cor em formato numérico entre dois caracteres que identificam o inicio e o fim da cor (^ para o inicio e $ para o fim). Sendo assim se enviarmos ^16711680$ o LED ficaria vermelho, pois o número 16711680 é o correspondente á 0xFF0000 (hexadecimal).</p>
<p><strong>Agora o código do Processing:</strong></p>
<div class="codecolorer-container java mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp;* Controller LED RGB<br />
&nbsp;* <br />
&nbsp;* @author &nbsp;Bruno Soares<br />
&nbsp;* @website www.bsoares.com.br<br />
&nbsp;*/</span><br />
<br />
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.serial.*</span><span style="color: #339933;">;</span><br />
<br />
Serial port<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; size<span style="color: #009900;">&#40;</span>100, 150<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; noStroke<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666; font-style: italic;">// Background</span><br />
&nbsp; colorMode<span style="color: #009900;">&#40;</span>HSB, 100<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> j <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; stroke<span style="color: #009900;">&#40;</span>i, j, 100<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; point<span style="color: #009900;">&#40;</span>i, j<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666; font-style: italic;">// Select port</span><br />
&nbsp; println<span style="color: #009900;">&#40;</span>Serial.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; port <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Serial<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, Serial.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>1<span style="color: #009900;">&#93;</span>, 9600<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">// Only to enable the method mouseDragged</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> mouseClicked<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; processColor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> mouseDragged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; processColor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> processColor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; color c <span style="color: #339933;">=</span> get<span style="color: #009900;">&#40;</span>mouseX, mouseY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; noStroke<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; fill<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; rect<span style="color: #009900;">&#40;</span>0, 100, 100, 50<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; sendColorToSerial<span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> sendColorToSerial<span style="color: #009900;">&#40;</span>color colour<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">// Get HEX</span><br />
&nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> hexColor <span style="color: #339933;">=</span> hex<span style="color: #009900;">&#40;</span>colour, 6<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666; font-style: italic;">// Convert HEC to Number</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">long</span> numColor <span style="color: #339933;">=</span> unhex<span style="color: #009900;">&#40;</span>hexColor<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666; font-style: italic;">// Send color number to serial port</span><br />
&nbsp; port.<span style="color: #006633;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;^&quot;</span> <span style="color: #339933;">+</span> numColor <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;$&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>A responsabilidade do Processing é se comunicar com a Arduino via porta serial e enviar as cores, pois com o processing podemos criar um aplicativo onde fica facíl selecionar a cor desejada.<br />
Na linha 50 (método sendColorToSerial), o processing processa o objeto Color, obtendo o seu Hexa, transformando em um número do tipo long, concatenando esse número com os caracteres ^ e $, e finalmente enviando este dado formatado para a porta serial para a Arduino fazer o que está a sua responsabilidade.</p>

<div class="ngg-galleryoverview" id="ngg-gallery-2-247">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-9" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/rgb-led-arduino-processing/IMG_1398.jpg" rel="shadowbox[post-247];player=img;" title=" "  >
								<img title="IMG_1398.jpg" alt="IMG_1398.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/rgb-led-arduino-processing/thumbs/thumbs_IMG_1398.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-10" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/rgb-led-arduino-processing/IMG_1401.jpg" rel="shadowbox[post-247];player=img;" title=" "  >
								<img title="IMG_1401.jpg" alt="IMG_1401.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/rgb-led-arduino-processing/thumbs/thumbs_IMG_1401.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-11" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/rgb-led-arduino-processing/IMG_1407.jpg" rel="shadowbox[post-247];player=img;" title=" "  >
								<img title="IMG_1407.jpg" alt="IMG_1407.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/rgb-led-arduino-processing/thumbs/thumbs_IMG_1407.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-12" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/rgb-led-arduino-processing/IMG_1408.jpg" rel="shadowbox[post-247];player=img;" title=" "  >
								<img title="IMG_1408.jpg" alt="IMG_1408.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/rgb-led-arduino-processing/thumbs/thumbs_IMG_1408.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>É isso ai, fica ai mais uma dica ;-)</p>
<p>Faça o <a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/rgbled.zip">download do código fonte aqui</a>.</p>
<p><strong>Conteúdo relacionado:</strong></p>
<ul>
<li>Mais fotos: <a href="http://www.flickr.com/photos/bsoares/sets/72157617326290410/" target="_blank">http://www.flickr.com/photos/bsoares/sets/72157617326290410/</a></li>
<li> Led RGB na Wikipedia: <a href="http://en.wikipedia.org/wiki/LED#RGB_systems" target="_blank">http://en.wikipedia.org/wiki/LED#RGB_systems</a></li>
<li>Arduino: <a href="http://www.arduino.cc" target="_blank">http://www.arduino.cc</a></li>
<li> Processing: <a href="http://www.processing.org" target="_blank">http://www.processing.org</a></li>
<li> PWM: <a href="http://www.arduino.cc/en/Tutorial/PWM" target="_blank">http://www.arduino.cc/en/Tutorial/PWM</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/processing/controlling-rgb-led-with-arduino-and-processing/feed</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>Twitter Hardware</title>
		<link>http://blog.bsoares.com.br/arduino/twitter-hardware</link>
		<comments>http://blog.bsoares.com.br/arduino/twitter-hardware#comments</comments>
		<pubDate>Sat, 18 Apr 2009 22:08:13 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Display LCD]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Open Hardware]]></category>
		<category><![CDATA[Serialproxy]]></category>
		<category><![CDATA[Techology]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=193</guid>
		<description><![CDATA[Twitter Hardware é um projeto que utiliza a placa Arduino e um Display LCD para exibir as mensagens do Twitter. Para que a Arduino tenha as mensagens escrevi um software em Adobe AIR / Flex, que se conecta ao Serial Proxy enviando o conteúdo para a Arduino.

 Arduino:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347/**
&#160;* Twitter Hardware
&#160;* 
&#160;* @author &#160; Bruno Soares
&#160;* [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.bsoares.com.br/arduino/twitter-hardware" target="_self">Twitter Hardware</a> é um projeto que utiliza a placa <a href="http://www.arduino.cc/" target="_self">Arduino</a> e um Display LCD para exibir as mensagens do <a href="http://twitter.com/" target="_self">Twitter</a>. Para que a Arduino tenha as mensagens escrevi um software em <a href="http://www.adobe.com/products/air/" target="_self">Adobe AIR</a> / <a href="http://www.adobe.com/products/flex/" target="_self">Flex</a>, que se conecta ao Serial Proxy enviando o conteúdo para a Arduino.</p>
<p style="text-align: center;"><object width="320" height="265" data="http://www.youtube.com/v/W-oXkI7pKZA&amp;hl=pt-br&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/W-oXkI7pKZA&amp;hl=pt-br&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
<p><strong> Arduino:</strong></p>
<div class="codecolorer-container cpp mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br />227<br />228<br />229<br />230<br />231<br />232<br />233<br />234<br />235<br />236<br />237<br />238<br />239<br />240<br />241<br />242<br />243<br />244<br />245<br />246<br />247<br />248<br />249<br />250<br />251<br />252<br />253<br />254<br />255<br />256<br />257<br />258<br />259<br />260<br />261<br />262<br />263<br />264<br />265<br />266<br />267<br />268<br />269<br />270<br />271<br />272<br />273<br />274<br />275<br />276<br />277<br />278<br />279<br />280<br />281<br />282<br />283<br />284<br />285<br />286<br />287<br />288<br />289<br />290<br />291<br />292<br />293<br />294<br />295<br />296<br />297<br />298<br />299<br />300<br />301<br />302<br />303<br />304<br />305<br />306<br />307<br />308<br />309<br />310<br />311<br />312<br />313<br />314<br />315<br />316<br />317<br />318<br />319<br />320<br />321<br />322<br />323<br />324<br />325<br />326<br />327<br />328<br />329<br />330<br />331<br />332<br />333<br />334<br />335<br />336<br />337<br />338<br />339<br />340<br />341<br />342<br />343<br />344<br />345<br />346<br />347<br /></div></td><td><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000; font-style: italic;">/**<br />
&nbsp;* Twitter Hardware<br />
&nbsp;* <br />
&nbsp;* @author &nbsp; Bruno Soares<br />
&nbsp;* @link &nbsp; &nbsp; http://www.bsoares.com.br<br />
&nbsp;* @language Arduino / C++<br />
&nbsp;*/</span><br />
<br />
<span style="color: #666666;">// Includes</span><br />
<span style="color: #339900;">#include &lt;LiquidCrystal.h&gt;</span><br />
<br />
<span style="color: #666666;">// Defines</span><br />
<span style="color: #339900;">#define DEBUG_PIN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 13</span><br />
<br />
<span style="color: #339900;">#define COMMAND_RIGHT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0</span><br />
<span style="color: #339900;">#define COMMAND_LEFT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1</span><br />
<span style="color: #339900;">#define QUANTITY_COMMANDS &nbsp; &nbsp; &nbsp; &nbsp; 2</span><br />
<br />
<span style="color: #339900;">#define ANALOG_PIN_COMMAND_RIGHT &nbsp;0</span><br />
<span style="color: #339900;">#define ANALOG_PIN_COMMAND_LEFT &nbsp; 1</span><br />
<span style="color: #339900;">#define ANALOG_PIN_SPEED &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2</span><br />
<br />
<span style="color: #339900;">#define MESSAGE_START &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 94 &nbsp;// &nbsp;94 = ^</span><br />
<span style="color: #339900;">#define MESSAGE_END &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 126 // 126 = ~</span><br />
<br />
<span style="color: #339900;">#define SERIAL_BOUND &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;9600</span><br />
<br />
<span style="color: #339900;">#define LCD_LINES &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2</span><br />
<span style="color: #339900;">#define LCD_COLUMNS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 16</span><br />
<br />
<span style="color: #339900;">#define ANIMATE_CMD_WIDTH &nbsp; &nbsp; &nbsp; &nbsp; 4</span><br />
<br />
<span style="color: #666666;">// Global variables</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">long</span> <span style="color: #0000dd;">time</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// LiquidCrystal display with:</span><br />
<span style="color: #666666;">// rs on pin 12</span><br />
<span style="color: #666666;">// rw on pin 11</span><br />
<span style="color: #666666;">// enable on pin 2</span><br />
<span style="color: #666666;">// dbs 3, 4, 5, 6, 7, 8, 9, 10</span><br />
LiquidCrystal lcd<span style="color: #008000;">&#40;</span>12, 11, 2, 3, 4, 5, 6, 7, 8, 9, 10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// Analog configuration</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> analogCmd<span style="color: #008000;">&#91;</span>QUANTITY_COMMANDS<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> analogSpeed <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// Control commands</span><br />
boolean changingSpeed <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
boolean readingSerial <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
boolean pressedCmd<span style="color: #008000;">&#91;</span>QUANTITY_COMMANDS<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> lastSpeed <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// Massages</span><br />
<span style="color: #0000ff;">char</span> currentMessage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">400</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">&quot;No messages.&quot;</span><span style="color: #008080;">;</span><br />
<span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> currentMessageLenght<span style="color: #008080;">;</span><br />
<br />
<span style="color: #666666;">// ------------------------------------------------------------------------ \\</span><br />
<span style="color: #666666;">// Program</span><br />
<span style="color: #0000ff;">void</span> setup<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; Serial.<span style="color: #007788;">begin</span><span style="color: #008000;">&#40;</span>SERIAL_BOUND<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; pinMode<span style="color: #008000;">&#40;</span>DEBUG_PIN, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; smartDelay<span style="color: #008000;">&#40;</span>10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; lastSpeed <span style="color: #000080;">=</span> analogSpeed<span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; presentation<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; changingSpeed <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> loop<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666;">// Show current message</span><br />
&nbsp; clearLcd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; writeLongTextInLcd<span style="color: #008000;">&#40;</span>currentMessage<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; smartDelay<span style="color: #008000;">&#40;</span>applySpeed<span style="color: #008000;">&#40;</span>7000<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> presentation<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; lcd.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; writeLongTextInLcd<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Twitter Hardwareby Bruno Soares&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; smartDelay<span style="color: #008000;">&#40;</span>3000<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> refreshAnalogVars<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; analogCmd<span style="color: #008000;">&#91;</span>COMMAND_RIGHT<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> analogRead<span style="color: #008000;">&#40;</span>ANALOG_PIN_COMMAND_RIGHT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; analogCmd<span style="color: #008000;">&#91;</span>COMMAND_LEFT<span style="color: #008000;">&#93;</span> &nbsp;<span style="color: #000080;">=</span> analogRead<span style="color: #008000;">&#40;</span>ANALOG_PIN_COMMAND_LEFT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; analogSpeed &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000080;">=</span> analogRead<span style="color: #008000;">&#40;</span>ANALOG_PIN_SPEED<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #666666;">// ------------------------------------------------------------------------ \\</span><br />
<span style="color: #666666;">// [INI] Commands</span><br />
<span style="color: #0000ff;">void</span> detectCommand<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">&lt;</span> QUANTITY_COMMANDS<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>analogCmd<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> 500 <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>pressedCmd<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; executeCommand<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; i<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> executeCommand<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> command<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; pressedCmd<span style="color: #008000;">&#91;</span>command<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>DEBUG_PIN, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>command <span style="color: #000080;">==</span> 0<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; animateNext<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; animatePrevious<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <br />
&nbsp; currentMessage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'L'</span><span style="color: #008080;">;</span><br />
&nbsp; currentMessage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'o'</span><span style="color: #008080;">;</span><br />
&nbsp; currentMessage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'a'</span><span style="color: #008080;">;</span><br />
&nbsp; currentMessage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'d'</span><span style="color: #008080;">;</span><br />
&nbsp; currentMessage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'i'</span><span style="color: #008080;">;</span><br />
&nbsp; currentMessage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'n'</span><span style="color: #008080;">;</span><br />
&nbsp; currentMessage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'g'</span><span style="color: #008080;">;</span><br />
&nbsp; currentMessage<span style="color: #008000;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #008080;">;</span><br />
&nbsp; currentMessageLenght <span style="color: #000080;">=</span> <span style="color: #0000dd;">7</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span>command<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>analogCmd<span style="color: #008000;">&#91;</span>command<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&gt;</span> 500<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; smartDelay<span style="color: #008000;">&#40;</span>4<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <br />
&nbsp; pressedCmd<span style="color: #008000;">&#91;</span>command<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>DEBUG_PIN, 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> animateNext<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> &nbsp;<span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> LCD_COLUMNS <span style="color: #000040;">+</span> ANIMATE_CMD_WIDTH<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">&lt;</span> LCD_COLUMNS<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>i, 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;&gt;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>i, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;&gt;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; delay<span style="color: #008000;">&#40;</span>5<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000040;">-</span> ANIMATE_CMD_WIDTH <span style="color: #000080;">&gt;=</span> 0<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>i <span style="color: #000040;">-</span> ANIMATE_CMD_WIDTH, 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>i <span style="color: #000040;">-</span> ANIMATE_CMD_WIDTH, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; delay<span style="color: #008000;">&#40;</span>30<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> animatePrevious<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> LCD_COLUMNS<span style="color: #008080;">;</span> i <span style="color: #000080;">&gt;=</span> <span style="color: #000040;">-</span>ANIMATE_CMD_WIDTH<span style="color: #008080;">;</span> i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000080;">&gt;=</span> 0 <span style="color: #000040;">&amp;&amp;</span> i <span style="color: #000080;">&lt;</span> LCD_COLUMNS<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>i, 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;&lt;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>i, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;&lt;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; delay<span style="color: #008000;">&#40;</span>5<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #000040;">+</span> ANIMATE_CMD_WIDTH <span style="color: #000080;">&lt;</span> LCD_COLUMNS <span style="color: #000040;">&amp;&amp;</span> i <span style="color: #000040;">+</span> ANIMATE_CMD_WIDTH <span style="color: #000080;">&gt;=</span> 0<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>i <span style="color: #000040;">+</span> ANIMATE_CMD_WIDTH, 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>i <span style="color: #000040;">+</span> ANIMATE_CMD_WIDTH, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; delay<span style="color: #008000;">&#40;</span>30<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #666666;">// [END] Commands</span><br />
<br />
<span style="color: #666666;">// ------------------------------------------------------------------------ \\</span><br />
<span style="color: #666666;">// [INI] Messages</span><br />
<span style="color: #0000ff;">void</span> detectSerialMessage<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Serial.<span style="color: #007788;">available</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> 0 <span style="color: #000040;">&amp;&amp;</span> <span style="color: #000040;">!</span>readingSerial<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Serial.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">==</span> MESSAGE_START<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; serialReadMessage<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> serialReadMessage<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>DEBUG_PIN, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; readingSerial <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; currentMessageLenght <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; iniReading<span style="color: #008080;">:</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>Serial.<span style="color: #007788;">available</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000080;">&gt;</span> 0<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> _char <span style="color: #000080;">=</span> Serial.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>_char <span style="color: #000080;">==</span> MESSAGE_END<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">goto</span> endReading<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; currentMessage<span style="color: #008000;">&#91;</span>currentMessageLenght<span style="color: #000040;">++</span><span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> _char<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; delay<span style="color: #008000;">&#40;</span>2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">goto</span> iniReading<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">goto</span> iniReading<span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; endReading<span style="color: #008080;">:</span><br />
&nbsp; currentMessage<span style="color: #008000;">&#91;</span>currentMessageLenght<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> <span style="color: #FF0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #008080;">;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>DEBUG_PIN, 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; readingSerial <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #666666;">// [END] Messages</span><br />
<br />
<span style="color: #666666;">// ------------------------------------------------------------------------ \\</span><br />
<span style="color: #666666;">// [INI] LCD manipulation</span><br />
<span style="color: #0000ff;">void</span> writeLongTextInLcd<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> text<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; writeInit<span style="color: #008080;">:</span><br />
&nbsp; clearLcd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> cml <span style="color: #000080;">=</span> currentMessageLenght<span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">int</span> loops <span style="color: #000080;">=</span> <span style="color: #000040;">-</span><span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> chars <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>text<span style="color: #008000;">&#91;</span>loops<span style="color: #000040;">++</span> <span style="color: #000040;">+</span> 1<span style="color: #008000;">&#93;</span> <span style="color: #000040;">!</span><span style="color: #000080;">=</span> 0<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>chars <span style="color: #000080;">==</span> 17<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>0, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; smartDelay<span style="color: #008000;">&#40;</span>applySpeed<span style="color: #008000;">&#40;</span>600<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>cml <span style="color: #000040;">!</span><span style="color: #000080;">=</span> currentMessageLenght<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">goto</span> writeInit<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>chars <span style="color: #000080;">==</span> 33<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; smartDelay<span style="color: #008000;">&#40;</span>applySpeed<span style="color: #008000;">&#40;</span>3000<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; clearLcd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>cml <span style="color: #000040;">!</span><span style="color: #000080;">=</span> currentMessageLenght<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">goto</span> writeInit<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; chars <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span>text<span style="color: #008000;">&#91;</span>loops<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; smartDelay<span style="color: #008000;">&#40;</span>applySpeed<span style="color: #008000;">&#40;</span>60<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>cml <span style="color: #000040;">!</span><span style="color: #000080;">=</span> currentMessageLenght<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">goto</span> writeInit<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; chars<span style="color: #000040;">++</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; Serial.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span>2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> writeInLcd<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">char</span> text<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>, <span style="color: #0000ff;">int</span> quantity<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> quantity<span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>text<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">==</span> 0<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">do</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000040;">++</span> <span style="color: #000080;">&lt;</span> quantity<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span>text<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; delay<span style="color: #008000;">&#40;</span>2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #666666;">//smartDelay(5);</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> clearLcd<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>0, 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; smartDelay<span style="color: #008000;">&#40;</span>5<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; smartDelay<span style="color: #008000;">&#40;</span>applySpeed<span style="color: #008000;">&#40;</span>400<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>0, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; smartDelay<span style="color: #008000;">&#40;</span>5<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>0, 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; smartDelay<span style="color: #008000;">&#40;</span>applySpeed<span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #666666;">// [END] LCD manipulation</span><br />
<br />
<span style="color: #666666;">// ------------------------------------------------------------------------ \\</span><br />
<span style="color: #666666;">// [INI] Speed</span><br />
<span style="color: #0000ff;">void</span> detectChangeSpeed<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>changingSpeed<span style="color: #008000;">&#41;</span> <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span>lastSpeed <span style="color: #000080;">&lt;</span> analogSpeed <span style="color: #000040;">+</span> 6 <span style="color: #000040;">&amp;&amp;</span> lastSpeed <span style="color: #000080;">&gt;</span> analogSpeed <span style="color: #000040;">-</span> 6<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; showGraderSpeed<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">void</span> showGraderSpeed<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; changingSpeed <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>DEBUG_PIN, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; lcd.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; writeInLcd<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;Speed:&quot;</span>, LCD_COLUMNS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666;">// Create display velocity</span><br />
&nbsp; showSpeed<span style="color: #008080;">:</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> charsSpeed <span style="color: #000080;">=</span> map<span style="color: #008000;">&#40;</span>analogSpeed, 0, 1023, 0, LCD_COLUMNS<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">int</span> percentSpeed <span style="color: #000080;">=</span> map<span style="color: #008000;">&#40;</span>analogSpeed, 0, 1023, 0, 100<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">char</span><span style="color: #000040;">*</span> percentString<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; itoa<span style="color: #008000;">&#40;</span>100 <span style="color: #000040;">-</span> percentSpeed, percentString, 10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; percentString <span style="color: #000080;">=</span> <span style="color: #0000dd;">strcat</span><span style="color: #008000;">&#40;</span>percentString, <span style="color: #FF0000;">&quot;%&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>7, 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; writeInLcd<span style="color: #008000;">&#40;</span>percentString, 4<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; charsSpeed <span style="color: #000080;">=</span> LCD_COLUMNS <span style="color: #000040;">-</span> charsSpeed<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; lcd.<span style="color: #007788;">setCursor</span><span style="color: #008000;">&#40;</span>0, 1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> x <span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> x <span style="color: #000080;">&lt;</span> LCD_COLUMNS <span style="color: #000040;">+</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span> x<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>x <span style="color: #000080;">&lt;=</span> charsSpeed<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;&gt;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">else</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; lcd.<span style="color: #007788;">print</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; lastSpeed <span style="color: #000080;">=</span> analogSpeed<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; smartDelay<span style="color: #008000;">&#40;</span>40<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666;">// Verify</span><br />
&nbsp; <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">10</span><span style="color: #008080;">;</span> i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #000040;">!</span><span style="color: #008000;">&#40;</span>lastSpeed <span style="color: #000080;">&lt;</span> analogSpeed <span style="color: #000040;">+</span> 6 <span style="color: #000040;">&amp;&amp;</span> lastSpeed <span style="color: #000080;">&gt;</span> analogSpeed <span style="color: #000040;">-</span> 6<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">goto</span> showSpeed<span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; smartDelay<span style="color: #008000;">&#40;</span>40<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666;">// Finalize</span><br />
&nbsp; lcd.<span style="color: #007788;">clear</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; changingSpeed <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span><br />
&nbsp; digitalWrite<span style="color: #008000;">&#40;</span>DEBUG_PIN, 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">long</span> applySpeed <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">unsigned</span> <span style="color: #0000ff;">int</span> value<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">return</span> map<span style="color: #008000;">&#40;</span>analogSpeed, 0, 1023, 0, value<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #666666;">// [END] Speed</span><br />
<br />
<span style="color: #666666;">// ------------------------------------------------------------------------ \\</span><br />
<span style="color: #666666;">// [INI] Milliseconds controller</span><br />
<span style="color: #0000ff;">void</span> smartDelay<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> milliseconds<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>milliseconds <span style="color: #000080;">&lt;</span> 2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; noDelayFunctions<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; delay<span style="color: #008000;">&#40;</span>milliseconds<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; <span style="color: #0000ff;">do</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; delay<span style="color: #008000;">&#40;</span>1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; milliseconds <span style="color: #000040;">-</span><span style="color: #000080;">=</span> noDelayFunctions<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; &nbsp; milliseconds <span style="color: #000040;">-</span><span style="color: #000080;">=</span> <span style="color: #0000dd;">1</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #008000;">&#125;</span> <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>milliseconds <span style="color: #000080;">&gt;</span> 0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<br />
<span style="color: #0000ff;">int</span> noDelayFunctions<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; <span style="color: #0000dd;">time</span> <span style="color: #000080;">=</span> millis<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666;">// [INI] No delay functions here</span><br />
&nbsp; refreshAnalogVars<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; detectChangeSpeed<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; detectCommand<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; detectSerialMessage<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><br />
&nbsp; <span style="color: #666666;">// [END] No delay functions here</span><br />
&nbsp; <br />
&nbsp; <span style="color: #0000ff;">return</span> millis<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">-</span> <span style="color: #0000dd;">time</span><span style="color: #008080;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
<span style="color: #666666;">// [END] Milliseconds controller</span></div></td></tr></tbody></table></div>
<p><strong>ActionScript (usando Serialproxy):</strong></p>
<div class="codecolorer-container actionscript3 mac-classic" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:500px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br /></div></td><td><div class="actionscript3 codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #9900cc; font-weight: bold;">package</span> br<span style="color: #000066; font-weight: bold;">.</span>com<span style="color: #000066; font-weight: bold;">.</span>bsoares<span style="color: #000066; font-weight: bold;">.</span>air<span style="color: #000066; font-weight: bold;">.</span>airtwitterhardware<br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span><span style="color: #000066; font-weight: bold;">.</span><a href="http://www.google.com/search?q=event%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:event.html"><span style="color: #004993;">Event</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span><span style="color: #000066; font-weight: bold;">.</span><a href="http://www.google.com/search?q=eventdispatcher%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:eventdispatcher.html"><span style="color: #004993;">EventDispatcher</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span><span style="color: #000066; font-weight: bold;">.</span><a href="http://www.google.com/search?q=ioerrorevent%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ioerrorevent.html"><span style="color: #004993;">IOErrorEvent</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span><span style="color: #000066; font-weight: bold;">.</span><a href="http://www.google.com/search?q=progressevent%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:progressevent.html"><span style="color: #004993;">ProgressEvent</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.net</span><span style="color: #000066; font-weight: bold;">.</span><a href="http://www.google.com/search?q=socket%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:socket.html"><span style="color: #004993;">Socket</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #3f5fbf;">/**<br />
&nbsp; &nbsp; &nbsp;* Message Control<br />
&nbsp; &nbsp; &nbsp;* Control messages between the Arduino and in AIR<br />
&nbsp; &nbsp; &nbsp;* Application using Serial Proxy.<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @author Bruno Soares<br />
&nbsp; &nbsp; &nbsp;* @link &nbsp; http://www.bsoares.com.br<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> MessageControl <span style="color: #0033ff; font-weight: bold;">extends</span> <a href="http://www.google.com/search?q=eventdispatcher%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:eventdispatcher.html"><span style="color: #004993;">EventDispatcher</span></a><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Properties</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _host<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=string%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:string.html"><span style="color: #004993;">String</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _port<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _socket<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=socket%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:socket.html"><span style="color: #004993;">Socket</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _messages<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=array%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:array.html"><span style="color: #004993;">Array</span></a><span style="color: #000066; font-weight: bold;">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _currentMessage<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #6699cc; font-weight: bold;">var</span> _instance<span style="color: #000066; font-weight: bold;">:</span>MessageControl<span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> static <span style="color: #6699cc; font-weight: bold;">var</span> _allowInstantiation<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=boolean%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:boolean.html"><span style="color: #004993;">Boolean</span></a> = <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Constructor</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> MessageControl<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #000066; font-weight: bold;">!</span>_allowInstantiation<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">throw</span> <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=error%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:error.html"><span style="color: #004993;">Error</span></a><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Use instance property (this is a Singleton Class).&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Logic</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">init</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _host = <span style="color: #990000;">&quot;127.0.0.1&quot;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// COM2</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _port = <span style="color: #000000; font-weight:bold;">5332</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _messages = <span style="color: #000000;">&#91;</span> <span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _currentMessage = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; socketConnect<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> socketConnect<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=socket%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:socket.html"><span style="color: #004993;">Socket</span></a><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><a href="http://www.google.com/search?q=progressevent%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:progressevent.html"><span style="color: #004993;">ProgressEvent</span></a><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">SOCKET_DATA</span><span style="color: #000066; font-weight: bold;">,</span> onSocketData<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><a href="http://www.google.com/search?q=event%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:event.html"><span style="color: #004993;">Event</span></a><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">CLOSE</span><span style="color: #000066; font-weight: bold;">,</span> onSocketClose<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><a href="http://www.google.com/search?q=ioerrorevent%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ioerrorevent.html"><span style="color: #004993;">IOErrorEvent</span></a><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">IO_ERROR</span><span style="color: #000066; font-weight: bold;">,</span> onSocketIoError<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">connect</span><span style="color: #000000;">&#40;</span>_host<span style="color: #000066; font-weight: bold;">,</span> _port<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> processData<span style="color: #000000;">&#40;</span><span style="color: #004993;">data</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=string%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:string.html"><span style="color: #004993;">String</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Arduino command:&quot;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">data</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">switch</span> <span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Send next message</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">case</span> <span style="color: #004993;">data</span> == <span style="color: #990000;">&quot;2&quot;</span> <span style="color: #000066; font-weight: bold;">||</span> <span style="color: #004993;">data</span> == <span style="color: #990000;">&quot;0&quot;</span><span style="color: #000066; font-weight: bold;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendNextMessage<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">break</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Send previous message</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">case</span> <span style="color: #004993;">data</span> == <span style="color: #990000;">&quot;1&quot;</span><span style="color: #000066; font-weight: bold;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendPreviousMessage<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">break</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> sendMessage<span style="color: #000000;">&#40;</span><span style="color: #004993;">message</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=string%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:string.html"><span style="color: #004993;">String</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #004993;">message</span> == <span style="color: #0033ff; font-weight: bold;">null</span> <span style="color: #000066; font-weight: bold;">||</span> <span style="color: #004993;">message</span> == <span style="color: #990000;">&quot;&quot;</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Message:&quot;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">message</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// MESSAGE_START</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">writeUTFBytes</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;^&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">flush</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// MESSAGE</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> i<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a> = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span> i <span style="color: #000066; font-weight: bold;">&lt;</span> <span style="color: #004993;">message</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span><span style="color: #000066; font-weight: bold;">;</span> i<span style="color: #000066; font-weight: bold;">++</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">writeUTFBytes</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">message</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">charAt</span><span style="color: #000000;">&#40;</span>i<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">flush</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// MESSAGE_END</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">writeUTFBytes</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;~&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">flush</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004993;">dispatchEvent</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=event%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:event.html"><span style="color: #004993;">Event</span></a><span style="color: #000000;">&#40;</span><a href="http://www.google.com/search?q=event%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:event.html"><span style="color: #004993;">Event</span></a><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">CHANGE</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> sendNextMessage<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _currentMessage = _currentMessage == _messages<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span> <span style="color: #000066; font-weight: bold;">-</span> 1 <span style="color: #000066; font-weight: bold;">?</span> 0 <span style="color: #000066; font-weight: bold;">:</span> _currentMessage <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendMessage<span style="color: #000000;">&#40;</span>_messages<span style="color: #000000;">&#91;</span>_currentMessage<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> sendPreviousMessage<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _currentMessage = _currentMessage == 0 <span style="color: #000066; font-weight: bold;">?</span> _messages<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span> <span style="color: #000066; font-weight: bold;">-</span> 1 <span style="color: #000066; font-weight: bold;">:</span> _currentMessage <span style="color: #000066; font-weight: bold;">-</span> <span style="color: #000000; font-weight:bold;">1</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendMessage<span style="color: #000000;">&#40;</span>_messages<span style="color: #000000;">&#91;</span>_currentMessage<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Events</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onSocketData<span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=progressevent%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:progressevent.html"><span style="color: #004993;">ProgressEvent</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">while</span> <span style="color: #000000;">&#40;</span>_socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">bytesAvailable</span> <span style="color: #000066; font-weight: bold;">&gt;</span> 0<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; processData<span style="color: #000000;">&#40;</span>_socket<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">readUTFBytes</span><span style="color: #000000;">&#40;</span>1<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onSocketClose<span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=event%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:event.html"><span style="color: #004993;">Event</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; socketConnect<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onSocketIoError<span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=ioerrorevent%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ioerrorevent.html"><span style="color: #004993;">IOErrorEvent</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">text</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900; font-style: italic;">// Getters and Setters</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> static <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> instance<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span>MessageControl<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_instance == <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _allowInstantiation = <span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _instance = <span style="color: #0033ff; font-weight: bold;">new</span> MessageControl<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _allowInstantiation = <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> _instance<span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">set</span> messages<span style="color: #000000;">&#40;</span><span style="color: #004993;">value</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=array%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:array.html"><span style="color: #004993;">Array</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _currentMessage = <span style="color: #000000; font-weight:bold;">0</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _messages = <span style="color: #004993;">value</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>_messages<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span> <span style="color: #000066; font-weight: bold;">&gt;</span> 0<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendMessage<span style="color: #000000;">&#40;</span>_messages<span style="color: #000000;">&#91;</span>0<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> messages<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=array%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:array.html"><span style="color: #004993;">Array</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> _messages<span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #0033ff; font-weight: bold;">get</span> currentMessage<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=uint%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:uint.html"><span style="color: #004993;">uint</span></a><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span> _currentMessage<span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#125;</span></div></td></tr></tbody></table></div>
<p><strong>Esquemático:</strong><br />
<a rel="attachment wp-att-207" href="http://blog.bsoares.com.br/arduino/twitter-hardware/attachment/twitterhardware-schematic"><img title="twitterhardware-schematic" src="http://blog.bsoares.com.br/wp-content/uploads/2009/04/twitterhardware-schematic-300x300.png" alt="twitterhardware-schematic" width="300" height="300" /></a></p>

<div class="ngg-galleryoverview" id="ngg-gallery-1-193">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-1" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/twitterhardware.jpg" rel="shadowbox[post-193];player=img;" title=" "  >
								<img title="twitterhardware.jpg" alt="twitterhardware.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/thumbs/thumbs_twitterhardware.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-2" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/Twitter-Hardware-1.jpg" rel="shadowbox[post-193];player=img;" title=" "  >
								<img title="Twitter-Hardware-1.jpg" alt="Twitter-Hardware-1.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/thumbs/thumbs_Twitter-Hardware-1.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-3" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/Twitter-Hardware-2.jpg" rel="shadowbox[post-193];player=img;" title=" "  >
								<img title="Twitter-Hardware-2.jpg" alt="Twitter-Hardware-2.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/thumbs/thumbs_Twitter-Hardware-2.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-4" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/Twitter-Hardware-3.jpg" rel="shadowbox[post-193];player=img;" title=" "  >
								<img title="Twitter-Hardware-3.jpg" alt="Twitter-Hardware-3.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/thumbs/thumbs_Twitter-Hardware-3.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-5" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/Twitter-Hardware-4.jpg" rel="shadowbox[post-193];player=img;" title=" "  >
								<img title="Twitter-Hardware-4.jpg" alt="Twitter-Hardware-4.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/thumbs/thumbs_Twitter-Hardware-4.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-6" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/Twitter-Hardware-5.jpg" rel="shadowbox[post-193];player=img;" title=" "  >
								<img title="Twitter-Hardware-5.jpg" alt="Twitter-Hardware-5.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/thumbs/thumbs_Twitter-Hardware-5.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-7" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/Twitter-Hardware-6.jpg" rel="shadowbox[post-193];player=img;" title=" "  >
								<img title="Twitter-Hardware-6.jpg" alt="Twitter-Hardware-6.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/thumbs/thumbs_Twitter-Hardware-6.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-8" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/Twitter-Hardware-7.jpg" rel="shadowbox[post-193];player=img;" title=" "  >
								<img title="Twitter-Hardware-7.jpg" alt="Twitter-Hardware-7.jpg" src="http://blog.bsoares.com.br/wp-content/gallery/twitter-hardware/thumbs/thumbs_Twitter-Hardware-7.jpg" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>Baixe o <a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/twitterhardware.zip">código fonte aqui</a>.</p>
<p><strong>Conteúdo relacionado:</strong><br />
Mais fotos: <a href="http://www.flickr.com/photos/bsoares/sets/72157616923436133/" target="_self">http://www.flickr.com/photos/bsoares/sets/72157616923436133/</a><br />
Fritzing: <a href="http://fritzing.org/">http://fritzing.org/</a><br />
Arduino: <a href="http://arduino.cc/" target="_self">http://arduino.cc/</a><br />
Adobe AIR: <a href="http://www.adobe.com/products/air/" target="_self">http://www.adobe.com/products/air/</a><br />
Adobe Flex: <a href="http://www.adobe.com/products/flex/" target="_self">http://www.adobe.com/products/flex/</a><br />
LiquidCrystal Library: <a href="http://arduino.cc/en/Reference/LiquidCrystal?from=Tutorial.LCDLibrary" target="_self">http://arduino.cc/en/Reference/LiquidCrystal?from=Tutorial.LCDLibrary</a><br />
Twitter: <a href="http://twitter.com/" target="_self">http://twitter.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/arduino/twitter-hardware/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
