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

<channel>
	<title>Robot is Happy &#187; Arduino</title>
	<atom:link href="http://www.robotishappy.com/category/arduino/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.robotishappy.com</link>
	<description>creating our robot overlords one day at a time</description>
	<lastBuildDate>Tue, 19 Oct 2010 13:29:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<!-- podcast_generator="podPress/8.8" - maintenance_release="8.8.5.3" -->
	<copyright>Copyright &#xA9; 2012 Robot is Happy </copyright>
	<managingEditor>chris@robotishappy.com</managingEditor>
	<webMaster>chris@robotishappy.com</webMaster>
	<category>posts</category>
	<image>
		<url>http://www.robotishappy.com/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>Robot is Happy &#187; Arduino</title>
		<link>http://www.robotishappy.com</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>creating our robot overlords one day at a time</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &amp; Culture" />
	<itunes:author></itunes:author>
	<itunes:owner>
		<itunes:name></itunes:name>
		<itunes:email>chris@robotishappy.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://www.robotishappy.com/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>Sign Language Translator</title>
		<link>http://www.robotishappy.com/2010/10/sign-language-translator/</link>
		<comments>http://www.robotishappy.com/2010/10/sign-language-translator/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 15:53:17 +0000</pubDate>
		<dc:creator>Christopher Hazlett</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Other People's Robots]]></category>

		<guid isPermaLink="false">http://www.robotishappy.com/?p=524</guid>
		<description><![CDATA[Awesome use of the Arduino Mega and other various sensors.  Consider me awestruck.


Translation from one language to another is often like swapping variable values; you need something in the middle. That’s why translators were invented, but the opportunity for them to interject obscene comments made communication between people of different languages uneasy. And since [...]]]></description>
			<content:encoded><![CDATA[<p>Awesome use of the Arduino Mega and other various sensors.  Consider me awestruck.</p>
<p><img src="http://farm5.static.flickr.com/4130/5045447395_e1ab2879d5.jpg" alt="Sign Language Glove" /></p>
<blockquote><p>
Translation from one language to another is often like swapping variable values; you need something in the middle. That’s why translators were invented, but the opportunity for them to interject obscene comments made communication between people of different languages uneasy. And since my understanding of other languages is a bit rusty, and my group needed a project with a biomedical bent, we decided to translate from American English to American Sign Language. That’s right, you should be really excited right now.
</p></blockquote>
<p><a href="http://www.clloks.com/?p=8">Check it Out</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.robotishappy.com/2010/10/sign-language-translator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino &#8211; Something New!!</title>
		<link>http://www.robotishappy.com/2010/09/arduino-something-new/</link>
		<comments>http://www.robotishappy.com/2010/09/arduino-something-new/#comments</comments>
		<pubDate>Fri, 10 Sep 2010 23:37:23 +0000</pubDate>
		<dc:creator>Christopher Hazlett</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.robotishappy.com/?p=518</guid>
		<description><![CDATA[Arduino has something new.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.robotishappy.com/wp-content/uploads/2010/09/mysteryDuino.jpg"><img src="http://www.robotishappy.com/wp-content/uploads/2010/09/mysteryDuino-300x208.jpg" alt="Something New." title="mysteryDuino" width="300" height="208" class="alignnone size-medium wp-image-519" /></a></p>
<p>Arduino has something in the works. I can only wonder what it is, but I already want it. <a href="http://http://arduino.cc/">I want it so bad.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.robotishappy.com/2010/09/arduino-something-new/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jSON library for Arduino</title>
		<link>http://www.robotishappy.com/2010/09/json-library-for-arduino/</link>
		<comments>http://www.robotishappy.com/2010/09/json-library-for-arduino/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 01:44:19 +0000</pubDate>
		<dc:creator>Christopher Hazlett</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Other People's Robots]]></category>
		<category><![CDATA[library]]></category>

		<guid isPermaLink="false">http://www.robotishappy.com/?p=512</guid>
		<description><![CDATA[Exchanging data with other computers can be a daunting task with Arduino. No matter if you just want to pass some information to Processing, to a Web Service or something else – You always have to encode the data and decode the answer.]]></description>
			<content:encoded><![CDATA[<blockquote><p>
Exchanging data with other computers can be a daunting task with Arduino. No matter if you just want to pass some information to Processing, to a Web Service or something else – You always have to encode the data and decode the answer.</p>
<p>There always have been solutions like XML for structured data. But XML is hard to decode, complicated an takes up a lot of space. And then there is JSON. JSON is an easy and efficient way to transfer data.
</p></blockquote>
<p><a href="http://interactive-matter.org/2010/08/ajson-handle-json-with-arduino/">Check out the tutorial and library.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.robotishappy.com/2010/09/json-library-for-arduino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Part 1) Visualizing 3-Axis Accelerometer Readings in Processing</title>
		<link>http://www.robotishappy.com/2010/08/part-1-visualizing-3-axis-accelerometer-readings-in-processing/</link>
		<comments>http://www.robotishappy.com/2010/08/part-1-visualizing-3-axis-accelerometer-readings-in-processing/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 02:59:23 +0000</pubDate>
		<dc:creator>Christopher Hazlett</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Processing]]></category>
		<category><![CDATA[Radio Control]]></category>
		<category><![CDATA[Accelerometer]]></category>

		<guid isPermaLink="false">http://www.robotishappy.com/?p=472</guid>
		<description><![CDATA[So I started playing around with a 3-Axis Accelerometer in the hopes of dreaming up some project or other.  So I hooked it up to my Arduino and my Arduino to my computer and wrote a little Processing code to graph it all into pretty colors.]]></description>
			<content:encoded><![CDATA[<p>It's been a while since I've had the chance to do anything vaguely electronic. Sure, I've painted rooms in my house, installed ceiling fans, added insulation to my attic, but that's a far cry from programming in Wiring or Processing.  So, thankfully, after getting my new workspace all put together, I got the chance to play with some of the parts I've had waiting in a few SparkFun boxes.</p>
<p>So I started playing around with a 3-Axis Accelerometer in the hopes of dreaming up some project or other.  So I hooked it up to my Arduino and my Arduino to my computer and wrote a little Processing code to graph it all into pretty colors.  As with all of my projects, the first step for me is understanding and since I didn't have much experience with Accelerometers a little crash course was in order.  As it turns out, it's a fairly simple sensor to use (or collection of 3 sensors: x, y, z, I should say). Simply plug the VCC connector into the Arduino 3V pin (not the 5V pin. The ADXL3305 chip is only rated to 3.3V), the ground into ground and the x, y, and z pins into 0,1,2 analog pins.  The code for the Arduino is simple:</p>
<h2>The Arduino Code</h2>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define X_AXIS 0</span>
<span style="color: #339933;">#define Y_AXIS 1</span>
<span style="color: #339933;">#define Z_AXIS 2</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #993333;">int</span> x <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span>X_AXIS<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> y <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span>Y_AXIS<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> z <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span>Z_AXIS<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'|'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">':'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span>z<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>It takes the readings in and outputs them into a formatted string '[x]|[y]:[z]'. That's it.  This is just for outputting data right now, so nothing special. It gets more interesting when we look at the processing.</p>
<h2>The Processing Code in Action</h2>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/vblcfZ291vw&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/vblcfZ291vw&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p>The code that makes the sweet, sweet video above isn't necessarily complicated, but there may be a few things you haven't used in Processing before.</p>
<ul>
<li><a href="http://processing.org/reference/map_.html">map(value, low1, high1, low2, high2)</a> - converts a value from one range into a corresponding value into another range.</li>
<li><a href="http://processing.org/reference/norm_.html">norm(value, low, high)</a> - converts a value into a value from 0.0 to 1.0 based on the supplied range.</li>
<li><a href="http://processing.org/reference/popMatrix_.html">pushMatrix()</a> / <a href="http://processing.org/reference/pushMatrix_.html">popMatrix()</a> - the pushMatrix() and popMatrix() methods allow you to apply rotation, translation, and other methods to a specific style.  By issuing the pushMatrix() then calling the translate(), and rotateX, rotateY methods, you can then call popMatrix so those methods don't affect other elements being rendered by Processing.</li>
</ul>
<h2>The Processing Code</h2>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.serial.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.opengl.*</span><span style="color: #339933;">;</span>
Serial myPort<span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span> baudRate <span style="color: #339933;">=</span> <span style="color: #cc66cc;">9600</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span> lf <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
&nbsp;
PFont font<span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> xAxis<span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> yAxis<span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> zAxis<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">int</span> currentX <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span> currentY <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span> currentZ <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//these value were determined by taking readings from a resting position</span>
<span style="color: #000066; font-weight: bold;">int</span> oneGSensorValue <span style="color: #339933;">=</span> <span style="color: #cc66cc;">400</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">float</span> oneGMillivolt <span style="color: #339933;">=</span> oneGSensorValue <span style="color: #339933;">*</span> <span style="color: #cc66cc;">4.9</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">int</span> totalReadings <span style="color: #339933;">=</span> <span style="color: #cc66cc;">400</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">int</span> readingPos <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// the reading position in the array</span>
&nbsp;
<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>
  smooth<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">600</span>, <span style="color: #cc66cc;">300</span>, OPENGL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
  font <span style="color: #339933;">=</span> createFont<span style="color: #009900;">&#40;</span>PFont.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">270</span><span style="color: #009900;">&#93;</span>, <span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  smallFont<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  xAxis <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span>totalReadings<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  yAxis <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span>totalReadings<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  zAxis <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span>totalReadings<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&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> totalReadings<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    xAxis<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> oneGSensorValue<span style="color: #339933;">;</span>
    yAxis<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> oneGSensorValue<span style="color: #339933;">;</span>
    zAxis<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> oneGSensorValue<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  myPort <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><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>, baudRate<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  myPort.<span style="color: #006633;">bufferUntil</span><span style="color: #009900;">&#40;</span>lf<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  noLoop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> serialEvent<span style="color: #009900;">&#40;</span>Serial p<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #003399;">String</span> inString<span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span>
    inString <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>myPort.<span style="color: #006633;">readString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    currentX <span style="color: #339933;">=</span> xValue<span style="color: #009900;">&#40;</span>inString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    currentY <span style="color: #339933;">=</span> yValue<span style="color: #009900;">&#40;</span>inString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    currentZ <span style="color: #339933;">=</span> zValue<span style="color: #009900;">&#40;</span>inString<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    xAxis <span style="color: #339933;">=</span> insertValueIntoArray<span style="color: #009900;">&#40;</span>xAxis, currentX, readingPos, totalReadings<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    yAxis <span style="color: #339933;">=</span> insertValueIntoArray<span style="color: #009900;">&#40;</span>yAxis, currentY, readingPos, totalReadings<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    zAxis <span style="color: #339933;">=</span> insertValueIntoArray<span style="color: #009900;">&#40;</span>zAxis, currentZ, readingPos, totalReadings<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    readingPos <span style="color: #339933;">=</span> readingPos <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// increment the array position</span>
  <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   println<span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  redraw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<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>
  background<span style="color: #009900;">&#40;</span>#FEFFFC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  drawGraph<span style="color: #009900;">&#40;</span>xAxis, <span style="color: #cc66cc;">100</span>, color<span style="color: #009900;">&#40;</span>#<span style="color: #cc66cc;">519050</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;X - Axis&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
  drawGraph<span style="color: #009900;">&#40;</span>yAxis, <span style="color: #cc66cc;">200</span>, color<span style="color: #009900;">&#40;</span>#708CDE<span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;Y - Axis&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  drawGraph<span style="color: #009900;">&#40;</span>zAxis, <span style="color: #cc66cc;">300</span>, color<span style="color: #009900;">&#40;</span>#D38031<span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;Z - Axis&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  draw3d<span style="color: #009900;">&#40;</span>currentX, currentY, currentZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> drawGraph<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> arrToDraw, <span style="color: #000066; font-weight: bold;">int</span> yPos, color graphColor, <span style="color: #003399;">String</span> name<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">int</span> arrLength <span style="color: #339933;">=</span> arrToDraw.<span style="color: #006633;">length</span><span style="color: #339933;">;</span>
  stroke<span style="color: #009900;">&#40;</span>graphColor<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> x<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> x<span style="color: #339933;">&lt;</span>arrLength <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> x<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">float</span> normalizedLine <span style="color: #339933;">=</span> norm<span style="color: #009900;">&#40;</span>arrToDraw<span style="color: #009900;">&#91;</span>x<span style="color: #009900;">&#93;</span>, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">700.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">float</span> lineHeight <span style="color: #339933;">=</span> map<span style="color: #009900;">&#40;</span>normalizedLine, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">1.0</span>, <span style="color: #cc66cc;">0.00</span>, <span style="color: #cc66cc;">85.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    line<span style="color: #009900;">&#40;</span>x, yPos, x, yPos <span style="color: #339933;">-</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>lineHeight<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #009900;">&#125;</span>
  pushStyle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  smallFont<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  stroke<span style="color: #009900;">&#40;</span>#FFFFFF<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  fill<span style="color: #009900;">&#40;</span>#FFFFFF<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #003399;">String</span> gString <span style="color: #339933;">=</span> nfc<span style="color: #009900;">&#40;</span>gFromSensorValue<span style="color: #009900;">&#40;</span>arrToDraw<span style="color: #009900;">&#91;</span>arrLength <span style="color: #339933;">-</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  text<span style="color: #009900;">&#40;</span>name <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; : &quot;</span> <span style="color: #339933;">+</span> gString <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; Gs&quot;</span>, <span style="color: #cc66cc;">10</span>, yPos <span style="color: #339933;">-</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  popStyle<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> draw3d<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> currentX, <span style="color: #000066; font-weight: bold;">int</span> currentY, <span style="color: #000066; font-weight: bold;">int</span> currentZ<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">float</span> normalizedX <span style="color: #339933;">=</span> norm<span style="color: #009900;">&#40;</span>currentX, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">700.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">float</span> normalizedY <span style="color: #339933;">=</span> norm<span style="color: #009900;">&#40;</span>currentY, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">700.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">float</span> normalizedZ <span style="color: #339933;">=</span> norm<span style="color: #009900;">&#40;</span>currentZ, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">700.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">float</span> finalZ <span style="color: #339933;">=</span> map<span style="color: #009900;">&#40;</span>normalizedZ, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">1.0</span>, <span style="color: #cc66cc;">300.00</span>, <span style="color: #cc66cc;">0.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">float</span> finalY <span style="color: #339933;">=</span> map<span style="color: #009900;">&#40;</span>normalizedY, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">1.0</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">3.5</span>, <span style="color: #cc66cc;">3.5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">float</span> finalX <span style="color: #339933;">=</span> map<span style="color: #009900;">&#40;</span>normalizedX, <span style="color: #cc66cc;">0.0</span>, <span style="color: #cc66cc;">1.0</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">3.5</span>, <span style="color: #cc66cc;">3.5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  pushMatrix<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  ambientLight<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">102</span>, <span style="color: #cc66cc;">102</span>, <span style="color: #cc66cc;">102</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  lightSpecular<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">204</span>, <span style="color: #cc66cc;">204</span>, <span style="color: #cc66cc;">204</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  directionalLight<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">102</span>, <span style="color: #cc66cc;">102</span>, <span style="color: #cc66cc;">102</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  shininess<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  translate<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span>, finalZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rotateY<span style="color: #009900;">&#40;</span>finalY <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rotateZ<span style="color: #009900;">&#40;</span>finalX<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  fill<span style="color: #009900;">&#40;</span>#E2E8D5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  noStroke<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  fill<span style="color: #009900;">&#40;</span>#B76F6F<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">float</span> heightWidth <span style="color: #339933;">=</span> finalX <span style="color: #339933;">*</span> <span style="color: #cc66cc;">1.8</span><span style="color: #339933;">;</span>
  box<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">65</span>, <span style="color: #cc66cc;">65</span>, <span style="color: #cc66cc;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  popMatrix<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">int</span> xValue<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> inString<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">int</span> pipeIndex <span style="color: #339933;">=</span> inString.<span style="color: #006633;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'|'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>inString.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>,pipeIndex<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">int</span> yValue<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> inString<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">int</span> pipeIndex <span style="color: #339933;">=</span> inString.<span style="color: #006633;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'|'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000066; font-weight: bold;">int</span> colonIndex <span style="color: #339933;">=</span> inString.<span style="color: #006633;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">':'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>inString.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span>pipeIndex<span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span>, colonIndex<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">int</span> zValue<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> inString<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">int</span> colonIndex <span style="color: #339933;">=</span> inString.<span style="color: #006633;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">':'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#40;</span>inString.<span style="color: #006633;">substring</span><span style="color: #009900;">&#40;</span>colonIndex <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, inString.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
This little method creates a running tally of all the incoming sensor readings
and then, when it reaches the end of the array, it pops the first one of the beginning
and inserts a new value in at the end...thus keeping a running tally of the last 400
readings (it can be for any length array, that's just what it's set to for this project).
This works a lot like an RRD graph where my inspiration came from.
*/</span>
<span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> insertValueIntoArray<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> targetArray, <span style="color: #000066; font-weight: bold;">int</span> val, <span style="color: #000066; font-weight: bold;">int</span> pos, <span style="color: #000066; font-weight: bold;">int</span> maxLength<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#40;</span>maxLength<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     <span style="color: #666666; font-style: italic;">// if the pos == maxSize, shift the array to retain the original value</span>
     <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> returnArray <span style="color: #339933;">=</span> subset<span style="color: #009900;">&#40;</span>targetArray, <span style="color: #cc66cc;">1</span>, maxLength<span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     returnArray <span style="color: #339933;">=</span> expand<span style="color: #009900;">&#40;</span>returnArray, maxLength<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     returnArray<span style="color: #009900;">&#91;</span>maxLength<span style="color: #339933;">-</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> val<span style="color: #339933;">;</span>
     <span style="color: #000000; font-weight: bold;">return</span> returnArray<span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
     targetArray<span style="color: #009900;">&#91;</span>pos<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> val<span style="color: #339933;">;</span>
     <span style="color: #000000; font-weight: bold;">return</span> targetArray<span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
This conversion will vary from project to project
and if you're project is relying on battery power
the reading may need to be adjusted to give you true 
one G as your battery power decreases.  All of this is due to
the output of the X,Y, and Z sensors and their coorelation to the incoming voltage at VCC
Check out the specs for the ADXL335 (part of the break out board from Sparkfun.com) here: http://www.analog.com/en/sensors/inertial-sensors/adxl335/products/product.html
*/</span>
<span style="color: #000066; font-weight: bold;">float</span> gFromSensorValue<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> sensorValue<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">//convert analog value into millivolts</span>
  <span style="color: #000066; font-weight: bold;">float</span> mvValue <span style="color: #339933;">=</span> sensorValue <span style="color: #339933;">*</span> <span style="color: #cc66cc;">4.9</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">return</span> mvValue<span style="color: #339933;">/</span>oneGMillivolt<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> smallFont<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  textFont<span style="color: #009900;">&#40;</span>font, <span style="color: #cc66cc;">24</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">void</span> mediumFont<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> textFont<span style="color: #009900;">&#40;</span>font, <span style="color: #cc66cc;">30</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">void</span> largeFont<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>  textFont<span style="color: #009900;">&#40;</span>font, <span style="color: #cc66cc;">40</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>This is just the first step of a larger project to create a DIY radio control using an xBee and this 3-axis accelerometer.</p>
<p>Happy Coding.<br />
- Chris</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robotishappy.com/2010/08/part-1-visualizing-3-axis-accelerometer-readings-in-processing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Arduino LED Shield by Jimmy P. Rodgers</title>
		<link>http://www.robotishappy.com/2009/12/arduino-led-shield-by-jimmy-p-rodgers/</link>
		<comments>http://www.robotishappy.com/2009/12/arduino-led-shield-by-jimmy-p-rodgers/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 14:03:33 +0000</pubDate>
		<dc:creator>Christopher Hazlett</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Other People's Robots]]></category>
		<category><![CDATA[shield]]></category>

		<guid isPermaLink="false">http://www.robotishappy.com/?p=437</guid>
		<description><![CDATA[Jimmy P. Rodgers over at jimmieprodgers.com (appropriately enough) spent some hard earned brain power developing a 126 LED shield for an Arduino. Nice work sir, nice work.]]></description>
			<content:encoded><![CDATA[<p>Jimmy P. Rodgers over at <a href="http://www.jimmieprodgers.com">jimmieprodgers.com</a> (appropriately enough) spent some hard earned brain power developing a 126 LED shield for an Arduino.  Nice work sir, nice work.</p>
<p><a href="http://www.robotishappy.com/wp-content/uploads/2009/12/4206318727_3bfbfb4506_m.jpg"><img class="alignnone size-full wp-image-438" title="LED Shield for Arduino" src="http://www.robotishappy.com/wp-content/uploads/2009/12/4206318727_3bfbfb4506_m.jpg" alt="LED Shield" /></a></p>
<p><a href="http://jimmieprodgers.com/2009/12/my-development-process-part-2/" target="_self">Take a look at it over at jimmieprodgers.com.</a></p>
<p>- Chris</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robotishappy.com/2009/12/arduino-led-shield-by-jimmy-p-rodgers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beacon Locating Robot &#8211; Powered by Arduino and IR Transceiver</title>
		<link>http://www.robotishappy.com/2009/12/beacon-locating-robot-powered-by-arduino-and-ir-transceiver/</link>
		<comments>http://www.robotishappy.com/2009/12/beacon-locating-robot-powered-by-arduino-and-ir-transceiver/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 02:08:28 +0000</pubDate>
		<dc:creator>Christopher Hazlett</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Beacon Locating Robot]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Infrared]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.robotishappy.com/?p=414</guid>
		<description><![CDATA[After I built my first <a href="http://www.robotishappy.com/2009/12/light-seeking-robot-using-the-arduino/">Arduino-based robot</a>, I wanted to graduate to a little more advanced behavior, and I had it my mind to make a robot that would find a home base via an IR Beacon.]]></description>
			<content:encoded><![CDATA[<p>After I built my first <a href="http://www.robotishappy.com/2009/12/light-seeking-robot-using-the-arduino/">Arduino-based robot</a>, I wanted to graduate to a little more advanced behavior, and I had it my mind to make a robot that would find a home base via an IR Beacon.  Plus I saw that Pololu had the perfect parts for the job, the <a href="http://www.pololu.com/catalog/product/702">IR Beacon Transceiver pair</a>.  My wife was gracious enough to get me some IR distance sensors, a servo and the transceivers for my birthday in August. If she keeps supporting my hobbies like this, she'll have more robots than she can handle.  As always, I'll start with the parts.</p>
<h2>The Parts</h2>
<p>I, of course, re-used parts from my last robot, but I'll include the links here as well. My robots are nothing if not a source of parts for the next robot.</p>
<ul>
<li><a href="http://www.adafruit.com/index.php?main_page=product_info&amp;cPath=17&amp;products_id=50">Arduino (1 @ $30.00 from Adafruit.com)</a> - I actually got the Arduino Starter kit from Adafruit.com which also came with the 9V battery holder you see in the pictures and videos below.</li>
<li><a href="http://www.adafruit.com/index.php?main_page=product_info&amp;cPath=17_21&amp;products_id=81">Arduino Motor Shield (1 @ $19.50 from Adafruit.com)</a> - I used the motor shield again in this project because I only needed access to the six analog pins for the sensors on the Arduino and it's just so darn easy to use.</li>
<li><a href="http://www.pololu.com/catalog/product/1060">RP5 Tracked Chassis (1 @ 49.95 from Pololu.com)</a> - This chassis has proven to be very versatile and big enough to support a wide array of sensors.</li>
<li><a href="http://www.pololu.com/catalog/product/702">IR Beacon Transceiver Pair (1 @ 49.95 from Pololu.com)</a> - Fantastic kit from Pololu.com (my favorite store for all things robotic. This acts as the core of the robot's sensors.</li>
<li><a href="http://www.pololu.com/catalog/product/1137">Sharp GP2Y0A02YK0F Analog Distance Sensor 20-150cm (1 @ 13.95 from Pololu.com)</a> - Pretty much your standard IR distance sensor from Sharp.</li>
<li><a href="http://www.pololu.com/catalog/product/501">GWS PICO Sub-Micro Servo (1 @ 15.95 from Pololu.com)</a> - Great little servo.  There's not much more to it than that.</li>
<li><a href="http://www.pololu.com/catalog/product/1531">Pololu RP5 Expansion Plate RRC07A (Narrow) Solid Black (1 @ 6.95 from Pololu.com)</a> - Pololu.com just recently started offering this gem and makes changing and building a robot on the RP5 chassis a little more like geek nirvana than it was before.</li>
<li><a href="http://www.pololu.com/catalog/product/1541">Pololu RP5 Expansion Plate RRC07B (Wide) Solid Black (1 @ 11.95 from Pololu.com)</a> - The bottom plate on the robot.</li>
<li><a href="http://www.pololu.com/catalog/product/1066">Aluminium Standoffs (2 @ 1.95 from Pololu.com)</a> - Little posts...nothing more, nothing less.</li>
<li><a href="http://www.pololu.com/catalog/product/90">Tamiya 70164 Universal Metal Joint Parts (2 @ 3.90 from Pololu.com)</a> - These are great construction pieces to have lying around.  I didn't actually use both kits, but I have two and I know I used scews and nuts from both.</li>
</ul>
<p>I also used various crimped and un-crimped wires lying around that I use regularly, but that's a separate post.</p>
<h2>The Robot</h2>
<p><img class="alignnone size-full wp-image-427" title="beacon_robot" src="http://www.robotishappy.com/wp-content/uploads/2009/12/beacon_robot.gif" alt="Beacon Locating Robot" /></p>
<p><img class="alignnone size-full wp-image-431" title="Robot-side" src="http://www.robotishappy.com/wp-content/uploads/2009/12/Robot-side.gif" alt="Beacon Locating Robot" /></p>
<p>It's a pretty simple concept, place a home base somewhere and then have the robot find said home base from it's current location and make it's way there.  When I first started thinking about how to execute this project, I thought it was going to be much more complicated to institute the seeking behavior I was looking for.  The IR transceivers from Pololu.com were much better than I thought they'd be and had a lot of power.  As you can see in the video below, the beacons are powerful enough to work around corners, so I never ended up putting a seeking algorithm in place.  The beacon took care of that for me.  All I had to do was make sure it avoided walls on its way to the home base. To accomplish that, I put the servo and Sharp distance sensor on the front and performed a sweep with the sensor and read the values from analog input 0.  That's the bare bones of the robot.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" 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://www.youtube.com/v/TqskQru6pa8&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/TqskQru6pa8&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>The Home Base</h2>
<p><img class="alignnone size-full wp-image-430" title="Home-Base" src="http://www.robotishappy.com/wp-content/uploads/2009/12/Home-Base.gif" alt="Home-Base" /></p>
<p>For the home base, I took one of the transceivers and raised it to the height of the robot's head.  This ended up being unnecessary.  The robot would find the beacon if it was at any level.  The home base didn't have to do anything, so I just powered it up and let it run.</p>
<h2>The Code</h2>
<p>There are a couple of gotchas when writing the code. Because the IR transceivers are always reading, I had to do a comparison of each reading to determine which of the directional sensors was the highest.  You can't just read the input as an on or off.  The second and harder portion of the code (and actually the most fun) was determining which direction to make the robot move.  At first, I just let the robot move after determining which direction was currently being read from the beacon.  In practice, this seems completely fine, but you'll see in the videos that the beacon itself changes directions quite frequently.  This made the robot indecisive. To combat this problem, I figure out the <a href="http://en.wikipedia.org/wiki/Mode_%28statistics%29">Mode</a> of the readings.  Essentially, I took the last ten readings and counted what the most prevalent direction was.  This smoothed out the robot's behavior and it behaved as expected.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;Servo.h&gt;</span>
<span style="color: #339933;">#include &lt;AFMotor.h&gt;</span>
<span style="color: #339933;">#define TOPSPEED 200</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// SERVO SCANNING VARIABLES //</span>
Servo myservo<span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// create servo object to control a servo</span>
<span style="color: #993333;">int</span> servoPosition <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>    <span style="color: #666666; font-style: italic;">// variable to store the servo position</span>
<span style="color: #993333;">const</span> <span style="color: #993333;">int</span> SERVO_PIN <span style="color: #339933;">=</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> floorState <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">long</span> frontReading <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
boolean scanIncrement <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//increase position?</span>
byte servoIncrementValue <span style="color: #339933;">=</span> <span style="color: #0000dd;">6</span><span style="color: #339933;">;</span>
byte servoDecrementValue <span style="color: #339933;">=</span> <span style="color: #0000dd;">6</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// MOTOR VARIABLES //</span>
AF_DCMotor rightMotor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">4</span><span style="color: #339933;">,</span> MOTOR12_8KHZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
AF_DCMotor leftMotor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #339933;">,</span> MOTOR12_8KHZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #666666; font-style: italic;">// TRANSCEIVER VARIABLES //</span>
<span style="color: #993333;">int</span> notFoundSensitivity <span style="color: #339933;">=</span> <span style="color: #0000dd;">500</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> west <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> south <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> east <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> north <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> dir <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
boolean detected <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// TRANSCEIVER DIRECTION MODE VARIABLES //</span>
<span style="color: #993333;">const</span> <span style="color: #993333;">int</span> NUM_READINGS <span style="color: #339933;">=</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> directionReadings<span style="color: #009900;">&#91;</span>NUM_READINGS<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> modeOfDirections <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> index <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">38400</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  myservo.<span style="color: #202020;">attach</span><span style="color: #009900;">&#40;</span>SERVO_PIN<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// attaches the servo on pin 9 to the servo object</span>
  myservo.<span style="color: #202020;">write</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  scan<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> 
&nbsp;
<span style="color: #993333;">void</span> move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>servoPosition <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">&amp;&amp;</span> servoPosition <span style="color: #339933;">&lt;=</span> <span style="color: #0000dd;">84</span> <span style="color: #339933;">&amp;&amp;</span> frontReading <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">550</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//Object on the left</span>
      turnLeft<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>servoPosition <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">85</span> <span style="color: #339933;">&amp;&amp;</span> servoPosition <span style="color: #339933;">&lt;=</span> <span style="color: #0000dd;">105</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> frontReading <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">600</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// Object in Front</span>
      turnAround<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>servoPosition <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">106</span> <span style="color: #339933;">&amp;&amp;</span> servoPosition <span style="color: #339933;">&lt;=</span> <span style="color: #0000dd;">180</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> frontReading <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">550</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// Object on the Right</span>
      turnRight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
      moveTowardBeacon<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> moveTowardBeacon<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  readTransceiverandSetDirection<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>modeOfDirections <span style="color: #339933;">==</span> <span style="color: #0000dd;">3</span> <span style="color: #339933;">||</span> modeOfDirections <span style="color: #339933;">==</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//South or West</span>
    turnRight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>modeOfDirections <span style="color: #339933;">==</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// East</span>
    turnLeft<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>modeOfDirections <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//North</span>
    moveForward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> scan<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
   scanIncrement <span style="color: #339933;">?</span> servoPosition<span style="color: #339933;">+=</span>servoIncrementValue <span style="color: #339933;">:</span> servoPosition<span style="color: #339933;">-=</span>servoDecrementValue<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//increment or decrement current position</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>servoPosition <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">180</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     scanIncrement <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
     servoPosition <span style="color: #339933;">=</span> <span style="color: #0000dd;">180</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>servoPosition <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;=</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     scanIncrement <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>
     servoPosition <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
   frontReading <span style="color: #339933;">=</span> measureFront<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">//Serial.print(servoPosition);</span>
   <span style="color: #666666; font-style: italic;">//Serial.print(&quot;|&quot;);</span>
   <span style="color: #666666; font-style: italic;">//Serial.print(frontReading);</span>
   <span style="color: #666666; font-style: italic;">//Serial.print(&quot;;&quot;);</span>
   myservo.<span style="color: #202020;">write</span><span style="color: #009900;">&#40;</span>servoPosition<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">long</span> measureFront<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> analogRead<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> moveForward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Move Forward&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>FORWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>FORWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> speedUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">==</span>TOPSPEED<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    rightMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    leftMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> slowToStop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i<span style="color: #339933;">=</span>TOPSPEED<span style="color: #339933;">;</span> i<span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    rightMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    leftMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> turnLeft<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Turn Left&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>BACKWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>FORWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> turnRight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Turn Right&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>FORWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>BACKWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> stop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Stop&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> turnAround<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   stop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   moveBackward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   turnLeft<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   stop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">//runAway = true;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> moveBackward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Move Backward&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>BACKWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>BACKWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//  BEACON LOGIC  //</span>
<span style="color: #993333;">void</span> readTransceiverandSetDirection<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  west <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  south <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  east <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  north <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  getDirection<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  setModeOfDirections<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
boolean foundBeacon<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>west <span style="color: #339933;">&lt;</span> notFoundSensitivity and east <span style="color: #339933;">&lt;</span> notFoundSensitivity and south <span style="color: #339933;">&lt;</span> notFoundSensitivity and north <span style="color: #339933;">&lt;</span> notFoundSensitivity<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>     <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>   <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>     <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>   <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span> <span style="color: #993333;">void</span> getDirection<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>   <span style="color: #993333;">int</span> minValue <span style="color: #339933;">=</span> <span style="color: #0000dd;">1200</span><span style="color: #339933;">;</span>   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>minValue <span style="color: #339933;">&gt;</span> west<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    minValue <span style="color: #339933;">=</span> west<span style="color: #339933;">;</span>
    dir <span style="color: #339933;">=</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>minValue <span style="color: #339933;">&gt;</span> south<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    minValue <span style="color: #339933;">=</span> south<span style="color: #339933;">;</span>
    dir <span style="color: #339933;">=</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>minValue <span style="color: #339933;">&gt;</span> east<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    minValue <span style="color: #339933;">=</span> east<span style="color: #339933;">;</span>
    dir <span style="color: #339933;">=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>minValue <span style="color: #339933;">&gt;</span> north<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    minValue <span style="color: #339933;">=</span> north<span style="color: #339933;">;</span>
    dir <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  addDirectionToReadings<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//Serial.print(&quot;W:&quot;);</span>
  <span style="color: #666666; font-style: italic;">//Serial.print(west);</span>
  <span style="color: #666666; font-style: italic;">//Serial.print(&quot; | S:&quot;);</span>
  <span style="color: #666666; font-style: italic;">//Serial.print(south);</span>
  <span style="color: #666666; font-style: italic;">//Serial.print(&quot; | E:&quot;);</span>
  <span style="color: #666666; font-style: italic;">//Serial.print(east);</span>
  <span style="color: #666666; font-style: italic;">//Serial.print(&quot; | N:&quot;);</span>
  <span style="color: #666666; font-style: italic;">//Serial.println(north);</span>
  <span style="color: #666666; font-style: italic;">//Serial.println(&quot;=================================&quot;);</span>
  <span style="color: #666666; font-style: italic;">//if(dir == 1){</span>
  <span style="color: #666666; font-style: italic;">//  Serial.println(&quot;North&quot;);</span>
  <span style="color: #666666; font-style: italic;">//}else if(dir == 2){</span>
  <span style="color: #666666; font-style: italic;">//  Serial.println(&quot;East&quot;);</span>
  <span style="color: #666666; font-style: italic;">//}else if(dir == 3){</span>
  <span style="color: #666666; font-style: italic;">//  Serial.println(&quot;South&quot;);</span>
  <span style="color: #666666; font-style: italic;">//}else if(dir == 4){</span>
  <span style="color: #666666; font-style: italic;">//  Serial.println(&quot;West&quot;);</span>
  <span style="color: #666666; font-style: italic;">//}</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> addDirectionToReadings<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  directionReadings<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> dir<span style="color: #339933;">;</span>
&nbsp;
  index <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>index <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>index <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> NUM_READINGS<span style="color: #009900;">&#41;</span>             <span style="color: #666666; font-style: italic;">// if we're at the end of the array...</span>
    index <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// =========================================</span>
<span style="color: #666666; font-style: italic;">// In order to smooth out the directions readings from the</span>
<span style="color: #666666; font-style: italic;">// IR transceiver, You have to take the mode (most prevalent number in a collection)</span>
<span style="color: #666666; font-style: italic;">// of the directionReadings Array.  This allows the program to determine which</span>
<span style="color: #666666; font-style: italic;">// direction is being read the most from the device.</span>
<span style="color: #666666; font-style: italic;">// Otherwise, the readings make the robot squirrelly.</span>
<span style="color: #666666; font-style: italic;">// ========================================</span>
<span style="color: #993333;">void</span> setModeOfDirections<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #993333;">int</span> currentValue <span style="color: #339933;">=</span> directionReadings<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> counter <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> maxCounter <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> modeValue <span style="color: #339933;">=</span> modeOfDirections<span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> directionCounts<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//{North(1), East(2), South(3), West(4)}</span>
&nbsp;
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> NUM_READINGS<span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>directionReadings<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;|&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #339933;">++</span>directionCounts<span style="color: #009900;">&#91;</span>directionReadings<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//Determine mode of directions from count array</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> modeCount<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>directionCounts<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//This array holds the current maximum count and the direction it points to.</span>
  <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">;</span> <span style="color: #339933;">++</span>i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//Serial.print(directionCounts[i]);</span>
    <span style="color: #666666; font-style: italic;">//Serial.print(&quot;|&quot;);</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>modeCount<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;=</span> directionCounts<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      modeCount<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> i <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// set direction</span>
      modeCount<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> directionCounts<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//set count</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  modeOfDirections <span style="color: #339933;">=</span> modeCount<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Direction Mode: &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span>modeOfDirections<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>There you have it.  Let me know if you have any questions about the code or construction.</p>
<p>- Chris</p>
]]></content:encoded>
			<wfw:commentRss>http://www.robotishappy.com/2009/12/beacon-locating-robot-powered-by-arduino-and-ir-transceiver/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Monitoring message queues with Arduino</title>
		<link>http://www.robotishappy.com/2009/12/monitoring-message-queues-with-arduino/</link>
		<comments>http://www.robotishappy.com/2009/12/monitoring-message-queues-with-arduino/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 14:53:34 +0000</pubDate>
		<dc:creator>Alex Kane</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Message Queue Monitor]]></category>
		<category><![CDATA[ethernet shield]]></category>
		<category><![CDATA[message queue]]></category>

		<guid isPermaLink="false">http://www.robotishappy.com/?p=396</guid>
		<description><![CDATA[
This is a gadget I made to tell me at a glance the size of the various message queues that I manage at TuneCore.  It sits on my desk next to my monitor and tells me right away what's going on with our delivery system.  A steady light means the queue is not very long; [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Finished product by alexkane, on Flickr" href="http://www.flickr.com/photos/alexkane/4089400723/"><img src="http://farm3.static.flickr.com/2670/4089400723_15d7c5dfce.jpg" alt="Finished product" width="500" height="375" /></a><br />
This is a gadget I made to tell me at a glance the size of the various message queues that I manage at <a href="http://tunecore.com">TuneCore</a>.  It sits on my desk next to my monitor and tells me right away what's going on with our delivery system.  A steady light means the queue is not very long; a rapidly blinking light means that the number of items in the queue is very large and it needs attention.</p>
<p>I built it over a weekend using an Arduino microcontroller with an Ethernet shield. It requests the queue sizes from a web server once a minute.</p>
<h2>Parsing an HTTP Response</h2>
<p>Here's an example of an HTTP response that I have to parse in order to get the values I'm looking for:<br />
<code><br />
Buffer: HTTP/1.1 200 OK<br />
Buffer: Date: Tue, 08 Dec 2009 14:15:34 GMT<br />
Buffer: Server: Apache/2.2.3 (CentOS)<br />
Buffer: Last-Modified: Tue, 08 Dec 2009 14:15:02 GMT<br />
Buffer: ETag: "fc117-28-332a2580"<br />
Buffer: Accept-Ranges: bytes<br />
Buffer: Content-Length: 40<br />
Buffer: Connection: close<br />
Buffer: Content-Type: text/plain; charset=UTF-8<br />
Buffer:<br />
Buffer: queue_sizes<br />
Buffer: 0<br />
Buffer: 0<br />
Buffer: 0<br />
Buffer: 0<br />
Buffer: 0<br />
Buffer: 0<br />
Buffer: 0<br />
Buffer: 1<br />
Buffer: 0<br />
Buffer: 0<br />
Buffer: 0<br />
Buffer: 0<br />
Buffer: 0<br />
Buffer: 0<br />
</code><br />
It turns out that there's a lot of libraries for setting the Arduino Ethernet shield up as a server but I couldn't find any that make it easy to parse a response.</p>
<p>There were two major hurdles in the design of the program. One was how to parse the HTTP response. It took some thought (and Googling) but what you have to do is build string buffers as you read the the response one character at a time. Then process the buffer to determine if your looking at the HTTP header or the actual data that you've served.</p>
<p>The other programming problem was getting the lights to blink independently of one another. It was a difficult because the Arduino only does one thing at a time. I was able to accomplish this using the Metronome library, although there is still some blocking going on when the lights blink. I believe the solution will be to remove the delay() statements in the blink code.</p>
<p>This is the first time I've felt that a project is worthy of mounting in a project box. I got all the LEDs, mounts and box from Radio Shack, and bought a Dremel and label maker at Target. The next few hours were spent cursing and carving the plastic and soldering everything together.</p>
<h2>More pictures</h2>
<p><a title="Internet-enabled blinkenlights by alexkane, on Flickr" href="http://www.flickr.com/photos/alexkane/4087846437/"><img src="http://farm3.static.flickr.com/2592/4087846437_7b81639cf5.jpg" alt="Internet-enabled blinkenlights" width="500" height="375" /></a></p>
<p><a title="Internet-enabled blinkenlights by alexkane, on Flickr" href="http://www.flickr.com/photos/alexkane/4088896654/"><img src="http://farm3.static.flickr.com/2579/4088896654_35bca1134f.jpg" alt="Internet-enabled blinkenlights" width="500" height="375" /></a></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="360" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="intl_lang=en-us&amp;photo_secret=e5efca910e&amp;photo_id=4088900744" /><param name="bgcolor" value="#000000" /><param name="allowFullScreen" value="true" /><param name="src" value="http://www.flickr.com/apps/video/stewart.swf?v=71377" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="360" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" allowfullscreen="true" bgcolor="#000000" flashvars="intl_lang=en-us&amp;photo_secret=e5efca910e&amp;photo_id=4088900744"></embed></object></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="360" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="intl_lang=en-us&amp;photo_secret=27b5624290&amp;photo_id=4089534353" /><param name="bgcolor" value="#000000" /><param name="allowFullScreen" value="true" /><param name="src" value="http://www.flickr.com/apps/video/stewart.swf?v=71377" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="360" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" allowfullscreen="true" bgcolor="#000000" flashvars="intl_lang=en-us&amp;photo_secret=27b5624290&amp;photo_id=4089534353"></embed></object></p>
<p><a title="Installed by alexkane, on Flickr" href="http://www.flickr.com/photos/alexkane/4089617273/"><img src="http://farm3.static.flickr.com/2752/4089617273_f9716d21a2.jpg" alt="Installed" width="500" height="375" /></a></p>
<h2>The code</h2>
<p>Here's the code that make this thing tick:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;Metro.h&gt;</span>
<span style="color: #339933;">#include &lt;WString.h&gt;</span>
<span style="color: #339933;">#include &lt;Ethernet.h&gt;</span>
&nbsp;
<span style="color: #339933;">#define MAX_STRING_LEN  20</span>
<span style="color: #339933;">#define BLINK_DELAY 100</span>
<span style="color: #339933;">#define LED_INTERVAL 60000</span>
&nbsp;
<span style="color: #339933;">#define AMAZON_LED 2 // Define the led's pin</span>
<span style="color: #339933;">#define AMAZONOD_LED 3</span>
<span style="color: #339933;">#define NOKIA_LED 4</span>
<span style="color: #339933;">#define ITUNES_LED 5</span>
<span style="color: #339933;">#define LIMEWIRE_LED 6</span>
<span style="color: #339933;">#define RHAPSODY_LED 7</span>
<span style="color: #339933;">#define NAPSTER_LED 8</span>
<span style="color: #339933;">#define LALA_LED 9</span>
&nbsp;
<span style="color: #993333;">int</span> amazon_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> amazonod_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> amiestreet_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> emusic_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> groupietunes_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> itunes_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> lala_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> limewire_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> napster_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> nokia_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> rhapsody_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> shockhound_q<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> streaming_q<span style="color: #339933;">;</span>
&nbsp;
Metro queueCheckMetro <span style="color: #339933;">=</span> Metro<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">10000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Metro amazonMetro <span style="color: #339933;">=</span> Metro<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Metro amazonodMetro <span style="color: #339933;">=</span> Metro<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Metro nokiaMetro <span style="color: #339933;">=</span> Metro<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Metro itunesMetro <span style="color: #339933;">=</span> Metro<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Metro limewireMetro <span style="color: #339933;">=</span> Metro<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Metro rhapsodyMetro <span style="color: #339933;">=</span> Metro<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Metro napsterMetro <span style="color: #339933;">=</span> Metro<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Metro lalaMetro <span style="color: #339933;">=</span> Metro<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> state <span style="color: #339933;">=</span> HIGH<span style="color: #339933;">;</span>
&nbsp;
byte mac<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #208080;">0xDE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xAD</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xBE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xEF</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xFE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xED</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
byte ip<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">192</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">168</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
byte gateway<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">192</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">168</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
byte subnet<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">255</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">255</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">255</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
byte server<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span><span style="color: #0000dd;">0</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Put the server's IP address here</span>
Client client<span style="color: #009900;">&#40;</span>server<span style="color: #339933;">,</span> <span style="color: #0000dd;">80</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> data_index <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
boolean header <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #339933;">;</span>
String buffer <span style="color: #339933;">=</span> String<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> response_writeindex <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
  pinMode<span style="color: #009900;">&#40;</span>AMAZON_LED<span style="color: #339933;">,</span>OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>AMAZON_LED<span style="color: #339933;">,</span>state<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode<span style="color: #009900;">&#40;</span>AMAZONOD_LED<span style="color: #339933;">,</span>OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>AMAZONOD_LED<span style="color: #339933;">,</span>state<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode<span style="color: #009900;">&#40;</span>NOKIA_LED<span style="color: #339933;">,</span>OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>NOKIA_LED<span style="color: #339933;">,</span>state<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode<span style="color: #009900;">&#40;</span>ITUNES_LED<span style="color: #339933;">,</span>OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>ITUNES_LED<span style="color: #339933;">,</span>state<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode<span style="color: #009900;">&#40;</span>LIMEWIRE_LED<span style="color: #339933;">,</span>OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>LIMEWIRE_LED<span style="color: #339933;">,</span>state<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode<span style="color: #009900;">&#40;</span>RHAPSODY_LED<span style="color: #339933;">,</span>OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>RHAPSODY_LED<span style="color: #339933;">,</span>state<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode<span style="color: #009900;">&#40;</span>NAPSTER_LED<span style="color: #339933;">,</span>OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>NAPSTER_LED<span style="color: #339933;">,</span>state<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode<span style="color: #009900;">&#40;</span>LALA_LED<span style="color: #339933;">,</span>OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>LALA_LED<span style="color: #339933;">,</span>state<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  Ethernet.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span>mac<span style="color: #339933;">,</span> ip<span style="color: #339933;">,</span> gateway<span style="color: #339933;">,</span> subnet<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;connecting...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>client.<span style="color: #202020;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;connected&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;GET /queue_size.txt HTTP/1.0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;connection failed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span> 
&nbsp;
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>queueCheckMetro.<span style="color: #202020;">check</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   checkQueues<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
&nbsp;
  blinkLEDS<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> checkQueues<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  queueCheckMetro.<span style="color: #202020;">interval</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">60000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// check the queues once a minute</span>
 <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>client.<span style="color: #202020;">available</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    serialEvent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  calculateBlinkRates<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>client.<span style="color: #202020;">connected</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Disconnected&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    client.<span style="color: #202020;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
     <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>client.<span style="color: #202020;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;GET /queue_size.txt HTTP/1.0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Reconnect failed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> serialEvent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #993333;">char</span> inChar <span style="color: #339933;">=</span> client.<span style="color: #202020;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>inChar <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   buffer.<span style="color: #202020;">append</span><span style="color: #009900;">&#40;</span>inChar<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Buffer: &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>buffer.<span style="color: #202020;">contains</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;queue_sizes&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">// Finished reading HTTP header</span>
      header <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>header <span style="color: #339933;">==</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      parse_data_buffer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      data_index <span style="color: #339933;">=</span> data_index<span style="color: #339933;">++;</span>
    <span style="color: #009900;">&#125;</span>
    buffer <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> parse_data_buffer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Parse the line</span>
  <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>data_index<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">:</span>
            amazon_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">:</span>
            amazonod_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">:</span>
            amiestreet_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">6</span><span style="color: #339933;">:</span>
            emusic_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">7</span><span style="color: #339933;">:</span>
            groupietunes_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">:</span>
            itunes_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">9</span><span style="color: #339933;">:</span>
            lala_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">10</span><span style="color: #339933;">:</span>
            limewire_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">11</span><span style="color: #339933;">:</span>
            napster_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">12</span><span style="color: #339933;">:</span>
            nokia_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">13</span><span style="color: #339933;">:</span>
            rhapsody_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">14</span><span style="color: #339933;">:</span>
            shockhound_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">15</span><span style="color: #339933;">:</span>
            streaming_q <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> calculateBlinkRates<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>amazon_q <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    amazon_q<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>amazonod_q <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    amazonod_q<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>nokia_q <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    nokia_q<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>itunes_q <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    itunes_q<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>limewire_q <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    limewire_q<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>rhapsody_q <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    rhapsody_q<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>napster_q <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    napster_q<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>lala_q <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    lala_q<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #993333;">int</span> amazon_on_for <span style="color: #339933;">=</span> LED_INTERVAL <span style="color: #339933;">/</span> amazon_q<span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> amazonod_on_for <span style="color: #339933;">=</span> LED_INTERVAL <span style="color: #339933;">/</span> amazon_q<span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> nokia_on_for <span style="color: #339933;">=</span> LED_INTERVAL <span style="color: #339933;">/</span> nokia_q<span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> itunes_on_for <span style="color: #339933;">=</span> LED_INTERVAL <span style="color: #339933;">/</span> itunes_q<span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> limewire_on_for <span style="color: #339933;">=</span> LED_INTERVAL <span style="color: #339933;">/</span> limewire_q<span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> rhapsody_on_for <span style="color: #339933;">=</span> LED_INTERVAL <span style="color: #339933;">/</span> rhapsody_q<span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> napster_on_for <span style="color: #339933;">=</span> LED_INTERVAL <span style="color: #339933;">/</span> napster_q<span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> lala_on_for <span style="color: #339933;">=</span> LED_INTERVAL <span style="color: #339933;">/</span> lala_q<span style="color: #339933;">;</span>
  amazonMetro.<span style="color: #202020;">interval</span><span style="color: #009900;">&#40;</span>amazon_on_for<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  amazonodMetro.<span style="color: #202020;">interval</span><span style="color: #009900;">&#40;</span>amazon_on_for<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  nokiaMetro.<span style="color: #202020;">interval</span><span style="color: #009900;">&#40;</span>nokia_on_for<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  itunesMetro.<span style="color: #202020;">interval</span><span style="color: #009900;">&#40;</span>itunes_on_for<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  limewireMetro.<span style="color: #202020;">interval</span><span style="color: #009900;">&#40;</span>limewire_on_for<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rhapsodyMetro.<span style="color: #202020;">interval</span><span style="color: #009900;">&#40;</span>rhapsody_on_for<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  napsterMetro.<span style="color: #202020;">interval</span><span style="color: #009900;">&#40;</span>napster_on_for<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  lalaMetro.<span style="color: #202020;">interval</span><span style="color: #009900;">&#40;</span>lala_on_for<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> blinkLEDS<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>amazonMetro.<span style="color: #202020;">check</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// check if the metro has passed it's interval .</span>
    blinkLED<span style="color: #009900;">&#40;</span>AMAZON_LED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>amazonodMetro.<span style="color: #202020;">check</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// check if the metro has passed it's interval .</span>
    blinkLED<span style="color: #009900;">&#40;</span>AMAZONOD_LED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>nokiaMetro.<span style="color: #202020;">check</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// check if the metro has passed it's interval .</span>
    blinkLED<span style="color: #009900;">&#40;</span>NOKIA_LED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>itunesMetro.<span style="color: #202020;">check</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// check if the metro has passed it's interval .</span>
    blinkLED<span style="color: #009900;">&#40;</span>ITUNES_LED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>limewireMetro.<span style="color: #202020;">check</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// check if the metro has passed it's interval .</span>
    blinkLED<span style="color: #009900;">&#40;</span>LIMEWIRE_LED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>rhapsodyMetro.<span style="color: #202020;">check</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// check if the metro has passed it's interval .</span>
    blinkLED<span style="color: #009900;">&#40;</span>RHAPSODY_LED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>napsterMetro.<span style="color: #202020;">check</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// check if the metro has passed it's interval .</span>
    blinkLED<span style="color: #009900;">&#40;</span>NAPSTER_LED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
 <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>lalaMetro.<span style="color: #202020;">check</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// check if the metro has passed it's interval .</span>
    blinkLED<span style="color: #009900;">&#40;</span>LALA_LED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> delayWithBlink<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> delay<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
 <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;=</span> delay<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  blinkLEDS<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> blinkLED<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> pin<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>pin<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  delay<span style="color: #009900;">&#40;</span>BLINK_DELAY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>pin<span style="color: #339933;">,</span>HIGH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.robotishappy.com/2009/12/monitoring-message-queues-with-arduino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Light-Seeking Robot using the Arduino</title>
		<link>http://www.robotishappy.com/2009/12/light-seeking-robot-using-the-arduino/</link>
		<comments>http://www.robotishappy.com/2009/12/light-seeking-robot-using-the-arduino/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 00:08:21 +0000</pubDate>
		<dc:creator>Christopher Hazlett</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Light-Seeking Robot]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Physical Computing]]></category>

		<guid isPermaLink="false">http://www.integratechange.com/?p=379</guid>
		<description><![CDATA[I've always been interested in physical computing.  Even though I love creating software, I've always felt that creating websites and software doesn't go far enough to satiate my creative desire.  Enter the Arduino, a great open-source micro processor and prototyping board for around $30. This post marks the first, in what I hope will be a long line of tutorials and projects using the Arduino to develop robots and sensor driven applications that I hope to release into the wild.]]></description>
			<content:encoded><![CDATA[<blockquote><p>This is a repost from my (Chris's) old blog www.integratechange.com on May 5, 2009.</p></blockquote>
<p>I've always been interested in <a href="http://en.wikipedia.org/wiki/Physical_computing">physical computing</a>.  Even though I love creating software, I've always felt that creating websites and software doesn't go far enough to satiate my creative desire.  Enter the <a href="http://www.arduino.cc">Arduino</a>, a great open-source micro processor and prototyping board for around $30. This post marks the first, in what I hope will be a long line of tutorials and projects using the Arduino to develop robots and sensor driven applications that I hope to release into the wild.  This post details a light-seeking robot with an Arduino brain, kind of the "Hello World!" application for autonomous robotics.</p>
<h2>The Parts</h2>
<p>I got a number of parts from several different sources.  I had some parts lying around, but I'll also provide links where you too can buy yourself all the light-seeking robot parts your heart desires.</p>
<ul>
<li><a href="http://www.adafruit.com/index.php?main_page=product_info&amp;cPath=17&amp;products_id=50">Arduino (1 @ $30.00 from Adafruit.com)</a> - I actually got the Arduino Starter kit from Adafruit.com which also came with the 9V battery holder you see in the pictures and videos below.</li>
<li><a href="http://www.adafruit.com/index.php?main_page=product_info&amp;cPath=17_21&amp;products_id=81">Arduino Motor Shield (1 @ $19.50 from Adafruit.com)</a> - You don't actually need the motor shield, but it provides a great base for prototyping and I recommend it if you're doing repeated prototyping with motors and servers.</li>
<li><a href="http://www.pololu.com/catalog/product/1060">RP5 Tracked Chassis (1 @ 49.95 from Pololu.com)</a> - I picked this chassis because it has all the necessary parts: geared motor assembly, tracks (who doesn't like tracks), battery pack, etc.  You can make your own chassis, of course, but for those interested, this is a nice one that's virtually plug and play.</li>
<li><a href="http://www.adafruit.com/index.php?main_page=product_info&amp;cPath=35&amp;products_id=161">CDS Photoresistors (2 @ $1.50 from Adafruit.com)</a> - For the eyes. You can get these from anywhere, but if you order from Adafruit.com, you might as well get some of these too.</li>
<li>10 Kohms Resistors (4) - You can get these from anywhere.</li>
<li><a href="http://www.radioshack.com/product/index.jsp?productId=2062539">Momentary Switch - (1 @ $3.95 for a Pack of 4 from Radio Shack)</a> - It's a tiny little push button switch, and you can use any you would like...this is just the one I used.</li>
</ul>
<h2>Prototype I - Proof of Concept</h2>
<p>While I was waiting for my chassis to arrive, I put together an initial prototype to test the circuit and code.  The first prototype was rough, to say the least, and it didn't move, but the code worked.  I used the prototype board you see in the picture (available at Radio Shack) as a base to mount (tape) the motors to.  I put tape on the axles to see if the code was actually making the motors turn the right way.  It was.</p>
<p><img src="http://www.integratechange.com/wp-content/uploads/2009/05/prototype-i.jpg" alt="Initial Prototype and Code Testing Platform" /></p>
<p>And here's a video, showing it work in all it's glory.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" 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://www.youtube.com/v/5if-FJXeK6M&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/5if-FJXeK6M&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>As it says in the video, I initially gave the robot seeking and avoiding behavior (you can see it in the code below in the function foundSource()), but I realized that there are times when the robot will never find it's source (especially if that source is the sun) and that it was needless behavior.  I left the runAway variable in the code through so you could easily turn the robot into a photophobe.  You could also mount a switch on the robot that changes the behavior from photovore to photophobe as well.</p>
<h2>Prototype II</h2>
<p>Once I got the chassis from Pololu, I put together a better prototype, one that moves and turns around when it runs into something...you know, typical robot behavior.  In the following pictures, you can see the very crude method of assembly, but it works...and that was really the point.<br />
<img src="http://www.integratechange.com/wp-content/uploads/2009/05/img_0003.jpg" alt="Prototype II on the Chassis" /><br />
I literally moved the prototype board in the first picture above to the top of the chassis and hooked up the motors to the motor shield.  I added a small switch for the motor power so I could stop screwing and unscrewing the motor's power supply.  Everything is just taped down.  This is, again, more of a proof of concept than a finished robot.  I plan on making a custom motor driver for the chassis and better mount for the Arduino and other sensors.</p>
<p><img src="http://www.integratechange.com/wp-content/uploads/2009/05/img_0004.jpg" alt="Back-up sensor under the plow" /><br />
To give the push button more surface area, I added a plow to the front, with an "ultra-strong" electrical tape hinge.  Obviously, when the robot runs into something, it pushes the button and the turnAround() function executes.</p>
<p><img src="http://www.integratechange.com/wp-content/uploads/2009/05/img_0012.jpg" alt="Inside of the tracked chassis" /><br />
There's not a lot of room in the chassis, but you could replace the AA battery pack with a 9V to give you some more space.  But there are mounting holes on the corners which is probably a preferable location for your robot's brains.</p>
<p>Here it is in action:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" 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://www.youtube.com/v/4PIAs0rxOsA&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/4PIAs0rxOsA&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>The Circuit</h2>
<p>The circuit is fairly simple, especially because I'm using the Motor Shield.  This circuit diagram illustrates the sensor circuitry and status led you see on the white bread board above.  The motors are attached to the M1 and M2 points on the motor shield (positive leads toward the inside of the board).  I used OmniGraffle to draw up the circuit, but I'm still looking for better templates so my circuits are prettier, more accurate, etc, but this drawing should illustrate the connections just fine.</p>
<p><img src="http://www.integratechange.com/wp-content/uploads/2009/05/light-seeking-robot.jpg" alt="Light Seeking Robot" width="613" height="491" /></p>
<h2>The Code</h2>
<p>You program the Arduino in Wiring, which is basically a library in C++.  Forgive me any trespasses below.  C++ is not a language I've worked in a lot, and the code below could most likely use some optimization.  I originally had many delays written into the loop because that's what I saw a lot of other code doing.  That resulted in erratic behavior and a lot of running into stuff even though the object's shadow should have caused the robot to avoid it.  When I removed the delay and averaged the light sensor readings, I got a very responsive robot.  I've also left a lot of code in the source because I'm working on building a robot base that I can use over and over again as I install more sensors and create more interesting behavior.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;AFMotor.h&gt;</span>
<span style="color: #339933;">#define NUMREADINGS 5</span>
<span style="color: #339933;">#define LEFTSENSOR 3</span>
<span style="color: #339933;">#define RIGHTSENSOR 5</span>
<span style="color: #339933;">#define BUMPSENSOR 2</span>
<span style="color: #339933;">#define TOPSPEED 200</span>
&nbsp;
<span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> valLefat<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> valRight<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> valCenter<span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> oldLeft <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> oldRight <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> sensitivity <span style="color: #339933;">=</span> <span style="color: #0000dd;">40</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> threshold <span style="color: #339933;">=</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> topThreshold <span style="color: #339933;">=</span> <span style="color: #0000dd;">650</span><span style="color: #339933;">;</span>
boolean runAway <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> leftReadings<span style="color: #009900;">&#91;</span>NUMREADINGS<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> rightReadings<span style="color: #009900;">&#91;</span>NUMREADINGS<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> index <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                            <span style="color: #666666; font-style: italic;">// the index of the current reading</span>
<span style="color: #993333;">int</span> leftTotal <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                            <span style="color: #666666; font-style: italic;">// the running total</span>
<span style="color: #993333;">int</span> leftAverage <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                          <span style="color: #666666; font-style: italic;">// the average</span>
<span style="color: #993333;">int</span> rightTotal <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                            <span style="color: #666666; font-style: italic;">// the running total</span>
<span style="color: #993333;">int</span> rightAverage <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                          <span style="color: #666666; font-style: italic;">// the average</span>
&nbsp;
AF_DCMotor rightMotor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #339933;">,</span> MOTOR12_8KHZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// create motor #2, 64KHz pwm</span>
AF_DCMotor leftMotor<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> MOTOR12_8KHZ<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// create motor #1, 64KHz pwm</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span>TOPSPEED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span>TOPSPEED<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pinMode<span style="color: #009900;">&#40;</span>BUMPSENSOR<span style="color: #339933;">,</span> INPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  moveForward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> NUMREADINGS<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    leftReadings<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                      <span style="color: #666666; font-style: italic;">// initialize all the readings to 0</span>
    rightReadings<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  checkForBump<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  averageReadings<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  checkLightandMove<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> checkLightandMove<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>valLeft <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> threshold <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> valRight <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> threshold<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>valLeft <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> valRight<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>valLeft <span style="color: #339933;">-</span> valRight <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> sensitivity<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>runAway <span style="color: #339933;">==</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        turnRight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
        turnLeft<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>valLeft <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> valRight<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>valRight <span style="color: #339933;">-</span> valLeft <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> sensitivity<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>runAway <span style="color: #339933;">==</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        turnLeft<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
        turnRight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
        moveForward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #009900;">&#125;</span><span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//turnAround();</span>
    stop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>valLeft <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> topThreshold <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> valRight <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> topThreshold<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    runAway <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #666666; font-style: italic;">//delay(500);</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> checkForBump<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #993333;">int</span> bumped <span style="color: #339933;">=</span> digitalRead<span style="color: #009900;">&#40;</span>BUMPSENSOR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</span>BUMPSENSOR<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>bumped <span style="color: #339933;">==</span> HIGH<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    turnAround<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
boolean foundSource<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">return</span> oldLeft <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> valLeft <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> oldRight <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;</span> valRight<span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">//the robot has reached the source of the light, or the point of maximum brightness</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> moveForward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Move Forward&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>FORWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>FORWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> speedUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">==</span>TOPSPEED<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    rightMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    leftMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> slowToStop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span>TOPSPEED<span style="color: #339933;">;</span> i<span style="color: #339933;">==</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">--</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    rightMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    leftMotor.<span style="color: #202020;">setSpeed</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> turnLeft<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Turn Left&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>BACKWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>FORWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> turnRight<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Turn Right&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>FORWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>BACKWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> stop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Stop&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> turnAround<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   slowToStop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   moveBackward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   turnLeft<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   stop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #666666; font-style: italic;">//runAway = true;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> moveBackward<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Move Backward&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>RELEASE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  rightMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>BACKWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  leftMotor.<span style="color: #202020;">run</span><span style="color: #009900;">&#40;</span>BACKWARD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> averageReadings<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  leftTotal <span style="color: #339933;">-=</span> leftReadings<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>               <span style="color: #666666; font-style: italic;">// subtract the last reading</span>
  leftReadings<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span>LEFTSENSOR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// read from the sensor</span>
  leftTotal <span style="color: #339933;">+=</span> leftReadings<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>               <span style="color: #666666; font-style: italic;">// add the reading to the total</span>
&nbsp;
  rightTotal <span style="color: #339933;">-=</span> rightReadings<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>               <span style="color: #666666; font-style: italic;">// subtract the last reading</span>
  rightReadings<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> analogRead<span style="color: #009900;">&#40;</span>RIGHTSENSOR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// read from the sensor</span>
  rightTotal <span style="color: #339933;">+=</span> rightReadings<span style="color: #009900;">&#91;</span>index<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>               <span style="color: #666666; font-style: italic;">// add the reading to the total</span>
&nbsp;
  index <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>index <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                    <span style="color: #666666; font-style: italic;">// advance to the next index</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>index <span style="color: #339933;">&amp;</span>gt<span style="color: #339933;">;=</span> NUMREADINGS<span style="color: #009900;">&#41;</span>               <span style="color: #666666; font-style: italic;">// if we're at the end of the array...</span>
    index <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                            <span style="color: #666666; font-style: italic;">// ...wrap around to the beginning</span>
&nbsp;
  valLeft <span style="color: #339933;">=</span> leftTotal <span style="color: #339933;">/</span> NUMREADINGS<span style="color: #339933;">;</span>
  valRight <span style="color: #339933;">=</span> rightTotal <span style="color: #339933;">/</span> NUMREADINGS<span style="color: #339933;">;</span>
&nbsp;
  Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>valLeft<span style="color: #339933;">,</span> DEC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// prints the left sensor value</span>
  Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; | &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span>valRight<span style="color: #339933;">,</span> DEC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// prints the right sensor value</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.robotishappy.com/2009/12/light-seeking-robot-using-the-arduino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

