<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Bruno Soares</title>
	
	<link>http://blog.bsoares.com.br</link>
	<description />
	<lastBuildDate>Tue, 15 Dec 2009 21:10:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BrunoSoares" /><feedburner:info uri="brunosoares" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license><item>
		<title>Ping Pong com Matriz de Leds 8×8</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/LPInXN5sIqk/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>15</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/arduino/ping-pong-with-8x8-led-matrix-on-arduino</feedburner:origLink></item>
		<item>
		<title>PianoDuino (Arduino + Processing + SoundCipher)</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/tN4P-dRoUIM/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 idéia 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 idéia 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>4</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/processing/pianoduino-arduino-processing-soundcipher</feedburner:origLink></item>
		<item>
		<title>Operações binárias</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/VEeYZWm2W8M/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">multiplexado</a>r, 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 LED Matrix, 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 ActionScript, mas pode ser aplicado a C, C++, Java, Processing, PHP, 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>
		<feedburner:origLink>http://blog.bsoares.com.br/aspnet/operacoes-binarias</feedburner:origLink></item>
		<item>
		<title>Vector em AS3 para Flash Player 10</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/LVUf7JxuoSY/as3-vector-for-flashplayer-10</link>
		<comments>http://blog.bsoares.com.br/flash/as3-vector-for-flashplayer-10#comments</comments>
		<pubDate>Tue, 26 May 2009 02:21:35 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=377</guid>
		<description><![CDATA[Para aqueles que já estão usando Flash Player 10, trocar o Array por Vector é uma boa opção, pois você ganha em performance e organização de código (Vector é um array tipado ou seja, mais organizado).
O que mudou mais é a forma de construir o objeto, a sintaxe funciona como o Generics do C# ou [...]]]></description>
			<content:encoded><![CDATA[<p>Para aqueles que já estão usando Flash Player 10, trocar o Array por <a href="http://livedocs.adobe.com/flex/gumbo/langref/Vector.html" target="_blank">Vector</a> é uma boa opção, pois você ganha em performance e organização de código (Vector é um array tipado ou seja, mais organizado).<br />
O que mudou mais é a forma de construir o objeto, a sintaxe funciona como o <a href="http://msdn.microsoft.com/en-us/library/ms379564.aspx" target="_blank">Generics do C#</a> ou Java. Ressaltando que não existe generics em AS3, somente o Vector que implementa uma sintaxe parecida com a sintaxe de um generics.</p>
<p>Muitos blogueiros já comentaram sobre o Vector logo quando saiu a versão beta do Flash Player 10. Por este motivo não vou falar muito sobre, vou apenas exemplificar e dar links para os outros blog.</p>
<p><strong>Criando um Vector:</strong></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: #6699cc; font-weight: bold;">var</span> vetor<span style="color: #000066; font-weight: bold;">:</span>Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>T<span style="color: #000066; font-weight: bold;">&gt;</span> = <span style="color: #0033ff; font-weight: bold;">new</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>T<span style="color: #000066; font-weight: bold;">&gt;</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div></td></tr></tbody></table></div>
<p>(Substitua o T pelo tipo desejado)</p>
<p><strong>Veja como é parecido com um Array:</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 /></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: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> __AS3__<span style="color: #000066; font-weight: bold;">.</span>vec<span style="color: #000066; font-weight: bold;">.</span>Vector<span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span><span style="color: #000066; font-weight: bold;">.</span><a href="http://www.google.com/search?q=sprite%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:sprite.html"><span style="color: #004993;">Sprite</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.utils</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">getTimer</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000;">&#91;</span>SWF<span style="color: #000000;">&#40;</span>framerate=<span style="color: #990000;">&quot;30&quot;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">width</span>=<span style="color: #990000;">&quot;500&quot;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">height</span>=<span style="color: #990000;">&quot;500&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> Main <span style="color: #0033ff; font-weight: bold;">extends</span> <a href="http://www.google.com/search?q=sprite%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:sprite.html"><span style="color: #004993;">Sprite</span></a><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _vector<span style="color: #000066; font-weight: bold;">:</span>Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>String<span style="color: #000066; font-weight: bold;">&gt;</span> = <span style="color: #0033ff; font-weight: bold;">new</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>String<span style="color: #000066; font-weight: bold;">&gt;</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: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> _timer<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=number%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:number.html"><span style="color: #004993;">Number</span></a><span style="color: #000066; font-weight: bold;">;</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> Main<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; _vector<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">push</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;a&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _vector<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">push</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;b&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;">trace</span><span style="color: #000000;">&#40;</span>_vector<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _vector<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">push</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;c&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;">trace</span><span style="color: #000000;">&#40;</span>_vector<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _vector<span style="color: #000000;">&#91;</span>_vector<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span><span style="color: #000000;">&#93;</span> = <span style="color: #990000;">&quot;d&quot;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>_vector<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</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: #0033ff; font-weight: bold;">for</span> <span style="color: #0033ff; font-weight: bold;">each</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> s<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: #0033ff; font-weight: bold;">in</span> _vector<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: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;FOR: &quot;</span> <span style="color: #000066; font-weight: bold;">+</span> s<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; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Timer Vector:&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; testVector<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;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Timer Array:&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; testArray<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> testArray<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; _timer = <span style="color: #004993;">getTimer</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; <span style="color: #6699cc; font-weight: bold;">var</span> array<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: #0033ff; font-weight: bold;">new</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;">&#40;</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;">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: #000000; font-weight:bold;">1000000</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; array<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span> = i<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: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getTimer</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">-</span> _timer<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> testVector<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; _timer = <span style="color: #004993;">getTimer</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; <span style="color: #6699cc; font-weight: bold;">var</span> vector<span style="color: #000066; font-weight: bold;">:</span>Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>uint<span style="color: #000066; font-weight: bold;">&gt;</span> = <span style="color: #0033ff; font-weight: bold;">new</span> Vector<span style="color: #000066; font-weight: bold;">.&lt;</span>uint<span style="color: #000066; font-weight: bold;">&gt;</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; <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: #000000; font-weight:bold;">1000000</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; vector<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span> = i<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: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">getTimer</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">-</span> _timer<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; <span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#125;</span></div></td></tr></tbody></table></div>
<p>(O código acima é a Main Class de um projeto Flex / ActionScript)</p>
<p>Teste de performance entre arrays, vector e outros:<br />
<a href="http://businessintelligence.me/projects/performance_tester/performanceTester.html" target="_blank">http://businessintelligence.me/projects/performance_tester/performanceTester.html</a></p>
<p>Veja na imagem abaixo como é &#8220;gritante&#8221; a diferença de performance entre um Array comum e um Vector:<br />
<a href="http://blog.bsoares.com.br/wp-content/uploads/2009/05/as3-vector-array-performance-tester.png" rel="shadowbox[post-377];player=img;"><img src="http://blog.bsoares.com.br/wp-content/uploads/2009/05/as3-vector-array-performance-tester-300x300.png" alt="as3-vector-array-performance-tester" title="as3-vector-array-performance-tester" width="300" height="300" class="alignnone size-thumbnail wp-image-410" /></a></p>
<p><strong>Conteúdo relacionado:</strong><br />
<a href="http://livedocs.adobe.com/flex/gumbo/langref/Vector.html" target="_blank">Documentação do Vector</a><br />
<a href="http://businessintelligence.me/projects/performance_tester/performanceTester.html" target="_blank">Teste de performance</a><br />
<a href="http://www.mikechambers.com/blog/2008/08/19/using-vectors-in-actionscript-3-and-flash-player-10/" target="_blank">Post sobre Vector por: Mike Chambers</a><br />
<a href="http://www.daveoncode.com/2009/04/06/actionscript-vector-class-initialization-with-a-source-array/" target="_blank">Post sobre Vector por: DaveOnCode</a><br />
<a href="http://thebackbutton.com/blog/65/new-vector-actionscript-3s-typed-array/" target="_blank">Post sobre Vector por: The Back Button</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/flash/as3-vector-for-flashplayer-10/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/flash/as3-vector-for-flashplayer-10</feedburner:origLink></item>
		<item>
		<title>Funções do C++ úteis para Arduino</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/f6L8L1VyVwI/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>
		<feedburner:origLink>http://blog.bsoares.com.br/arduino/useful-functions-of-the-cpp-for-arduino</feedburner:origLink></item>
		<item>
		<title>Classe C++ para controlar Display de 7 seguimentos</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/OBlVQEPFilk/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>
		<feedburner:origLink>http://blog.bsoares.com.br/arduino/cpp-class-for-controlling-7-segments-led-display</feedburner:origLink></item>
		<item>
		<title>Controlando a Arduino com PHP via porta serial</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/jUDG24w0QYQ/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>21</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/php/controlling-arduino-with-php</feedburner:origLink></item>
		<item>
		<title>Controlando Led RGB com Arduino e Processing</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/nRg94QjWr4g/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>33</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/processing/controlling-rgb-led-with-arduino-and-processing</feedburner:origLink></item>
		<item>
		<title>Twitter Hardware</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/2Ld1anN4Mew/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 href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/twitterhardware-schematic.png" rel="shadowbox[post-193];player=img;"><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 />
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>1</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/arduino/twitter-hardware</feedburner:origLink></item>
		<item>
		<title>JPGEncoder (AS3) com AMFPHP</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/ANQtFNn5ifA/jpgencoder-as3-with-amfphp</link>
		<comments>http://blog.bsoares.com.br/remoting/jpgencoder-as3-with-amfphp#comments</comments>
		<pubDate>Wed, 08 Apr 2009 02:21:54 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Remoting]]></category>
		<category><![CDATA[AMFPHP]]></category>
		<category><![CDATA[JPGEncoder]]></category>
		<category><![CDATA[PNGEncoder]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=160</guid>
		<description><![CDATA[Tenho notado pelo Google Analytics que pessoas chegam ao blog procurando por AMFPHP, encode de imagens criadas no flash, salvar imagem com Flash + AMFPHP e outros critérios de busca. E por isso me sinto na obrigação de escrever algo sobre isto.
Exemplo:









Vou demonstrar exatamente o que o título do post propõe (Criar imagens no Flash [...]]]></description>
			<content:encoded><![CDATA[<p>Tenho notado pelo Google Analytics que pessoas chegam ao blog procurando por <a href="http://www.amfphp.org/" target="_blank">AMFPHP</a>, encode de imagens criadas no flash, salvar imagem com Flash + AMFPHP e outros critérios de busca. E por isso me sinto na obrigação de escrever algo sobre isto.</p>
<p><strong>Exemplo:</strong>
<object width="550" height="450">
<param name="movie" value="http://blog.bsoares.com.br/articles/jpgencoder_amfphp/swf/Main.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="550" height="450" src="http://blog.bsoares.com.br/articles/jpgencoder_amfphp/swf/Main.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
<p>Vou demonstrar exatamente o que o título do post propõe (Criar imagens no Flash com ActionScript 3, encodar essas imagens com a classe JPGEncoder presente na biblioteca <a href="http://code.google.com/p/as3corelib/">as3corelib</a> e salvar como um arquivo .jpg utilizando o AMFPHP). Já escrevi aqui como fazer isso em <a href="http://blog.bsoares.com.br/remoting/jpeg-encoder-as3-fluorinefx-net-flash-remoting-gateway" target="_blank">FluorineFx (ASP.NET Flash Remoting Gateway)</a>.</p>
<p>Suponho que quem esteja interessado em rodar o que está descrito neste tutorial tenha o Apache com PHP instalado, ou algum servidor com suporte. Caso você não tenha recomendo a instalação do <a href="http://www.apachefriends.org/pt_br/xampp.html" target="_blank">XAMPP</a> (é de fácil instalação e tem tudo que um programador precisa).</p>
<p><strong>Configuração do AMFPHP:</strong><br />
A versão que utilizo neste tutorial é a <strong>1.9 beta</strong>, mas versões posteriores devem funcionar perfeitamente.<br />
• Baixe o AMFPHP do seguinte link: <a href="http://www.amfphp.org/" target="_blank">http://www.amfphp.org/</a><br />
• Copie o conteúdo do ZIP para o diretório onde você está criando o projeto, recomendo a estrutura de diretórios como mostrada na imagem abaixo:<br />
<img class="alignnone size-full wp-image-174" title="folders" src="http://blog.bsoares.com.br/wp-content/uploads/2009/04/folders.png" alt="folders" width="186" height="209" /></p>
<p>• Para testar o funcionamento é só acessar o diretório browser do navegador (http://127.0.0.1/www/amf/browser/).</p>
<p>Fique entendido que <strong>a responsabilidade de gerar a imagem é do Flash</strong>, e o <strong>servidor deve apenas receber os binários para gravar em disco</strong>. Para gerarmos o código da imagem (binário), vamos utilizar a classe JPGEncoder.<br />
<strong>Exemplo:</strong></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 /></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: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span><span style="color: #000066; font-weight: bold;">.</span><a href="http://www.google.com/search?q=bitmapdata%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bitmapdata.html"><span style="color: #004993;">BitmapData</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><a href="http://www.google.com/search?q=bytearray%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bytearray.html"><span style="color: #004993;">ByteArray</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #0033ff; font-weight: bold;">import</span> com<span style="color: #000066; font-weight: bold;">.</span>adobe<span style="color: #000066; font-weight: bold;">.</span>images<span style="color: #000066; font-weight: bold;">.</span>JPGEncoder<span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #6699cc; font-weight: bold;">var</span> bmpData<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=bitmapdata%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bitmapdata.html"><span style="color: #004993;">BitmapData</span></a> = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=bitmapdata%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bitmapdata.html"><span style="color: #004993;">BitmapData</span></a><span style="color: #000000;">&#40;</span><span style="color: #004993;">width</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">height</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
bmpData<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">draw</span><span style="color: #000000;">&#40;</span>MEU_MOVIECLIP<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> objJPGEncoder<span style="color: #000066; font-weight: bold;">:</span>JPGEncoder = <span style="color: #0033ff; font-weight: bold;">new</span> JPGEncoder<span style="color: #000000;">&#40;</span>QUALIDADE<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> dadosEncode<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=bytearray%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bytearray.html"><span style="color: #004993;">ByteArray</span></a> = objJPGEncoder<span style="color: #000066; font-weight: bold;">.</span>encode<span style="color: #000000;">&#40;</span>bmpData<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div></td></tr></tbody></table></div>
<p>Muito simples não? O método draw da classe BitmapData obtém a imagem atual do clip, criamos uma instância da JPGEncoder já passando a qualidade (0 à 100) e por fim “encodamos” o BitmapData utilizando o método encode da nossa instância da JPGEncoder, ele nos retorna um <strong>Array de Bytes (flash.utils.ByteArray)</strong>.</p>
<p><strong>Vamos a parte do actionscript que interessa:</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 /></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: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> encode<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 />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; lblMessage<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">text</span> = <span style="color: #990000;">&quot;Codificando dados (JPGEncoder.encode)&quot;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> bmpData<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=bitmapdata%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bitmapdata.html"><span style="color: #004993;">BitmapData</span></a> = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=bitmapdata%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bitmapdata.html"><span style="color: #004993;">BitmapData</span></a><span style="color: #000000;">&#40;</span>hit<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">width</span><span style="color: #000066; font-weight: bold;">,</span> hit<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">height</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; bmpData<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">draw</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">target</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> objJPGEncoder<span style="color: #000066; font-weight: bold;">:</span>JPGEncoder = <span style="color: #0033ff; font-weight: bold;">new</span> JPGEncoder<span style="color: #000000;">&#40;</span>sliderQuality<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">value</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> dadosEncode<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=bytearray%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bytearray.html"><span style="color: #004993;">ByteArray</span></a> = objJPGEncoder<span style="color: #000066; font-weight: bold;">.</span>encode<span style="color: #000000;">&#40;</span>bmpData<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; sendToAmf<span style="color: #000000;">&#40;</span>dadosEncode<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> sendToAmf<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=bytearray%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bytearray.html"><span style="color: #004993;">ByteArray</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 />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; lblMessage<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">text</span> = <span style="color: #990000;">&quot;Enviando dados para o AMF...&quot;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; _objService = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=netconnection%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:netconnection.html"><span style="color: #004993;">NetConnection</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; _objResponder = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=responder%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:responder.html"><span style="color: #004993;">Responder</span></a><span style="color: #000000;">&#40;</span>onResultEvent<span style="color: #000066; font-weight: bold;">,</span> onStatusEvent<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; _objService<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">connect</span><span style="color: #000000;">&#40;</span>_amfGateway<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; _objService<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">call</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;br.com.bsoares.Image.saveDataToFile&quot;</span><span style="color: #000066; font-weight: bold;">,</span> _objResponder<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 />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onResultEvent<span style="color: #000000;">&#40;</span>result<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=object%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:object.html"><span style="color: #004993;">Object</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 />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; lblMessage<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">text</span> = <span style="color: #990000;">&quot;Abrindo imagem&quot;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #004993;">navigateToURL</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=urlrequest%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:urlrequest.html"><span style="color: #004993;">URLRequest</span></a><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;http://blog.bsoares.com.br/articles/jpgencoder_amfphp/generated_images/image.jpg&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;_blank&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onStatusEvent<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 />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; lblMessage<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">text</span> = <span style="color: #990000;">&quot;Erro&quot;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span></div></td></tr></tbody></table></div>
<p><strong>Agora a classe Image do PHP:</strong></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 />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 /></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: #000000; font-weight: bold;">class</span> Image<br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$imagePath</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">imagePath</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;../../../../../generated_images/image.jpg&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">function</span> saveDataToFile<span style="color: #009900;">&#40;</span><span style="color: #000088;">$byteArray</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/file_put_contents"><span style="color: #990000;">file_put_contents</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">imagePath</span><span style="color: #339933;">,</span> <span style="color: #000088;">$byteArray</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">imagePath</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</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>O PHP só precisa pegar o ByteArray e salvar em um arquivo.</p>
<p>Dica: Para verificar os request usem o <a href="http://www.charlesproxy.com/" target="_blank">Charles Web Debugging Proxy</a>.</p>
<p>É isso ai, qualquer dúvida só postar um comentário.</p>
<p><strong>Conteúdo relacionado:</strong><br />
Código fonte do exemplo: <a href="http://blog.bsoares.com.br/articles/jpgencoder_amfphp/jpgencoder-amfphp.zip" target="_blank">http://blog.bsoares.com.br/articles/jpgencoder_amfphp/jpgencoder-amfphp.zip</a><br />
AMFPHP: <a href="http://www.amfphp.org/" target="_blank">http://www.amfphp.org/</a><br />
AS3CoreLib: <a href="http://code.google.com/p/as3corelib/" target="_blank">http://code.google.com/p/as3corelib/</a><br />
Charles: <a href="http://www.charlesproxy.com/" target="_blank">http://www.charlesproxy.com/</a></p>
<p>Enjoy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/remoting/jpgencoder-as3-with-amfphp/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/remoting/jpgencoder-as3-with-amfphp</feedburner:origLink></item>
		<item>
		<title>Convertendo PNG para SWF com PHP 5</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/Rjn8l5xS4IE/converting-png-to-swf-with-php-5</link>
		<comments>http://blog.bsoares.com.br/flash/converting-png-to-swf-with-php-5#comments</comments>
		<pubDate>Sun, 05 Apr 2009 00:50:14 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=141</guid>
		<description><![CDATA[Bom para quem não sabe o Adobe Flash consegue uma compressão incrível com arquivos do tipo PNG, mantendo a sua qualidade e transparência. Vou deixar um exemplo de código PHP para fazer essa conversão sem a ajuda de softwares como o png2swf.exe pois a realidade é que muitos servidores (hosts) não permitem que o script [...]]]></description>
			<content:encoded><![CDATA[<p>Bom para quem não sabe o Adobe Flash consegue uma compressão incrível com arquivos do tipo PNG, <strong>mantendo a sua qualidade e transparência</strong>. Vou deixar um exemplo de código PHP para fazer essa conversão sem a ajuda de softwares como o png2swf.exe pois a realidade é que muitos servidores (hosts) não permitem que o script PHP rode softwares.</p>
<p><strong>Classe:</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 />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 /></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;* SwfConvertion<br />
&nbsp;* <br />
&nbsp;* @author Bruno Soares<br />
&nbsp;* @link &nbsp; http://www.bsoares.com.br<br />
&nbsp;*/</span><br />
<span style="color: #000000; font-weight: bold;">class</span> SwfConvertion<br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009933; font-style: italic;">/**<br />
&nbsp; &nbsp; &nbsp;* image2swf<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @param &nbsp;$imagePath String<br />
&nbsp; &nbsp; &nbsp;* @return void<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> static <span style="color: #000000; font-weight: bold;">function</span> image2swf<span style="color: #009900;">&#40;</span><span style="color: #000088;">$imagePath</span><span style="color: #339933;">,</span> <span style="color: #000088;">$outputPath</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$outputPath</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$outputPath</span> <span style="color: #339933;">=</span> SwfConvertion<span style="color: #339933;">::</span><span style="color: #004000;">resolveOutputPath</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imagePath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$bitmap</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SWFBitmap<span style="color: #009900;">&#40;</span><a href="http://www.php.net/file_get_contents"><span style="color: #990000;">file_get_contents</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imagePath</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$shape</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SWFShape<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$shape</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setRightFill</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$shape</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addFill</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bitmap</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$shape</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">drawLine</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bitmap</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> 0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$shape</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">drawLine</span><span style="color: #009900;">&#40;</span>0<span style="color: #339933;">,</span> <span style="color: #000088;">$bitmap</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getHeight</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; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$shape</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">drawLine</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #000088;">$bitmap</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> 0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$shape</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">drawLine</span><span style="color: #009900;">&#40;</span>0<span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #000088;">$bitmap</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getHeight</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; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$movie</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> SWFMovie<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$movie</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setDimension</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bitmap</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getWidth</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$bitmap</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getHeight</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; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$movie</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$shape</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$movie</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">save</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$outputPath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009933; font-style: italic;">/**<br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* <br />
&nbsp; &nbsp; &nbsp;* @param $imagePath Object<br />
&nbsp; &nbsp; &nbsp;* @return String<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> static <span style="color: #000000; font-weight: bold;">function</span> resolveOutputPath<span style="color: #009900;">&#40;</span><span style="color: #000088;">$imagePath</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <a href="http://www.php.net/preg_replace"><span style="color: #990000;">preg_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/^(.+)\.([A-Za-z]{3,4})$/i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'${1}.swf'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$imagePath</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</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><strong>Exemplo de uso:</strong></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 /></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> SwfConvertion<span style="color: #339933;">::</span><span style="color: #004000;">image2swf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'imagem_branco.png'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'imagem_branco_2.swf'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p><strong>1º Teste:</strong><br />
PNG: <a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/imagem_branco.png" rel="shadowbox[post-141];player=img;">imagem_branco.png</a> 167KB<br />
SWF: <a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/imagem_branco_2.swf" rel="shadowbox[post-141];width=640;height=385;">imagem_branco_2.swf</a> 98KB<br />
<strong>41,31%</strong> de compressão (menos 69KB)</p>
<p><strong>2º Teste:</strong><br />
PNG: <a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/imagem_vermelho.png" rel="shadowbox[post-141];player=img;">imagem_vermelho.png</a> 309KB<br />
SWF: <a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/imagem_vermelho_2.swf" rel="shadowbox[post-141];width=640;height=385;">imagem_vermelho_2.swf</a> 264KB<br />
<strong>14,56%</strong>  de compressão (menos 45KB)</p>
<p>Obs.: É importante que você escolha bem as conversões que deseja fazer, pois em alguns casos o SWF pode ficar mais pesado que o PNG ou seja, se você vai utilizar este script para otimizar suas imagens <strong>compare os pesos antes de escolher a definitiva</strong>.</p>
<p><strong>Conteúdo relacionado:</strong><br />
PHP Shockwave Flash: <a href="http://br2.php.net/manual/pt_BR/book.swf.php" target="_blank">http://br2.php.net/manual/pt_BR/book.swf.php</a><br />
Funções para SWF: <a href="http://br2.php.net/manual/pt_BR/ref.swf.php" target="_blank">http://br2.php.net/manual/pt_BR/ref.swf.php</a></p>
<p>Enjoy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/flash/converting-png-to-swf-with-php-5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/flash/converting-png-to-swf-with-php-5</feedburner:origLink></item>
		<item>
		<title>Flickr – Buscar fotos por Tag com ActionScript</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/BYOm5Idf6pQ/flickr-search-photos-by-tag-with-actionscript</link>
		<comments>http://blog.bsoares.com.br/flash/flickr-search-photos-by-tag-with-actionscript#comments</comments>
		<pubDate>Sat, 04 Apr 2009 23:10:54 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flickr API]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=111</guid>
		<description><![CDATA[Vamos a um exemplo de uso da API do Flickr, bem simples pois a API do Flickr é realmente simples (isso não quer dizer que ela não é poderoza).
Aqui está o resultado de pouco código:










Em primeiro lugar você vai precisar de uma api_key e pode conseguir neste link &#8220;Solicitar uma nova chave API&#8220;. Com sua [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a um exemplo de uso da <a href="http://www.flickr.com/services/api/" target="_blank">API do Flickr</a>, bem simples pois a API do Flickr é realmente simples (isso não quer dizer que ela não é poderoza).</p>
<p><strong>Aqui está o resultado de pouco código:</strong><br />

<object width="455" height="430">
<param name="movie" value="http://blog.bsoares.com.br/wp-content/uploads/2009/04/main.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="455" height="430" src="http://blog.bsoares.com.br/wp-content/uploads/2009/04/main.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
<p>Em primeiro lugar você vai precisar de uma api_key e pode conseguir neste link &#8220;<a href="http://www.flickr.com/services/api/keys/apply/" target="_blank">Solicitar uma nova chave API</a>&#8220;. Com sua KEY em mão vamos chamar a api buscando uma tag:<br />
<em> <span style="color: #339966;">http://api.flickr.com/services/<strong>rest</strong>/?<strong>api_key</strong>=[SUA-API-KEY]&amp;<strong>method</strong>=flickr.photos.search&amp;<strong>tags</strong>=[TAG]</span></em></p>
<p><strong>O resultado esperado é este:</strong></p>
<div class="codecolorer-container xml 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="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;rsp</span> <span style="color: #000066;">stat</span>=<span style="color: #ff0000;">&quot;ok&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;photos</span> <span style="color: #000066;">page</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">pages</span>=<span style="color: #ff0000;">&quot;10&quot;</span> <span style="color: #000066;">perpage</span>=<span style="color: #ff0000;">&quot;100&quot;</span> <span style="color: #000066;">total</span>=<span style="color: #ff0000;">&quot;1000&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;photo</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;3411384625&quot;</span> <span style="color: #000066;">owner</span>=<span style="color: #ff0000;">&quot;23534352@N07&quot;</span> <span style="color: #000066;">secret</span>=<span style="color: #ff0000;">&quot;74167a8895&quot;</span> <span style="color: #000066;">server</span>=<span style="color: #ff0000;">&quot;3374&quot;</span> <span style="color: #000066;">farm</span>=<span style="color: #ff0000;">&quot;4&quot;</span> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">&quot;_MG_0611&quot;</span> <span style="color: #000066;">ispublic</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">isfriend</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">isfamily</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;photo</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;3411401933&quot;</span> <span style="color: #000066;">owner</span>=<span style="color: #ff0000;">&quot;23534352@N07&quot;</span> <span style="color: #000066;">secret</span>=<span style="color: #ff0000;">&quot;46c095f827&quot;</span> <span style="color: #000066;">server</span>=<span style="color: #ff0000;">&quot;3585&quot;</span> <span style="color: #000066;">farm</span>=<span style="color: #ff0000;">&quot;4&quot;</span> <span style="color: #000066;">title</span>=<span style="color: #ff0000;">&quot;_MG_0641&quot;</span> <span style="color: #000066;">ispublic</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">isfriend</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000066;">isfamily</span>=<span style="color: #ff0000;">&quot;0&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span><br />
&nbsp; &nbsp; ...<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/photos<span style="color: #000000; font-weight: bold;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/rsp<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>Vamos entender o link, rest é o formato que você deseja receber a resposta, atualmente o Flickr suporta 5 formatos (REST, XML-RPC, SOAP, JSON e PHP), usamos o rest porque o ActionScript trabalha muito bem com ele (XML). api_key é a chave que você solicitou acima. method, é o método de busca (você pode encontrar muitos no link da API, <a href="http://www.flickr.com/services/api/" target="_blank">http://www.flickr.com/services/api/</a>). E por fim tags que é um parâmetro pelo qual você busca.</p>
<p>Agora que temos o XML de resposta podemos construir links para as fotos, para a página de galeria do usuário encontrado, para o perfil do usuário entro outros. O link que eu acho mais importante é o da imagem e para consegui-lo basta concatenar alguns dados presentes no XML dessa forma:</p>
<p><span style="color: #339966;">http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}.jpg</p>
<p>http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_[mstb].jpg</p>
<p>http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{o-secret}_o.(jpg|gif|png)</span></p>
<p>O que é mstb?<br />
s) quadrado pequeno 75&#215;75.<br />
t) miniatura, 100 no lado mais longo.<br />
m) pequeno, 240 no lado mais longo.<br />
-) médio, 500 no lado mais longo.<br />
b) grande, 1.024 no lado mais longo (existe apenas para imagens originais muito grandes).<br />
o) imagem original, jpg, gif ou png, dependendo do formato de origem.<br />
Na página <a href="http://www.flickr.com/services/api/misc.urls.html" target="_blank">URLs da origem da foto</a> você encontra tudo bem explicado.</p>
<p>Veja no exemplo abaixo o link (do primeio nó &#8216;photo&#8217;)  para a imagem:<br />
<a href="http://farm4.static.flickr.com/3374/3411384625_74167a8895.jpg" rel="shadowbox[post-111];player=img;" target="_blank">http://farm4.static.flickr.com/3374/3411384625_74167a8895.jpg</a></p>
<p><strong>Agora tudo isso com ActionScript (Load do XML e parse para gerar o link):</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 /></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> apiKey<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: #990000;">&quot;[SUA-API-KEY]&quot;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> tag<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: #990000;">&quot;arduino&quot;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #6699cc; font-weight: bold;">var</span> xmlLoader<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=urlloader%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:urlloader.html"><span style="color: #004993;">URLLoader</span></a> = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=urlloader%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:urlloader.html"><span style="color: #004993;">URLLoader</span></a><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
xmlLoader<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;">COMPLETE</span><span style="color: #000066; font-weight: bold;">,</span> onComplete<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">url</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: #990000;">&quot;http://api.flickr.com/services/rest/?method=flickr.photos.search&amp;api_key=&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> apiKey <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #990000;">&quot;&amp;tags=&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> tag<span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;URL: &quot;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">url</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
xmlLoader<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=urlrequest%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:urlrequest.html"><span style="color: #004993;">URLRequest</span></a><span style="color: #000000;">&#40;</span><span style="color: #004993;">url</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #339966; font-weight: bold;">function</span> onComplete<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 />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> xmlData<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=xml%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:xml.html"><span style="color: #004993;">XML</span></a> = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=xml%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:xml.html"><span style="color: #004993;">XML</span></a><span style="color: #000000;">&#40;</span>event<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">target</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; <span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>xmlData<span style="color: #000066; font-weight: bold;">.</span>@stat <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #990000;">&quot;ok&quot;</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;ERROR: &quot;</span> <span style="color: #000066; font-weight: bold;">+</span> xmlData<span style="color: #000066; font-weight: bold;">.</span>err<span style="color: #000066; font-weight: bold;">.</span>@msg<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">return</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; <br />
&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> xmlData<span style="color: #000066; font-weight: bold;">.</span>photos<span style="color: #000066; font-weight: bold;">.</span>photo<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">length</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</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; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6699cc; font-weight: bold;">var</span> photo<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=object%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:object.html"><span style="color: #004993;">Object</span></a> = <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id<span style="color: #000066; font-weight: bold;">:</span>xmlData<span style="color: #000066; font-weight: bold;">.</span>photos<span style="color: #000066; font-weight: bold;">.</span>photo<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>@id<span style="color: #000066; font-weight: bold;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; owner<span style="color: #000066; font-weight: bold;">:</span>xmlData<span style="color: #000066; font-weight: bold;">.</span>photos<span style="color: #000066; font-weight: bold;">.</span>photo<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>@owner<span style="color: #000066; font-weight: bold;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; secret<span style="color: #000066; font-weight: bold;">:</span>xmlData<span style="color: #000066; font-weight: bold;">.</span>photos<span style="color: #000066; font-weight: bold;">.</span>photo<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>@secret<span style="color: #000066; font-weight: bold;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; server<span style="color: #000066; font-weight: bold;">:</span>xmlData<span style="color: #000066; font-weight: bold;">.</span>photos<span style="color: #000066; font-weight: bold;">.</span>photo<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>@server<span style="color: #000066; font-weight: bold;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; farm<span style="color: #000066; font-weight: bold;">:</span>xmlData<span style="color: #000066; font-weight: bold;">.</span>photos<span style="color: #000066; font-weight: bold;">.</span>photo<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>@farm<span style="color: #000066; font-weight: bold;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; title<span style="color: #000066; font-weight: bold;">:</span>xmlData<span style="color: #000066; font-weight: bold;">.</span>photos<span style="color: #000066; font-weight: bold;">.</span>photo<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span><span style="color: #000066; font-weight: bold;">.</span>@title<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; photo<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">url</span> = <span style="color: #990000;">&quot;http://farm&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> photo<span style="color: #000066; font-weight: bold;">.</span>farm <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #990000;">&quot;.static.flickr.com/&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> photo<span style="color: #000066; font-weight: bold;">.</span>server <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #990000;">&quot;/&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> photo<span style="color: #000066; font-weight: bold;">.</span>id <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #990000;">&quot;_&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> photo<span style="color: #000066; font-weight: bold;">.</span>secret <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #990000;">&quot;.jpg&quot;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;Imagem: &quot;</span><span style="color: #000066; font-weight: bold;">,</span> photo<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">url</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#125;</span></div></td></tr></tbody></table></div>
<p>Repare que você pode adicionar dois parâmetros no link para controlar a paginação das fotos (page e perpage).</p>
<p><strong>Conteúdo relacionado:</strong><br />
Flickr API: <a href="http://www.flickr.com/services/api/" target="_blank">http://www.flickr.com/services/api/</a><br />
XML ActionScript 3.0: <a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/XML.html" target="_blank">http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/XML.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/flash/flickr-search-photos-by-tag-with-actionscript/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/flash/flickr-search-photos-by-tag-with-actionscript</feedburner:origLink></item>
		<item>
		<title>AIR Install Badge com Google Analytics</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/Mt9QVGkZgl4/air-install-badge-with-google-analytics</link>
		<comments>http://blog.bsoares.com.br/as3/air-install-badge-with-google-analytics#comments</comments>
		<pubDate>Thu, 02 Apr 2009 04:32:17 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=83</guid>
		<description><![CDATA[Já a algum tempo procurei um Air Install Badge com o Google Analytics integrado e acabei encontrando o do Marc&#8217;s Musings, mas me pareceu meio &#8220;travado&#8221; uma vez que é necessário compilar o flash com as informações do seu aplicativo AIR. Sendo assim modifiquei o original para receber via FlashVars o nome da aplicação, versão, [...]]]></description>
			<content:encoded><![CDATA[<p>Já a algum tempo procurei um <a href="http://www.adobe.com/devnet/air/articles/badge_for_air.html" target="_blank">Air Install Badge</a> com o <a href="http://www.google.com/analytics/" target="_self">Google Analytics</a> integrado e acabei encontrando o do <a href="http://www.rogue-development.com/blog2/2008/02/air-install-badge-google-analytics/" target="_blank">Marc&#8217;s Musings</a>, mas me pareceu meio &#8220;travado&#8221; uma vez que é necessário compilar o flash com as informações do seu aplicativo AIR. Sendo assim modifiquei o original para receber via FlashVars o nome da aplicação, versão, endereço do .air, e é claro o código AnalyticsTracker.</p>
<p>O <a href="http://googletranslation.bsoares.com.br/" target="_blank">Google Translation Plus</a> (uma aplicação que estou desenvolvendo) já está utilizando o Install Badge modificado, verifique.<strong></strong></p>
<p><strong>Como é mostrado o relatório no Google Analytics:</strong><br />
<a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/googleanalytics.gif" rel="shadowbox[post-83];player=img;"><img class="alignnone size-full wp-image-86" title="googleanalytics" src="http://blog.bsoares.com.br/wp-content/uploads/2009/04/googleanalytics.gif" alt="googleanalytics" width="468" height="169" /></a></p>
<p><strong><br />
Principal trecho de código do Install Badge alterado:</strong></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: #009900; font-style: italic;">// Google Analytics Tracking</span><br />
<span style="color: #0033ff; font-weight: bold;">if</span> <span style="color: #000000;">&#40;</span>tracker <span style="color: #000066; font-weight: bold;">!</span>= <span style="color: #0033ff; font-weight: bold;">null</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; tracker<span style="color: #000066; font-weight: bold;">.</span>trackPageview<span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;/&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> appName <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #990000;">&quot;/&quot;</span> <span style="color: #000066; font-weight: bold;">+</span> action<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span></div></td></tr></tbody></table></div>
<p><span style="color: #800000;"><strong>Atenção:</strong></span><br />
Existem muitas variáreis para serem alteradas no arquivo AirAppPage.html, como por exemplo: analyticstracker, airversion, appname, appurl, appid, appversion, etc&#8230;</p>
<p>Download do <a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/airinstallbadgeanalytics.zip" target="_blank">AIR Install Badge com Google Analytics</a>.</p>
<p><strong>Conteúdo relacionado:</strong><br />
AIR Install Badge: <a href="http://www.adobe.com/devnet/air/articles/badge_for_air.html" target="_blank">http://www.adobe.com/devnet/air/articles/badge_for_air.html</a><br />
gaforflash: <a href="http://code.google.com/p/gaforflash/" target="_blank">Google Analytics Tracking For Adobe Flash</a><br />
swfobject: <a href="http://code.google.com/p/swfobject/" target="_blank">http://code.google.com/p/swfobject/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/as3/air-install-badge-with-google-analytics/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/as3/air-install-badge-with-google-analytics</feedburner:origLink></item>
		<item>
		<title>Regra de três simplificada (Map do Processing)</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/3TaXwAWhpsA/regra-de-tres-simplificada-map-do-processing</link>
		<comments>http://blog.bsoares.com.br/flash/regra-de-tres-simplificada-map-do-processing#comments</comments>
		<pubDate>Mon, 30 Mar 2009 18:52:51 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Matemática]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=57</guid>
		<description><![CDATA[Se tem uma coisa que programador Flash faz muito é regra de três, esta pequena formula matemática é executada diversas vezes dentro de um projeto, e ela é usada para transferir um valor dentro de um intervalo de números para o valor equivalente em um outro intervalo de números. Pro exemplo, no loading de uma [...]]]></description>
			<content:encoded><![CDATA[<p>Se tem uma coisa que programador Flash faz muito é <a href="http://www.somatematica.com.br/fundam/regra3s.php" target="_blank">regra de três</a>, esta pequena formula matemática é executada diversas vezes dentro de um projeto, e ela é usada para <em><strong>transferir um valor dentro de um intervalo de números para o valor equivalente em um outro intervalo de números</strong></em>. Pro exemplo, no loading de uma imagem você sabe quantos bytes tem a imagem e quantos bytes já foram carregados, agora como calcular o percentual de carregamento? Vamos supor que a imagem tenha 300 bytes e já foram carregados 150 então temos 50% carregado, para chegar a este resultado de uma forma fácil e padronizada:</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>NumberUtils<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">map</span><span style="color: #000000;">&#40;</span>150<span style="color: #000066; font-weight: bold;">,</span> 0<span style="color: #000066; font-weight: bold;">,</span> 300<span style="color: #000066; font-weight: bold;">,</span> 0<span style="color: #000066; font-weight: bold;">,</span> 100<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div></td></tr></tbody></table></div>
<p>Converti o script escrito originalmente em <a href="http://processing.org/reference/map_.html" target="_blank">Processing</a> e <a href="http://arduino.cc/en/Reference/Map" target="_blank">Arduino</a> para ActionScript 3.0, agora é só usar.</p>
<p><strong>Mais exemplos de uso:</strong></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 />11<br />12<br />13<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: #0033ff; font-weight: bold;">import</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>utils<span style="color: #000066; font-weight: bold;">.</span>NumberUtils<span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>NumberUtils<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">map</span><span style="color: #000000;">&#40;</span>50<span style="color: #000066; font-weight: bold;">,</span> 0<span style="color: #000066; font-weight: bold;">,</span> 100<span style="color: #000066; font-weight: bold;">,</span> 0<span style="color: #000066; font-weight: bold;">,</span> 10<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;">// 5</span><br />
<br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>NumberUtils<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">map</span><span style="color: #000000;">&#40;</span>90<span style="color: #000066; font-weight: bold;">,</span> 0<span style="color: #000066; font-weight: bold;">,</span> 100<span style="color: #000066; font-weight: bold;">,</span> 0<span style="color: #000066; font-weight: bold;">,</span> 10<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;">// 9</span><br />
<br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>NumberUtils<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">map</span><span style="color: #000000;">&#40;</span>90<span style="color: #000066; font-weight: bold;">,</span> 100<span style="color: #000066; font-weight: bold;">,</span> 0<span style="color: #000066; font-weight: bold;">,</span> 0<span style="color: #000066; font-weight: bold;">,</span> 10<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;">// 1</span><br />
<br />
<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>NumberUtils<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">map</span><span style="color: #000000;">&#40;</span><span style="color: #000066; font-weight: bold;">-</span>90<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #000066; font-weight: bold;">-</span>100<span style="color: #000066; font-weight: bold;">,</span> 100<span style="color: #000066; font-weight: bold;">,</span> 0<span style="color: #000066; font-weight: bold;">,</span> 10<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;">// 0.5</span></div></td></tr></tbody></table></div>
<p><strong>Classe completa:</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 /></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: #3f5fbf;">/**<br />
&nbsp;* NumberUtils<br />
&nbsp;*<br />
&nbsp;* @author Bruno Soares<br />
&nbsp;* @link http://www.bsoares.com.br<br />
&nbsp;*/</span><br />
<br />
<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>utils<br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> NumberUtils<br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> NumberUtils<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #3f5fbf;">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Transfere um valor de um intervalo para outro.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Versão original escrita em Processing (http://processing.org/reference/map_.html).<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param value Valor a ser transferido<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param inMin Menor valor do primeiro intervalo<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param inMax Maior valor do primeiro intervalo<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param outMin Menor valor do segundo intervalo<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param outMax Maior valor do segundo intervalo<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @return Valor calculado<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</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: #004993;">map</span><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=number%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:number.html"><span style="color: #004993;">Number</span></a><span style="color: #000066; font-weight: bold;">,</span> inMin<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=number%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:number.html"><span style="color: #004993;">Number</span></a><span style="color: #000066; font-weight: bold;">,</span> inMax<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=number%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:number.html"><span style="color: #004993;">Number</span></a><span style="color: #000066; font-weight: bold;">,</span> outMin<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=number%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:number.html"><span style="color: #004993;">Number</span></a><span style="color: #000066; font-weight: bold;">,</span> outMax<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=number%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:number.html"><span style="color: #004993;">Number</span></a><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=number%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:number.html"><span style="color: #004993;">Number</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> <span style="color: #000000;">&#40;</span><span style="color: #004993;">value</span> <span style="color: #000066; font-weight: bold;">-</span> inMin<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">*</span> <span style="color: #000000;">&#40;</span>outMax <span style="color: #000066; font-weight: bold;">-</span> outMin<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">/</span> <span style="color: #000000;">&#40;</span>inMax <span style="color: #000066; font-weight: bold;">-</span> inMin<span style="color: #000000;">&#41;</span> <span style="color: #000066; font-weight: bold;">+</span> outMin<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>Links relacionados:</strong><br />
Processing: <a href="http://processing.org/reference/map_.html" target="_blank">http://processing.org/reference/map_.html</a><br />
Arduino: <a href="http://arduino.cc/en/Reference/Map" target="_blank">http://arduino.cc/en/Reference/Map</a><br />
Regra de Três: <a href="http://pt.wikipedia.org/wiki/Regra_de_tr%C3%AAs" target="_blank">http://pt.wikipedia.org/wiki/Regra_de_tr%C3%AAs</a>, <a href="http://www.somatematica.com.br/fundam/regra3s.php" target="_blank">http://www.somatematica.com.br/fundam/regra3s.php</a></p>
<p>Enjoy</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/flash/regra-de-tres-simplificada-map-do-processing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/flash/regra-de-tres-simplificada-map-do-processing</feedburner:origLink></item>
		<item>
		<title>JPEG Encoder (AS3) + FluorineFx .NET Flash Remoting Gateway</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/bxs7vMW6Akc/jpeg-encoder-as3-fluorinefx-net-flash-remoting-gateway</link>
		<comments>http://blog.bsoares.com.br/remoting/jpeg-encoder-as3-fluorinefx-net-flash-remoting-gateway#comments</comments>
		<pubDate>Mon, 18 Feb 2008 05:14:48 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Remoting]]></category>
		<category><![CDATA[AMF]]></category>
		<category><![CDATA[ByteArray]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[FluorineFx]]></category>
		<category><![CDATA[JPGEncoder]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=27</guid>
		<description><![CDATA[
Vamos entender neste post como o flash cria um jpeg e o envia através do FluorineFx para o servidor para que o servidor possa trabalhar o dado binário e salvar como um arquivo .JPG.
Exemplo:

Não vamos entrar em detalhes da instalação e nem da configuração básica de um site com FluorineFx, pois no próprio site do [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>Vamos entender neste post como o flash cria um jpeg e o envia através do <a href="http://www.fluorinefx.com/" target="_blank">FluorineFx</a> para o servidor para que o servidor possa trabalhar o dado binário e salvar como um arquivo .JPG.</p>
<p>Exemplo:</p>
<p><iframe id="flashEx" name="flashEx" marginwidth="0" marginheight="0" src="http://fluorinefx-jpegencoder.bsoares.com.br/" scrolling="no" width="502" frameborder="0" height="502"></iframe></p>
<p>Não vamos entrar em detalhes da instalação e nem da configuração básica de um site com FluorineFx, pois no próprio site do FluorineFx existe um ótimo tutorial para esta configuração inicial (<a href="http://www.fluorinefx.com/docs/fluorine/vswizardnet20.html" target="_blank">FluorineFx Visual Studio 2005 Wizard</a>).</p>
<p>Em primeiro lugar, que fique entendido que a responsabilidade de gerar a imagem é do Flash, e o servidor deve apenas receber os binários para gravar em disco. Para gerarmos o código da imagem (<span style="font-weight: bold;">binário</span>), vamos utilizar a classe <span style="font-weight: bold;">JPEGEncoder</span>.<br />
Exemplo:</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 /></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: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span><span style="color: #000066; font-weight: bold;">.</span><a href="http://www.google.com/search?q=bitmapdata%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bitmapdata.html"><span style="color: #004993;">BitmapData</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span><span style="color: #000066; font-weight: bold;">.</span><a href="http://www.google.com/search?q=bytearray%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bytearray.html"><span style="color: #004993;">ByteArray</span></a><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #0033ff; font-weight: bold;">import</span> JPEGEncoder<span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #6699cc; font-weight: bold;">var</span> bmpData <span style="color: #000066; font-weight: bold;">:</span> <a href="http://www.google.com/search?q=bitmapdata%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bitmapdata.html"><span style="color: #004993;">BitmapData</span></a> = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=bitmapdata%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bitmapdata.html"><span style="color: #004993;">BitmapData</span></a><span style="color: #000000;">&#40;</span><span style="color: #004993;">width</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #004993;">height</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
bmpData<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">draw</span><span style="color: #000000;">&#40;</span>MEU_MOVIECLIP<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> objJPEGEncoder <span style="color: #000066; font-weight: bold;">:</span> JPEGEncoder = <span style="color: #0033ff; font-weight: bold;">new</span> JPEGEncoder<span style="color: #000000;">&#40;</span>QUALIDADE<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #6699cc; font-weight: bold;">var</span> dadosEncode <span style="color: #000066; font-weight: bold;">:</span> <a href="http://www.google.com/search?q=bytearray%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bytearray.html"><span style="color: #004993;">ByteArray</span></a> = objJPEGEncoder<span style="color: #000066; font-weight: bold;">.</span>encode<span style="color: #000000;">&#40;</span>bmpData<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div></td></tr></tbody></table></div>
<p>Muito simples não? O método draw da classe <span style="font-weight: bold;">BitmapData</span> obtém a imagem atual do clip, criamos uma instância da JPEGEncoder já passando a qualidade (0 à 100) e por fim “encodamos” o BitmapData utilizando o método encode da nossa instância da JPEGEncoder, ele nos retorna um Array de Bytes (<span style="font-weight: bold;">flash.utils.ByteArray</span>).</p>
<p>Agora ficou simples, temos em mãos o array de bytes, podemos enviar ele para o servidor para que o mesmo possa fazer sua parte, que nada mais é que salvar estes bytes em um arquivo. Utilizando o FluorineFx fica fácil, veja o código abaixo:</p>
<div class="codecolorer-container csharp 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 /></div></td><td><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Web</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Drawing</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.IO</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF;">using</span> <span style="color: #008080;">FluorineFx</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF;">using</span> <span style="color: #008080;">FluorineFx.AMF3</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF;">namespace</span> ServiceLibrary.<span style="color: #0000FF;">Imagem</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #000000;">&#91;</span>RemotingService<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Comentário da classe&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><br />
&nbsp; &nbsp;<span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> JpegEncoder<br />
&nbsp; &nbsp;<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Salvar<span style="color: #000000;">&#40;</span>ByteArray byteArray<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: #008080; font-style: italic;">// Transfere de ByteArray para MemoryStream</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #FF0000;">uint</span> length <span style="color: #008000;">=</span> byteArray.<span style="color: #0000FF;">Length</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">&#93;</span> bytes <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> <span style="color: #FF0000;">byte</span><span style="color: #000000;">&#91;</span>length<span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;byteArray.<span style="color: #0000FF;">ReadBytes</span><span style="color: #000000;">&#40;</span>bytes, 0, length<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MemoryStream stream <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> MemoryStream<span style="color: #000000;">&#40;</span>bytes<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #008080; font-style: italic;">// Cria a imagem</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Image image <span style="color: #008000;">=</span> Bitmap.<span style="color: #0000FF;">FromStream</span><span style="color: #000000;">&#40;</span>stream<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #008080; font-style: italic;">// Salva a imagem</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;image.<span style="color: #0000FF;">Save</span><span style="color: #000000;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;HttpContext.<span style="color: #0000FF;">Current</span>.<span style="color: #0000FF;">Server</span>.<span style="color: #0000FF;">MapPath</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;_upload/JpegEncoder.jpg&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #008080; font-style: italic;">// Libera o espaço na memória</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stream.<span style="color: #0000FF;">Dispose</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;image.<span style="color: #0000FF;">Dispose</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</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>Este código deve ser inserido dentro da ServiceLibrary que você criou para a sua Solution.</p>
<p>Repare na classe ByteArray, é uma implementação do ByteArray do Flash no servidor, provida pelo FluorineFx.AMF3.</p>
<p>Sua Solution Explorer deve se parecer um pouco com esta:</p>
<p><a href="http://4.bp.blogspot.com/_qLU3RxFHN9w/R7rKlsBl3WI/AAAAAAAAAF4/Kv8k9BKPfAs/s1600-h/SolutionExplorer.gif" rel="shadowbox[post-27];player=img;"><img id="BLOGGER_PHOTO_ID_5168666271182871906" src="http://4.bp.blogspot.com/_qLU3RxFHN9w/R7rKlsBl3WI/AAAAAAAAAF4/Kv8k9BKPfAs/s320/SolutionExplorer.gif" border="0" alt="" /></a></p>
<p>Deixei selecionadas as referências para System.Drawing e Web propositalmente, pois são referências necessárias para o funcionamento da nossa classe.</p>
<p>Agora vamos a parte do envio do ByteArray criado no Flash apartir da JPEGEncoder para a nossa classe la no FluorineFx, a ServiceLibrary.Imagem.JpegEncoder. No exemplo anexo ao post (mais ao fim do post tem um link para download) utilizei uma classe que criei a pouco tempo para trabalhar com AMF no geral (br.com.bsoares.net.Amf), ela vai tomar muito espaço no post, portanto vou demonstrar somente a utilização dela:</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 /></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: #3f5fbf;">/**<br />
* Função de callback para JpegEncoder.Salvar<br />
* @param resposta<br />
*/</span><br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> baixarSusseco <span style="color: #000000;">&#40;</span>resposta <span style="color: #000066; font-weight: bold;">:</span> <a href="http://www.google.com/search?q=object%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:object.html"><span style="color: #004993;">Object</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> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp;UtilNet<span style="color: #000066; font-weight: bold;">.</span>navegar<span style="color: #000000;">&#40;</span>Config<span style="color: #000066; font-weight: bold;">.</span>URL_UPLOAD <span style="color: #000066; font-weight: bold;">+</span> <span style="color: #990000;">&quot;JpegEncoder.jpg&quot;</span><span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;_blank&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #3f5fbf;">/**<br />
* Função de callback para JpegEncoder.Salvar<br />
* @param resposta<br />
*/</span><br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> baixarErro <span style="color: #000000;">&#40;</span>resposta <span style="color: #000066; font-weight: bold;">:</span> <a href="http://www.google.com/search?q=object%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:object.html"><span style="color: #004993;">Object</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> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;--&amp;amp;lt; ERRO &amp;amp;gt;----------------------&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp;<span style="color: #0033ff; font-weight: bold;">for</span> <span style="color: #0033ff; font-weight: bold;">each</span> <span style="color: #000000;">&#40;</span><span style="color: #6699cc; font-weight: bold;">var</span> o <span style="color: #000066; font-weight: bold;">:</span> <a href="http://www.google.com/search?q=object%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:object.html"><span style="color: #004993;">Object</span></a> <span style="color: #0033ff; font-weight: bold;">in</span> resposta<span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span>o<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp;<span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp;<span style="color: #004993;">trace</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 />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #3f5fbf;">/**<br />
* Retorna o ByteArray gerado pela JPEGEncoder<br />
* @return Byte Array<br />
*/</span><br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> obterByteArray <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=bytearray%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bytearray.html"><span style="color: #004993;">ByteArray</span></a> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #6699cc; font-weight: bold;">var</span> bmpData <span style="color: #000066; font-weight: bold;">:</span> <a href="http://www.google.com/search?q=bitmapdata%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bitmapdata.html"><span style="color: #004993;">BitmapData</span></a> = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=bitmapdata%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bitmapdata.html"><span style="color: #004993;">BitmapData</span></a><span style="color: #000000;">&#40;</span>_flvPlayer<span style="color: #000066; font-weight: bold;">.</span>msk<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">width</span><span style="color: #000066; font-weight: bold;">,</span> _flvPlayer<span style="color: #000066; font-weight: bold;">.</span>msk<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">height</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp;bmpData<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">draw</span><span style="color: #000000;">&#40;</span>_alvoCaptura<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp;<span style="color: #6699cc; font-weight: bold;">var</span> objJPEGEncoder <span style="color: #000066; font-weight: bold;">:</span> JPEGEncoder = <span style="color: #0033ff; font-weight: bold;">new</span> JPEGEncoder<span style="color: #000000;">&#40;</span>_qualidade<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">value</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp;<span style="color: #6699cc; font-weight: bold;">var</span> dadosEncode <span style="color: #000066; font-weight: bold;">:</span> <a href="http://www.google.com/search?q=bytearray%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:bytearray.html"><span style="color: #004993;">ByteArray</span></a> = objJPEGEncoder<span style="color: #000066; font-weight: bold;">.</span>encode<span style="color: #000000;">&#40;</span>bmpData<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp;<span style="color: #0033ff; font-weight: bold;">return</span> dadosEncode<span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #3f5fbf;">/**<br />
* Chama o método Salvar da Classe JpegEncoder utilizando o FluorineFx.<br />
* Neste exemplo, criei uma classe chamada AMF para tratar a comunicação<br />
* com o FluorineFx (serve também para AMFPHP)<br />
* @param Evento<br />
*/</span><br />
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onBaixarClick <span style="color: #000000;">&#40;</span>e <span style="color: #000066; font-weight: bold;">:</span> <a href="http://www.google.com/search?q=mouseevent%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:mouseevent.html"><span style="color: #004993;">MouseEvent</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> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #6699cc; font-weight: bold;">var</span> objAmf <span style="color: #000066; font-weight: bold;">:</span> Amf = <span style="color: #0033ff; font-weight: bold;">new</span> Amf<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp;objAmf<span style="color: #000066; font-weight: bold;">.</span>URL = Config<span style="color: #000066; font-weight: bold;">.</span>URL_AMF_GATEWAY<span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp;objAmf<span style="color: #000066; font-weight: bold;">.</span>onSusseco = baixarSusseco<span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp;objAmf<span style="color: #000066; font-weight: bold;">.</span>onErro = baixarErro<span style="color: #000066; font-weight: bold;">;</span><br />
&nbsp; &nbsp;objAmf<span style="color: #000066; font-weight: bold;">.</span>executar<span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;ServiceLibrary.Imagem.JpegEncoder.Salvar&quot;</span><span style="color: #000066; font-weight: bold;">,</span> obterByteArray<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span></div></td></tr></tbody></table></div>
<p>Pelo comentário de cada método já podemos perceber como funciona o envio do Array de bytes.</p>
<p><span style="font-weight: bold;">Dicas:</span><br />
• Neste projeto utilizei o <a href="http://osflash.org/flashdevelop" target="_blank">FlashDevelop</a>, que na minha opinião é um ótimo editor de Action Script.<br />
• Observe a estrutura de classes, para quem ainda não entende muito de POO (Programação Orientada a Objetos) este post é um bom exemplo de organização de Packages e Nomenclatura de Variáveis, Classes e Métodos. Vou tentar em um próximo post escrever mais sobre Programação Orientada a Objetos (POO) de uma forma mais avançada abrangendo Encapsulamento, Herança e Polimorfismo, o qual não é o objetivo deste post).</p>
<p><span style="font-weight: bold;">Observações de Configuração:</span><br />
Observe na imagem abaixo o projeto aberto no FlashDevelop:</p>
<p><a href="http://1.bp.blogspot.com/_qLU3RxFHN9w/R7pOa8Bl3UI/AAAAAAAAAFo/3KL2o4pvLv0/s1600-h/FlashDevelop_Project.gif" rel="shadowbox[post-27];player=img;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img id="BLOGGER_PHOTO_ID_5168529747057433922" style="cursor: pointer;" src="http://1.bp.blogspot.com/_qLU3RxFHN9w/R7pOa8Bl3UI/AAAAAAAAAFo/3KL2o4pvLv0/s320/FlashDevelop_Project.gif" border="0" alt="" /></a></p>
<p>Clique com o botão direito do mouse sobre <span style="font-weight: bold;">JPEG_Encoder (AS3)</span>, vá em Properties, repare que na área <span style="font-weight: bold;">Project Classpaths</span> deve ser adicionado os dois diretórios (_Biblioteca_ e Classes).</p>
<p><span style="font-weight: bold;">Conclusão:</span><br />
Vimos como é possível o Flash gerar uma imagem (JPEG) utilizando a classe JPEGEncoder, como enviamos os binários do JPEG para o ASP.NET utilizando o FluorineFx e como o FluorineFx salva os binários em disco.</p>
<p>Por hoje é isso pessoal.<br />
Vocês podem fazer o <a href="http://fluorinefx-jpegencoder.bsoares.com.br/download.zip" target="_blank">download do projeto aqui</a>.</p>
<p><span style="font-weight: bold;">Links relacionados:</span><br />
• Exemplo: <a href="http://fluorinefx-jpegencoder.bsoares.com.br/" target="_blank">http://fluorinefx-jpegencoder.bsoares.com.br/</a><br />
• FluorineFx: <a href="http://www.fluorinefx.com/" target="_blank">http://www.fluorinefx.com/</a><br />
• FluorineFx download: <a href="http://www.fluorinefx.com/download.html" target="_blank">http://www.fluorinefx.com/download.html</a><br />
• FluorineFx Visual Studio: <a href="http://www.fluorinefx.com/docs/fluorine/vswizardnet20.html" target="_blank">http://www.fluorinefx.com/docs/fluorine/vswizardnet20.html</a><br />
• Live JPEG Encoder: <a href="http://www.bytearray.org/?p=26" target="_blank">http://www.bytearray.org/?p=26</a><br />
• PNG Encoder in AS3: <a href="http://www.kaourantin.net/2005/10/png-encoder-in-as3.html" target="_blank">http://www.kaourantin.net/2005/10/png-encoder-in-as3.html</a><br />
• FlashDevelop: <a href="http://osflash.org/flashdevelop" target="_blank">http://osflash.org/flashdevelop</a></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/remoting/jpeg-encoder-as3-fluorinefx-net-flash-remoting-gateway/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/remoting/jpeg-encoder-as3-fluorinefx-net-flash-remoting-gateway</feedburner:origLink></item>
		<item>
		<title>Fluorine, uma alternativa de Flash Remoting com ASP.NET</title>
		<link>http://feedproxy.google.com/~r/BrunoSoares/~3/Bs71uuGYNHA/fluorine-uma-alternativa-de-flash-remoting-com-aspnet</link>
		<comments>http://blog.bsoares.com.br/remoting/fluorine-uma-alternativa-de-flash-remoting-com-aspnet#comments</comments>
		<pubDate>Sat, 02 Feb 2008 05:01:31 +0000</pubDate>
		<dc:creator>Bruno Soares</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ActionScript 3.0]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Remoting]]></category>
		<category><![CDATA[AMF]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[FluorineFx]]></category>
		<category><![CDATA[JPGEncoder]]></category>
		<category><![CDATA[Techology]]></category>

		<guid isPermaLink="false">http://blog.bsoares.com.br/?p=20</guid>
		<description><![CDATA[Nos tempos em que o Flash ainda era da Macromedia, foi criada a especificação AMF (ActionScript Message Format), para facilitar a comunicação entre o ActionScript e as demais linguagens Server-side (Gateway, mais a diante vamos ver que o que controla a comunicação entre o ActionScript e o ASP.NET é com.TheSilentGroup.Fluorine.FluorineGateway). Temos hoje várias linguagem com [...]]]></description>
			<content:encoded><![CDATA[<p>Nos tempos em que o Flash ainda era da Macromedia, foi criada a especificação AMF (ActionScript Message Format), para facilitar a comunicação entre o ActionScript e as demais linguagens <a href="http://pt.wikipedia.org/wiki/Server-side">Server-side</a> (<a href="http://pt.wikipedia.org/wiki/Gateway">Gateway</a>, mais a diante vamos ver que o que controla a comunicação entre o ActionScript e o ASP.NET é com.TheSilentGroup.Fluorine.FluorineGateway). Temos hoje várias linguagem com alguma biblioteca que implemente AMF como por exemplo o PHP, Java, ColdFusion e também o ASP.NET. Existe uma alternativa de remoting muito boa para quem trabalha com PHP que é o <a href="http://www.amfphp.org/">AMFPHP</a>, para quem o conhece será fácil entender o funcionamento do <a href="http://fluorine.thesilentgroup.com/fluorine/download.html">Fluorine</a>. E para quem não o conhece tenho certeza de que vão encontrar muito material sobre ele na Internet.</p>
<p>Hoje em dia já estamos na versão 3 da AMF e a Fluorine também implementa bibliotecas para uso desta versão de AMF.</p>
<p>Vamos ao tutorial.</p>
<p>Nosso primeiro passo será o download do Fluorine no link a seguir: <a href="http://fluorine.thesilentgroup.com/fluorine/download.html">http://fluorine.thesilentgroup.com/fluorine/download.html</a><br />
Não vou dar detalhes da instalação porque é sempre a mesma coisa de Next, Next e Finish.</p>
<p>Após realizada a instalação do Fluorine, vamos abrir o Visual Studio e criar uma nova aplicação web<span id="0" class="transl_class" title="Click to correct">।</span> File -&gt; New -&gt; Web Site, selecione <span style="font-weight: bold;">Fluorine ASP.NET Web Application</span>, como mostrado na figura seguinte:</p>
<p><a rel="lightbox[roadtrip]" href="http://4.bp.blogspot.com/_qLU3RxFHN9w/R6PtUskUCAI/AAAAAAAAAEg/S-za1SwkKfk/s1600-h/Fluorine_01_new_web_site.gif"><img id="BLOGGER_PHOTO_ID_5162230537713354754" style="cursor: pointer;" src="http://4.bp.blogspot.com/_qLU3RxFHN9w/R6PtUskUCAI/AAAAAAAAAEg/S-za1SwkKfk/s320/Fluorine_01_new_web_site.gif" border="0" alt="" /></a></p>
<p>Sua <span style="font-weight: bold;">Solution Explorer</span> deve se parecer com esta imagem:</p>
<p><a rel="lightbox[roadtrip]" href="http://1.bp.blogspot.com/_qLU3RxFHN9w/R6PuK8kUCBI/AAAAAAAAAEo/H9K4iwXoCfo/s1600-h/Fluorine_02_solution_explorer.gif"><img id="BLOGGER_PHOTO_ID_5162231469721258002" style="cursor: pointer;" src="http://1.bp.blogspot.com/_qLU3RxFHN9w/R6PuK8kUCBI/AAAAAAAAAEo/H9K4iwXoCfo/s320/Fluorine_02_solution_explorer.gif" border="0" alt="" /></a></p>
<p>Abra o arquivo Sample.cs (dentro de App_Code), vamos utiliza-lo em nosso primeiro teste do Fluorine.<br />
Observe que a classe Sample está dentro do namespace www e que possui um método chamado Echo que retorna uma string e precisa de um parâmetro. O método pega a string do parâmetro (text), concatena com &#8220;Gateway echo: &#8221; e retorna.</p>
<div class="codecolorer-container csharp 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 />13<br />14<br />15<br />16<br /></div></td><td><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF;">using</span> <span style="color: #008080;">com.TheSilentGroup.Fluorine</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF;">namespace</span> www<br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#91;</span>RemotingService<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Fluorine sample service&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Sample<br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">public</span> Sample<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">string</span> Echo<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> text<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: #0600FF;">return</span> <span style="color: #666666;">&quot;Gateway echo: &quot;</span> <span style="color: #008000;">+</span> text<span style="color: #008000;">;</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>Pressione F5 para rodar a aplicação, clique sob o arquivo Console.aspx, note que você foi redirecionado para Fluorine.aspx, o Service Browser do Fluorine, deve se parecer com a imagem seguinte:</p>
<p><a rel="lightbox[roadtrip]" href="http://3.bp.blogspot.com/_qLU3RxFHN9w/R6PuqckUCCI/AAAAAAAAAEw/50bC8AlRmS8/s1600-h/Fluorine_03_service_browser.gif"><img id="BLOGGER_PHOTO_ID_5162232010887137314" style="cursor: pointer;" src="http://3.bp.blogspot.com/_qLU3RxFHN9w/R6PuqckUCCI/AAAAAAAAAEw/50bC8AlRmS8/s320/Fluorine_03_service_browser.gif" border="0" alt="" /></a></p>
<p>Você pode clicar no link “<span style="font-weight: bold;">• www.Sample</span>” para ver a especificação dos métodos e também obter um exemplo de código em ActionScript 1 e 2 que já roda os métodos da classes Sample.</p>
<p>Para dizer ao Fluorine que você quer que determinada classe seja acessada por Flash é só você importar “com.TheSilentGroup.Fluorine” (using com.TheSilentGroup.Fluorine;), e colocar o atributo “[RemotingService("Descrição")]” na classe. Fique atento que feito isso, o Fluorine só vai mostrar no Service Browser os métodos <span style="font-weight: bold;">publicos </span>da classe, é claro que sem contar o construtor.<br />
Veja como o Service Browser detalha os métodos das classes e já deixa um exemplo de Script para utilizarmos no Flash:</p>
<p><a rel="lightbox[roadtrip]" href="http://1.bp.blogspot.com/_qLU3RxFHN9w/R6PwD8kUCDI/AAAAAAAAAE4/XRd9aTQi5RQ/s1600-h/Fluorine_04_service_browser_sample.gif"><img id="BLOGGER_PHOTO_ID_5162233548485429298" style="cursor: pointer;" src="http://1.bp.blogspot.com/_qLU3RxFHN9w/R6PwD8kUCDI/AAAAAAAAAE4/XRd9aTQi5RQ/s320/Fluorine_04_service_browser_sample.gif" border="0" alt="" /></a></p>
<p>Visto que o Service Browser já gera o código correspondente em ActionScript 1 e 2, vamos deixar o nosso tutorial mais interessante e mostrar uma forma de fazer as devidas chamadas em ActionScript 3.0. Abra o Flash, e cria um arquivo novo, no primeiro frame do Flash insira o código a seguir:</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 />11<br />12<br />13<br />14<br />15<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: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.net</span><span style="color: #000066; font-weight: bold;">.*;</span><br />
<br />
<span style="color: #339966; font-weight: bold;">function</span> onResult<span style="color: #000000;">&#40;</span>responds<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=object%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:object.html"><span style="color: #004993;">Object</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> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;onResult: &quot;</span> <span style="color: #000066; font-weight: bold;">+</span> responds<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #339966; font-weight: bold;">function</span> onFault<span style="color: #000000;">&#40;</span>responds<span style="color: #000066; font-weight: bold;">:</span><a href="http://www.google.com/search?q=object%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:object.html"><span style="color: #004993;">Object</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> <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;fault &quot;</span> <span style="color: #000066; font-weight: bold;">+</span> responds<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">toString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<span style="color: #000000;">&#125;</span><br />
<br />
<span style="color: #6699cc; font-weight: bold;">var</span> responder <span style="color: #000066; font-weight: bold;">:</span> <a href="http://www.google.com/search?q=responder%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:responder.html"><span style="color: #004993;">Responder</span></a> = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=responder%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:responder.html"><span style="color: #004993;">Responder</span></a><span style="color: #000000;">&#40;</span>onResult<span style="color: #000066; font-weight: bold;">,</span> onFault<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
<br />
<span style="color: #6699cc; font-weight: bold;">var</span> gateway <span style="color: #000066; font-weight: bold;">:</span> <a href="http://www.google.com/search?q=netconnection%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:netconnection.html"><span style="color: #004993;">NetConnection</span></a> = <span style="color: #0033ff; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=netconnection%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:netconnection.html"><span style="color: #004993;">NetConnection</span></a><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
gateway<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">connect</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;http://localhost:2471/www/Gateway.aspx&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span><br />
gateway<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">call</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;www.Sample.Echo&quot;</span><span style="color: #000066; font-weight: bold;">,</span> responder<span style="color: #000066; font-weight: bold;">,</span> <span style="color: #990000;">&quot;Primeiro teste do Fluorine!&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></div></td></tr></tbody></table></div>
<p>Fique atento quanto ao endereço do Gateway.aspx, pois no nosso exemplo estou utilizando o endereço que o próprio Visual Studio cria quando rodamos a aplicação, por isto que temos esta portar “maluca” (http://localhost:<span style="font-weight: bold;">2471</span>).</p>
<p>Depois que você rodar a aplicação no Visual Studio, pegar o endereço gerado por ele, colar o endereço dentro de ‘gateway.connect(&#8220;<span style="font-weight: bold;">ENDEREÇO</span>&#8220;);’ e exportar o flash, você deve receber a mensagem “onResult: Gateway echo: Primeiro teste do Fluorine!”. Se foi exatamente isso que aconteceu, uueebá! Você acabou de fazer o seu primeiro teste de Flash Remoting com ASP.NET utilizando Fluorine!!! Fácil não?</p>
<p><span style="font-weight: bold;">Agora vamos entender cada linha de código desse nosso ActionScript 3.0:</span><br />
<span style="font-weight: bold;">1ª – </span>Importamos todas as classes que nos ajudam a efetuar conexões do Flash com o “Mundo Externo”.<br />
<span style="font-weight: bold;">3ª à 9ª – </span>Criamos as funções de callback que vão receber as respostas da nossa requisição.<br />
<span style="font-weight: bold;">11ª – </span>Criamos um Responder para armazenar as nossas funções de respostas (onResult e onFault).<br />
<span style="font-weight: bold;">13ª – </span>Criamos o nosso gateway, responsável pela comunicação com o Fluorine.<br />
<span style="font-weight: bold;">14ª – </span>Conectamos o nosso gateway ao Serviço do Fluorine.<br />
<span style="font-weight: bold;">15ª – </span>Efetuamos a chamada para o método <span style="font-weight: bold;">Echo</span> da classe <span style="font-weight: bold;">Sample</span> que se encontra no namespace <span style="font-weight: bold;">www</span>, passamos como segundo parâmetro o Responder (criado na linha 11) e como 3º parâmetro passamos o uma string, pois o método Echo precisa de uma string para funcionar.</p>
<p>É isso ai pessoal, espero ter ajudado aqueles que precisam da combinação Flash + ASP.NET, como foi o meu caso, pois já conhecia o AMFPHP mas no meu trabalho atual utilizamos ASP.NET.</p>
<p>No próximo post vou mostrar como transferir um bitmap do Flash para o Fluorine, agora a coisa vai ficar boa :)</p>
<p>Link para download do projeto:<br />
<a href="http://blog.bsoares.com.br/wp-content/uploads/2009/03/20080202_projeto.zip" target="_self">http://blog.bsoares.com.br/wp-content/uploads/2009/03/20080202_projeto.zip</a></p>
<p><span style="font-weight: bold;">Links relacionados:</span><br />
• Fluorine: <a href="http://fluorine.thesilentgroup.com/fluorine">http://fluorine.thesilentgroup.com/fluorine</a><br />
• Fluorine download: <a href="http://fluorine.thesilentgroup.com/fluorine/download.html">http://fluorine.thesilentgroup.com/fluorine/download.html</a><br />
• Flash Remoting: <a href="http://www.adobe.com/devnet/flashremoting/">http://www.adobe.com/devnet/flashremoting/</a><br />
• AMF3: <a href="http://osflash.org/documentation/amf3">http://osflash.org/documentation/amf3</a><br />
• AMFPHP: <a href="http://www.amfphp.org/">http://www.amfphp.org</a><br />
• Gateway: <a href="http://pt.wikipedia.org/wiki/Gateway">http://pt.wikipedia.org/wiki/Gateway</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bsoares.com.br/remoting/fluorine-uma-alternativa-de-flash-remoting-com-aspnet/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://blog.bsoares.com.br/remoting/fluorine-uma-alternativa-de-flash-remoting-com-aspnet</feedburner:origLink></item>
	</channel>
</rss>
