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

<channel>
	<title>codetorment &#187; shield</title>
	<atom:link href="http://www.codetorment.com/tag/shield/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.codetorment.com</link>
	<description>code, tech, random stuff</description>
	<lastBuildDate>Tue, 07 Sep 2010 08:47:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Arduino Pong using S65 Shield</title>
		<link>http://www.codetorment.com/2009/11/11/arduino-pong-using-s65-shield/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=arduino-pong-using-s65-shield</link>
		<comments>http://www.codetorment.com/2009/11/11/arduino-pong-using-s65-shield/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 21:03:01 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[pong]]></category>
		<category><![CDATA[s65]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[shield]]></category>

		<guid isPermaLink="false">http://www.codetorment.com/?p=695</guid>
		<description><![CDATA[Since today was a holiday (here in Belgium) I had a few moments to spare so I wrote a quick and dirty version of pong for the arduino using the S65 shield. Check the video after the break&#8230; EDIT: Added sound using a buzzer EDIT: Didn&#8217;t get time to rewrite some things, just added some [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codetorment.com/wp-content/uploads/pong_moving.JPG"><img class="size-full wp-image-696  alignnone" title="pong_moving" src="http://www.codetorment.com/wp-content/uploads/pong_moving.JPG" alt=" Arduino Pong using S65 Shield" width="430" height="323" /></a></p>
<p>Since today was a holiday (here in Belgium) I had a few moments to spare so I wrote a quick and dirty version of pong for the arduino using the S65 shield.</p>
<p>Check the video after the break&#8230;<span id="more-695"></span></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7558097&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=7558097&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>EDIT: Added sound using a buzzer</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7596054&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=7596054&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<p>EDIT: Didn&#8217;t get time to rewrite some things, just added some comments</p>
<pre class="brush: cpp; title: ; notranslate">

#include &lt;S65Display.h&gt;
#include &lt;RotaryEncoder.h&gt;
#include &lt;string.h&gt;

#define WIDTH 176
#define HEIGHT 132
#define BAT_WIDTH 5
#define BAT_HEIGHT 30
#define BAT_INIT_X 5
#define BAT_INIT_Y 56
#define BALL 5
#define BAT_STEP 5
#define AI_STEP 2
#define MAX_TURNS 5

float ball_x = WIDTH / 2;
float ball_x_prev = ball_x;
float ball_y = HEIGHT / 2;
float ball_y_prev = ball_y;
float ball_dir = 0;
float bat_1_dir = 0;
int bat1_x = BAT_INIT_X;
int bat1_y = BAT_INIT_Y;
int bat1_y_prev = bat1_y;
int bat2_x = WIDTH - BAT_INIT_X - BAT_WIDTH;
int bat2_y = BAT_INIT_Y;
int bat2_y_prev = bat2_y;
int bat2_step = AI_STEP;
int p1_score = 0;
int p2_score = 0;
int ball_angle = 0;          // angle between ball path and horizontal axis
int ball_angle_sign = 0;   // sign of ball_angle : up = +1, down = -1, horizontal = 0
boolean score = false;
boolean gameover = false;
char buffer[256];           // string buffer

S65Display lcd;
RotaryEncoder encoder;

// Encoder must be serviced regularly.
ISR(TIMER2_OVF_vect)
{
  TCNT2 -= 250;        //1000 Hz
  encoder.service();
}

void setup()
{
  lcd.init(2);
  encoder.init();
  // More encoder stuff
  //init Timer2
  TCCR2B  = (1&amp;lt;&amp;lt;CS22);           //clk=F_CPU/64
  TCNT2   = 0x00;
  TIMSK2 |= (1&amp;lt;&amp;lt;TOIE2);         //enable overflow interupt
  score = false;
  gameover = false;
  lcd.clear(0);
  initTurn();
  startGame();
}

void loop(){

  while(!score &amp;amp;&amp;amp; !gameover){
    checkControls();
    updateAI();
    updateFields();
    drawScreen();
    delay(10);
  }

  if(checkPress() &amp;amp;&amp;amp; !gameover){	// if a player scored wait for rotary press
    initTurn();
  }
  delay(10);
}

// initialize fields for the beginning of game/round
void initTurn(void){
  lcd.clear(0);
  ball_x = WIDTH / 2;
  ball_x_prev = ball_x;
  ball_y = HEIGHT / 2;
  ball_y_prev = ball_y;
  ball_dir = 0;
  bat1_x = BAT_INIT_X;
  bat1_y = BAT_INIT_Y;
  bat1_y_prev = bat1_y;
  bat2_x = WIDTH - BAT_INIT_X - BAT_WIDTH;
  bat2_y = BAT_INIT_Y;
  bat2_y_prev = bat2_y;
  ball_angle = 0;           // angle between ball path and horizontal axis
  ball_angle_sign = 0;    // up = +1, down = -1, horizontal = 0
  score = false;
  ball_dir = 1;
  ball_angle = 45;
}

// start the game and wait for press on rotary encoder
void startGame(void){
  lcd.drawText(35, 60, &quot;Click to start&quot;, RGB(255,255,255), RGB(0,0,0));
  while(!checkPress()){
    delay(10);
  };
  lcd.clear(0);
}

// checks if rotary encoder was pressed
boolean checkPress(void){
  int8_t press;
  press = encoder.sw();
  if (SW_PRESSED == press || SW_PRESSEDLONG == press) {
    return true;
  }
  else{
    return false;
  }
}

void checkRotation(void){
  moveBat(encoder.step());
}

void checkControls(void){
  if(checkPress()){    // pause
    lcd.drawText(45, 60, &quot;Game paused&quot;, RGB(255,255,255), RGB(0,0,0));
    while(!checkPress()){ // wait until pressed
    }
    lcd.clear(0);
  }
  checkRotation();
}

void moveBat(int rot){
  if(!score &amp;amp;&amp;amp; !gameover){
    if(rot == 1){                                  // clockwise rotation, move bat up
	if(bat1_y - BAT_STEP &amp;gt;= 0){   // only move up when there is enough space left
	  bat1_y -= BAT_STEP;
	}
    }
    else if(rot == -1){                         // anti-clockwise rotation, move bat down
        // only move down when there is enough space left
	if((bat1_y + BAT_HEIGHT + BAT_STEP) &amp;lt; HEIGHT){
	  bat1_y += BAT_STEP;
	}
    }
  }
}

void updateFields(void){
 // top or bottom of screen reached, bounce ball back
  if(ball_y &amp;lt;= 0 || ball_y + BALL &amp;gt;= HEIGHT){
    if(ball_angle_sign == -1){ // ball was going down
	ball_angle_sign = 1;    // ball is now going up
    }
    else{                            // ball was going up
	ball_angle_sign = -1;   // ball is now going down
    }
  }
  // check if ball has is in reach of bat1 (horizontal), for some reason checking for equality doens't seem to work here ?
  if((ball_x &amp;lt;= 12 &amp;amp;&amp;amp; ball_x &amp;gt;= 11) &amp;amp;&amp;amp; (ball_dir == 1)){
    // ball is in reach of bat1(vertical)
    if((ball_y + BALL) &amp;gt;= bat1_y &amp;amp;&amp;amp; ball_y &amp;lt;= (bat1_y + BAT_HEIGHT)){
	ball_dir = 0;     // ball hits bat1, change direction
    }
  }
   // check if ball has is in reach of bat2 (horizontal)
  if((ball_x &amp;gt;= 160 &amp;amp;&amp;amp; ball_x &amp;lt;= 162) &amp;amp;&amp;amp; (ball_dir == 0)){
     // ball is in reach of bat2 (vertical)
    if((ball_y + BALL) &amp;gt;= bat2_y &amp;amp;&amp;amp; ball_y &amp;lt;= (bat2_y + BAT_HEIGHT)){
	ball_dir = 1;	      // ball hits bat2, change direction
    }
  }

  if( ball_x &amp;gt; 0 &amp;amp;&amp;amp; ball_x + BALL &amp;lt; WIDTH){           // ball is not near left or right edge
    if(ball_dir == 0){								// ball is moving to the right
	ball_x += cos(ball_angle);						// cosine is always positive in 1st and 4th quadrant
	if(ball_angle_sign == -1){						// check sign of angle
	  ball_y  -= sin(ball_angle);						// negative if angle in 4th quadrant
	}
	else{
	  ball_y  += sin(ball_angle);						// positive if angle in 1th quadrant
	}
    }
    else{									        // ball is moving to the left
	ball_x -= cos(ball_angle);						// cosine is always negative in 2nd and 3rd quadrant
	if(ball_angle_sign == -1){
	  ball_y  -= sin(ball_angle);						// sine is always negative in 3rd quadrant
	}
	else{
	  ball_y  += sin(ball_angle);						// sine is always positive in 2nd quadrant
	}
    }

  }
  else{										// ball hits left or right edge
    if(!score &amp;amp;&amp;amp; !gameover){
	if(ball_dir == 0){							        // ball was going to the right
	  if(p1_score++ &amp;lt; MAX_TURNS){
	    p1_score++;								// player 1 scores
	  }
	  else{
	    gameover = true;
	  }
	}
	else{									        // ball was going to the left
	  if(p2_score &amp;lt; MAX_TURNS){
	    p2_score++;								// player 2 scores
	  }
	  else{
	    gameover = true;
	  }
	}
	score = true;
    }
  }
}

void updateAI(void){
  // bat2 follows vertical position of ball, TODO : implement difficulty levels
  if(ball_y &amp;gt; (bat2_y + (BAT_HEIGHT / 2))){
    // TODO : make function moveBat() that does the bound checking
    if((bat2_y + BAT_HEIGHT + bat2_step) &amp;lt; HEIGHT){
	bat2_y += bat2_step;
    }

  }
  else{
    if((bat2_y - bat2_step) &amp;gt;= 0){
	bat2_y -= bat2_step;
    }
  }
}

void drawScreen(void){
  // draw ball
  lcd.drawRect( ball_x_prev, ball_y_prev, ball_x_prev + BALL, ball_y_prev + BALL, RGB(0,0,0));
  lcd.drawRect( ball_x, ball_y, ball_x + BALL, ball_y + BALL, RGB(255,255,255));
  ball_x_prev = ball_x;
  ball_y_prev = ball_y;
  // draw left bat
  lcd.drawRect( bat1_x, bat1_y_prev, bat1_x + BAT_WIDTH, bat1_y_prev + BAT_HEIGHT, RGB(0,0,0));
  lcd.drawRect( bat1_x, bat1_y, bat1_x + BAT_WIDTH, bat1_y + BAT_HEIGHT, RGB(255,255,255));
  bat1_y_prev = bat1_y;
  // draw right bat
  lcd.drawRect( bat2_x, bat2_y_prev, bat2_x + BAT_WIDTH, bat2_y_prev + BAT_HEIGHT, RGB(0,0,0));
  lcd.drawRect( bat2_x, bat2_y, bat2_x + BAT_WIDTH, bat2_y + BAT_HEIGHT, RGB(255,255,255));
  bat2_y_prev = bat2_y;
  drawScore();
}

void drawScore(void){
  sprintf(buffer, &quot;%d - %d&quot;, p1_score, p2_score);
  lcd.drawText(72, 5, buffer, RGB(255,255,255), RGB(0,0,0));
}
</pre>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.codetorment.com%2F2009%2F11%2F11%2Farduino-pong-using-s65-shield%2F&amp;title=Arduino%20Pong%20using%20S65%20Shield" id="wpa2a_2"><img src="http://www.codetorment.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="share save 171 16 Arduino Pong using S65 Shield"  title="Arduino Pong using S65 Shield" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.codetorment.com/2009/11/11/arduino-pong-using-s65-shield/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Arduino wireless motion detector : part 3</title>
		<link>http://www.codetorment.com/2009/11/07/arduino-wireless-motion-detector-part-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=arduino-wireless-motion-detector-part-3</link>
		<comments>http://www.codetorment.com/2009/11/07/arduino-wireless-motion-detector-part-3/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 16:43:24 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[ethernet]]></category>
		<category><![CDATA[motion]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rf-transmitter]]></category>
		<category><![CDATA[shield]]></category>
		<category><![CDATA[wireless]]></category>

		<guid isPermaLink="false">http://www.codetorment.com/?p=394</guid>
		<description><![CDATA[In this third and final part I&#8217;ll show you how to get the arduino to access a website using an ethernet shield and php. The data can then be displayed in a number of ways. Here the data is simply printed one line at a time. Each time motion is detected, the networked arduino connects [...]]]></description>
			<content:encoded><![CDATA[<p><strong>In this third and final part I&#8217;ll show you how to get the arduino to access a website using an ethernet shield and php. The data can then be displayed in a number of ways. Here the data is simply printed one line at a time.</strong></p>
<p>Each time motion is detected, the networked arduino connects to the web and executes a php script which writes the time and date of the event to a text file. When you want to check if motion was detected, acces a different php script which displays all (if any) recorded events.</p>
<p>Check my next post to see how to send sensor data from the arduino to a website using php.</p>
<p>If you followed<a title="part 1" href="http://www.codetorment.com/2009/10/25/arduino-wireless-motion-detector/" target="_blank"> part 1</a> and <a title="part 2" href="http://www.codetorment.com/2009/10/25/arduino-wireless-motion-detector-part-2/" target="_blank">part 2</a> all you need to do for part 3 is change the code of the receiving arduino since we&#8217;re only changing the output from &#8216;blink a led&#8217; to &#8216;access a website&#8217;.<span id="more-394"></span></p>
<p>Sketch :</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;Ethernet.h&gt;

int ledPin = 13;    // pin for the LED
int RFinPin = 8;    // pin for the RF receiver
int val = 0;         // variable for reading the pin status
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };    // unique mac address
byte ip[] = { 192, 168, 1, 36};        // unique and valid ip for your network
byte server[] = { 77, 222, 78, 32};  // ip google

void setup() {
   Ethernet.begin(mac, ip);
   pinMode(ledPin, OUTPUT);    // declare LED as output
   pinMode(RFinPin, INPUT);    // declare RF receiver as input
   Serial.begin(9600);
   delay(1000);
}

Client client(server, 80);

void loop(){
   val = digitalRead(RFinPin);        // read input value
   if (val == HIGH) {
     digitalWrite(ledPin, HIGH);      // turn LED ON
     if (client.connect()) {
       Serial.println(&quot;connected&quot;);
       client.println( &quot;GET /folder/movement.php HTTP/1.1&quot;);
       client.println(&quot;Host: yourdomain.com&quot;);
       client.println(&quot;Connection: close&quot;);
       client.println();
       client.stop();
     } else {
       Serial.println(&quot;connection failed&quot;);
     }
   } else {
     digitalWrite(ledPin, LOW);       // turn LED OFF
   }
   delay(5000);
}
</pre>
<p>The script movement.php is executed when the arduino connects to <em>www.yourdomain.com/folder/movement.php</em></p>
<p>movement.php code :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

$myFile = &quot;movement_data.txt&quot;;
$fh = fopen($myFile, 'a') or die(&quot;can't open file&quot;);
$stringData = date(&quot;D, d M Y H:i:s&quot;) . &quot;\n&quot;;
fwrite($fh, $stringData);

fclose($fh);

?&gt;</pre>
<p>The script display_movement.php takes the movement data and prints one line for every event recorded.</p>
<p>display_movement.php code:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

 $fileName = &quot;movement_data.txt&quot;;

 if(file_exists($fileName)){
      $file = fopen($fileName,'r');

      while(!feof($file)){
                $name = fgets($file);
                if($name != NULL){
                echo('&lt;br&gt;'. &quot;Movement registered on : &quot;.$name.'&lt;/br&gt;');
			}
        }

        fclose($file);
}
?&gt;
</pre>
<p>When display_movement.php is executed you should see something like :</p>
<p><a href="http://www.codetorment.com/wp-content/uploads/movement.png"><img class="alignnone size-full wp-image-621" title="movement" src="http://www.codetorment.com/wp-content/uploads/movement.png" alt="movement Arduino wireless motion detector : part 3" width="380" height="128" /></a></p>
<p>In the next post I&#8217;ll discuss how to write sensor data (light intensity, temperature,&#8230;) to a website and plot a line chart using php.</p>
<p><a title="Home" href="http://www.codetorment.com/" target="_self">Back to homepage</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.codetorment.com%2F2009%2F11%2F07%2Farduino-wireless-motion-detector-part-3%2F&amp;title=Arduino%20wireless%20motion%20detector%20%3A%20part%203" id="wpa2a_4"><img src="http://www.codetorment.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="share save 171 16 Arduino wireless motion detector : part 3"  title="Arduino wireless motion detector : part 3" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.codetorment.com/2009/11/07/arduino-wireless-motion-detector-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino Goodness : Watterott S65-Shield 172&#215;136 pixels 16-bit color display</title>
		<link>http://www.codetorment.com/2009/11/03/arduino-goodness-watterott-s65-shield-16-bit-color-display-with-172x136-pixels/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=arduino-goodness-watterott-s65-shield-16-bit-color-display-with-172x136-pixels</link>
		<comments>http://www.codetorment.com/2009/11/03/arduino-goodness-watterott-s65-shield-16-bit-color-display-with-172x136-pixels/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 22:51:55 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Electronics]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[display]]></category>
		<category><![CDATA[game of life]]></category>
		<category><![CDATA[s65]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[sdcard]]></category>
		<category><![CDATA[shield]]></category>

		<guid isPermaLink="false">http://www.codetorment.com/?p=554</guid>
		<description><![CDATA[Santa came early this year and brought me a S65-Shield revision 1.2 from watterott It consists of : - a Siemens S65 16-bit color screen with 172&#215;136 pixels - a rotary switch (left-right-press) - a micro-SD slot (bottom) You can visit the project page to check progress made to the libraries and hardware.The most recent [...]]]></description>
			<content:encoded><![CDATA[<p>Santa came early this year and brought me a S65-Shield revision 1.2 from <a title="Watterott.com" href="https://www.watterott.com/S65-Shield-fuer-Arduino-Duemilanove-Diecimila_1" target="_blank">watterott</a></p>
<div id="attachment_591" class="wp-caption alignnone" style="width: 458px"><a href="http://www.codetorment.com/wp-content/uploads/DSCN9584.JPG"><img class="size-full wp-image-591   " title="Arduino Goodness" src="http://www.codetorment.com/wp-content/uploads/DSCN9584.JPG" alt=" Arduino Goodness : Watterott S65 Shield 172x136 pixels 16 bit color display" width="448" height="336" /></a><p class="wp-caption-text">S65 displaying random text</p></div>
<p>It consists of :</p>
<p>- a Siemens S65 16-bit color screen with 172&#215;136 pixels</p>
<p>- a rotary switch (left-right-press)</p>
<p>- a micro-SD slot (bottom)<span id="more-554"></span></p>
<div id="attachment_558" class="wp-caption alignnone" style="width: 458px"><a href="http://www.codetorment.com/wp-content/uploads/sd65_bottom.JPG"><img class="size-full wp-image-558 " title="sd65_bottom" src="http://www.codetorment.com/wp-content/uploads/sd65_bottom.JPG" alt=" Arduino Goodness : Watterott S65 Shield 172x136 pixels 16 bit color display" width="448" height="337" /></a><p class="wp-caption-text">S65 bottom</p></div>
<p>You can visit the <a title="S65 Project Page" href="http://www.watterott.net/projects/s65-shield?" target="_blank">project page</a> to check progress made to the libraries and hardware.The most recent library is <a title="S65 v0.08 library download" href="http://www.watterott.net/arduino/s65-shield_v008.zip" target="_blank">v0.08</a> . It&#8217;s actually more like 3 libraries:  &#8216;S65Display&#8217;, &#8216;RotaryEncoder&#8217; and &#8216;SDCard&#8217;.</p>
<p>You can check the <a title="S65 Library Documentation" href="http://www.codetorment.com/wp-content/uploads/S65_Libraries_Docu.htm" target="_blank">documentation</a> that comes with the libraries to view this <span style="text-decoration: line-through;">baby</span> shields&#8217; possibilities. So far this shield seems to be a bargain (compaired to other display-shields out there) selling at only €35 that&#8217;s equal to $51.36600 or 4640.5276 Japanese  Yen or 149.793533 Polish Zloty or your virginity if you&#8217;re misfortuned enough to live in one of those countries, anyhow.</p>
<p>It has some pretty long headers which make it easy to mount on top of the tallest board you own.</p>
<div id="attachment_559" class="wp-caption alignnone" style="width: 458px"><a href="http://www.codetorment.com/wp-content/uploads/sd65_side.JPG"><img class="size-full wp-image-559  " title="sd65_side" src="http://www.codetorment.com/wp-content/uploads/sd65_side.JPG" alt=" Arduino Goodness : Watterott S65 Shield 172x136 pixels 16 bit color display" width="448" height="335" /></a><p class="wp-caption-text">S65 mating with Duemilanove</p></div>
<p>I don&#8217;t have a microSD card at hand so I can&#8217;t test the SDCard library for now. Which sucks since you can load images stored on the microSD and display them on the screen. You can also use the images for buttons, icons, etc in your sketches&#8230; how cool is that?</p>
<p>Here&#8217;s an example of the awsome S65-Shield in action on an Arduino Duemilanove with 328 Atmel running a Game of Life sketch. I am not the author of this code, he gave me the code for testing and learning purposes. I just added the rotary delay. <span style="text-decoration: line-through;">Maybe he&#8217;ll give his consent later so I can post the code online.</span> Foo Joku gave his consent, the code is posted after the video.</p>
<p>The display and colors look much better in real life, this video was shot with an old digital camera in bad light conditions.</p>
<p><object style="width: 480px; height: 360px;" 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="src" value="http://vimeo.com/moogaloop.swf?clip_id=7421217&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" /><embed style="width: 480px; height: 360px;" type="application/x-shockwave-flash" width="480" height="360" src="http://vimeo.com/moogaloop.swf?clip_id=7421217&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1"></embed></object></p>
<pre>GOL code:
<pre class="brush: cpp; title: ; notranslate">
#include &lt;S65Display.h&gt;
#include &lt;RotaryEncoder.h&gt;

#define GRID_X 28
#define GRID_Y 20

#define GRID_X_OFFSET 4
#define GRID_Y_OFFSET 6

#define COLOUR_SWITCH_INTERVAL 30

#define MAX_GENERATIONS 250

S65Display lcd;
RotaryEncoder encoder;

uint8_t grid[2][GRID_X][GRID_Y];
uint8_t current_grid = 0;

uint8_t generations = 0;
uint8_t r = 255,g = 0, b = 0;

// Encoder must be serviced regularly.
ISR(TIMER2_OVF_vect)
{
 TCNT2 -= 250; //1000 Hz
 encoder.service();
}

void setup()
{
 lcd.init(4);
 encoder.init();
 // More encoder stuff
 //init Timer2
 TCCR2B  = (1&lt;&lt;CS22); //clk=F_CPU/64
 TCNT2   = 0x00;
 TIMSK2 |= (1&lt;&lt;TOIE2); //enable overflow interupt

 sei();
 initGrid();
 lcd.clear(0);
 drawGrid();
}

void loop()
{
 //delay(50);
 checkEncoder();
 runGrid();
 drawGrid();
 generations++;
 if (generations &gt; MAX_GENERATIONS || cmpGrid()) {
 generations = 0;
 initGrid();
 }
 cycleColour();
 cycleColour();
 cycleColour();
}

int cmpGrid()
{
 int i, j;
 for (i=0; i &lt; GRID_Y; i++) {
 for (j=0; j &lt; GRID_X; j++) {
 if (grid[0][i][j] != grid[1][i][j]) { return 0; }
 }
 }
 return 1;
}

void initGrid()
{
 int i, j;
 int t;
 lcd.clear(0);
 current_grid = 0;
 for (i = 0; i &lt; GRID_X; i++) {
 for (j = 0; j &lt; GRID_Y; j++) {

 if ((uint8_t)random(255) % 3 == 0) {
 grid[0][i][j] = 1;
 } else {
 grid[0][i][j] = 0;
 }
 }
 }
}

void runGrid()
{
 uint8_t x, y;
 int count;
 char string[2] = {0,0};
 uint8_t value = 0;
 uint8_t new_grid;

 new_grid = 1 - current_grid;
 for (y = 0; y &lt; GRID_Y; y++) {
 for (x = 0; x &lt; GRID_X; x++) {
 count = count_neighbours(x, y);
 string[0] = count+48;
 if (count &lt; 2 || count &gt; 3) { value = 0; }
 else if (count == 3) { value = 3; }
 else { value = grid[current_grid][x][y]; }
 grid[new_grid][x][y] = value;
 }
 }
 current_grid = new_grid;
}

int count_neighbours(int x, int y)
{
 int i, j;
 int sx;
 int result = 0;

 x--;
 y--;
 for (i = 0; i &lt; 3; i++) {
 if (y &lt; 0 || y &gt; (GRID_Y - 1)) { continue; }
 for (j = 0; j &lt; 3; j++) {
 if (x &lt; 0 || x &gt; (GRID_X - 1)) { continue; }
 if (i==1 &amp;&amp; j == 1) { x++; continue; } // skip centre
 if (grid[current_grid][x][y]) { result++; }
 x++;
 }
 y++;
 x -= 3;
 }
 return result;
}

void drawGrid()
{
 uint8_t  x,  y;
 uint8_t cx, cy;
 uint8_t grid_next_colour = 0;
 cx = GRID_X_OFFSET;
 cy = GRID_Y_OFFSET;
 for (y = 0; y &lt; GRID_Y; y++) {
 cx = GRID_X_OFFSET;
 for (x = 0; x &lt; GRID_X; x++) {
 if (grid[1-current_grid][x][y] != grid[current_grid][x][y]) {
 if(grid[current_grid][x][y]) {
 lcd.drawRect(cx+1, cy+1, cx+5, cy+5, RGB(r,g,b));
 } else {
 lcd.drawRect(cx, cy, cx+6, cy+6, 0);
 }
 }
 cx += 6;
 }
 cy += 6;
 }
}

inline void cycleColour()
{
 if (!b &amp;&amp; r)  { r-=5; g+=5; }
 else if (g) { g-=5; b+=5; }
 else if (b) { b-=5; r+=5; }
}

void checkEncoder(void)
{
 int8_t press;
 press = encoder.sw();

 if ( !press ) { return; }

 if (SW_PRESSED == press || SW_PRESSEDLONG == press) {
 initGrid();
 lcd.clear(0);
 }
}
</pre>
<p> <a title="Home" href="http://www.codetorment.com/" target="_self">Back to homepage</a></pre>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.codetorment.com%2F2009%2F11%2F03%2Farduino-goodness-watterott-s65-shield-16-bit-color-display-with-172x136-pixels%2F&amp;title=Arduino%20Goodness%20%3A%20Watterott%20S65-Shield%20172%26%23215%3B136%20pixels%2016-bit%20color%20display" id="wpa2a_6"><img src="http://www.codetorment.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="share save 171 16 Arduino Goodness : Watterott S65 Shield 172x136 pixels 16 bit color display"  title="Arduino Goodness : Watterott S65 Shield 172x136 pixels 16 bit color display" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.codetorment.com/2009/11/03/arduino-goodness-watterott-s65-shield-16-bit-color-display-with-172x136-pixels/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Arduino wireless motion detector : part 2</title>
		<link>http://www.codetorment.com/2009/10/25/arduino-wireless-motion-detector-part-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=arduino-wireless-motion-detector-part-2</link>
		<comments>http://www.codetorment.com/2009/10/25/arduino-wireless-motion-detector-part-2/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 17:23:58 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[ethernet]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[rf-transmitter]]></category>
		<category><![CDATA[shield]]></category>
		<category><![CDATA[wireless]]></category>

		<guid isPermaLink="false">http://www.codetorment.com/?p=345</guid>
		<description><![CDATA[In this part we&#8217;ll connect to a webpage and fetch some data from a php script. When building a project it&#8217;s better to test and debug each part on its own instead of trying to debug a much larger system. So we&#8217;ll start by attaching an ethernet shield and get it to talk to a [...]]]></description>
			<content:encoded><![CDATA[<p>In this part we&#8217;ll connect to a webpage and fetch some data from a php script.</p>
<p>When building a project it&#8217;s better to test and debug each part on its own instead of trying to debug a much larger system. So we&#8217;ll start by attaching an ethernet shield and get it to talk to a webpage. Once that is up and running we&#8217;ll connect the second arduino and rf.</p>
<p><span style="color: #ffffff;">Note: For this part you&#8217;ll need a webhosting account with a company who provides access to PHP on it&#8217;s accounts. Or you&#8217;ll need to run a local webserver. Contact your webhost to verify if your account has PHP access enabled.</span></p>
<div id="attachment_350" class="wp-caption alignnone" style="width: 526px"><a href="http://www.codetorment.com/wp-content/uploads/DSCN9556.JPG"><img class="size-full wp-image-350   " title="DSCN9556" src="http://www.codetorment.com/wp-content/uploads/DSCN9556.JPG" alt=" Arduino wireless motion detector : part 2" width="516" height="425" /></a><p class="wp-caption-text">Arduino Ethernet Shield</p></div>
<p><span id="more-345"></span>First we&#8217;ll create a script named &#8216;time.php&#8217; which will print out the date and time when we visit www.yourdomain.com/time.php . Open the file and paste the following code:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// Prints something like: Sunday 25th of October 2009 07:12:46 PM
echo date('l jS \of F Y h:i:s A');
?&gt;
</pre>
<p>Now close, save and upload time.php to your domain. If you put the script in the www or public_html folder it will be accesible from www.yourdomain/time.php if you&#8217;ve placed it inside another folder make sure to use www.yourdomain.com/folder/time.php in the next part.</p>
<p>Before we continue, open a webbrowser and go to www.yourdomain/time.php or wherever you placed the script and make sure it shows the date and time.</p>
<p>When the script is working, start the arduino IDE , create a new sketch and copy paste the code below</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;Ethernet.h&gt;

byte mac[] = {   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {   xxx, xxx, xxx, xxx};
byte server[] = { yyy, yyy, yyy, yyy};

Client client(server, 80);

void setup()
{
  pinMode(switchPin, INPUT);
  Ethernet.begin(mac, ip);
  Serial.begin(9600);

  delay(1000);

  Serial.println(&quot;connecting...&quot;);

  if (client.connect()) {
    Serial.println(&quot;connected&quot;);
    client.print(&quot;GET http://www.yourdomain.com/folder/time.php HTTP/1.0\n&quot;);
    client.print(&quot;Host: www.yourdomain.com\n\n&quot;);
    client.println();
  }
  else {
    Serial.println(&quot;connection failed&quot;);
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println(&quot;disconnecting.&quot;);
    client.stop();
    for(;;)
      ;
  }
}
</pre>
<p>&nbsp;</p>
<pre class="brush: cpp; title: ; notranslate">byte ip[] = { xxx, xxx, xxx, xxx};
</pre>
<p>Make sure to change the xxx, xxx, xxx, xxx with your settings, where xxx, xxx, xxx, xxx should be an available ip in the range of your network. Check your router for the range of ip-adresses in your network.</p>
<p>in my case the above line would read :</p>
<pre class="brush: cpp; title: ; notranslate">
byte ip[] = { 192, 168, 1, 36};
</pre>
<p>Next is the ip address of the server you wish to connect to. If your webhost does not provide you with a unique ip dedicated to your domain you should try using google&#8217;s ip. To check if your domain is asigned a unique ip ( your domain is the only one hosted on that ip ) open a command prompt and ping your domain with &#8216;ping www.yourdomain.com&#8217;.  On the next line the ip adress associated with your domain should show up on windows in the form of &#8216;Ping statistics for domain xxx.xxx.xxx.xxx&#8217;. Now open a browser and type in xxx.xxx.xxx.xxx instead of www.yourdomain.com. If you are seeing your domain, you have a unique ip assigned to your domain. If not, ping www.google.com and use the ip adress returned for the yyy.yyy.yyy.yyy below.</p>
<pre class="brush: cpp; title: ; notranslate">
byte server[] = { yyy, yyy, yyy, yyy};
</pre>
<p><a href="http://www.codetorment.com/wp-content/uploads/cmd02.jpg"><img title="cmd02" src="http://www.codetorment.com/wp-content/uploads/cmd02.jpg" alt="cmd02 Arduino wireless motion detector : part 2" width="535" height="192" /></a></p>
<p>So the server ip becomes :</p>
<pre class="brush: cpp; title: ; notranslate">
byte server[] = { 74, 125, 67, 100};
</pre>
<p>These settings should get you up and running. The only thing left to do is change these lines to match your domain and the url of the time.php script :</p>
<pre class="brush: cpp; title: ; notranslate">
client.print(&quot;GET http://www.yourdomain.com/folder/time.php HTTP/1.0\n&quot;);
client.print(&quot;Host: www.yourdomain.com\n\n&quot;);
</pre>
<p>Now upload the code to the arduino and open the serial monitor.<br />
If all went well the monitor should show something similar:</p>
<div id="attachment_389" class="wp-caption alignnone" style="width: 409px"><a href="http://www.codetorment.com/wp-content/uploads/serial.JPG"><img class="size-full wp-image-389" title="serial" src="http://www.codetorment.com/wp-content/uploads/serial.JPG" alt=" Arduino wireless motion detector : part 2" width="399" height="352" /></a><p class="wp-caption-text">Serial Monitor</p></div>
<p>As you can see second to last line displays the correct date and time.</p>
<p>Check <a title="Part 3" href="http://www.codetorment.com/2009/11/07/arduino-wireless-motion-detector-part-3/" target="_self">part 3</a> where I show you how to put it all together to create a weblogging wireless motion detector.</p>
<p><a title="Home" href="http://www.codetorment.com/" target="_self">Back to homepage</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.codetorment.com%2F2009%2F10%2F25%2Farduino-wireless-motion-detector-part-2%2F&amp;title=Arduino%20wireless%20motion%20detector%20%3A%20part%202" id="wpa2a_8"><img src="http://www.codetorment.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="share save 171 16 Arduino wireless motion detector : part 2"  title="Arduino wireless motion detector : part 2" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.codetorment.com/2009/10/25/arduino-wireless-motion-detector-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Arduino wireless motion detector : part 1</title>
		<link>http://www.codetorment.com/2009/10/25/arduino-wireless-motion-detector/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=arduino-wireless-motion-detector</link>
		<comments>http://www.codetorment.com/2009/10/25/arduino-wireless-motion-detector/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 03:06:48 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[rf-transmitter]]></category>
		<category><![CDATA[shield]]></category>
		<category><![CDATA[wireless]]></category>

		<guid isPermaLink="false">http://www.codetorment.com/?p=316</guid>
		<description><![CDATA[This video shows a very basic setup of two arduinos talking wireless over RF. The two rf-boards used in this setup were discussed earlier in this post. The left arduino has a sensorshield with a PIR-sensor and a rf-transmitter connected to it. When the PIR-sensor detects changes in IR-radition in it&#8217;s field of view, it [...]]]></description>
			<content:encoded><![CDATA[<p>This video shows a very basic setup of two arduinos talking wireless over RF.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7242154&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=7242154&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>The two rf-boards used in this setup were discussed earlier in <a title="RF-transmitter-receiver" href="http://www.codetorment.com/2009/10/24/arduino-goodness-continued/" target="_blank">this</a> post.</p>
<p>The left arduino has a sensorshield with a PIR-sensor and a rf-transmitter connected to it. When the PIR-sensor detects changes in IR-radition in it&#8217;s field of view, it triggers the rf-transmitter and a red led.<span id="more-316"></span></p>
<p>The right arduino just has a rf-receiver and a green led connected to it. When the right arduino receives a radio signal the green led turns on.</p>
<p>Code for the transmitting arduino:</p>
<pre class="brush: cpp; title: ; notranslate">
int ledPin = 12;                 // pin
int pirPin = 4;                  // pin for PIR-sensor
int RFoutPin = 7;                // pin for RF transmitter
int value = 0;                   // used to store data from PIR-sensor

void setup() {
pinMode(RFoutPin, OUTPUT);       // declare RF-transmitter as output
  pinMode(ledPin, OUTPUT);       // declare led as output
pinMode(pirPin, INPUT);          // declare PIR-sensor as input
}

void loop() {
value = digitalRead(pirPin);     // read PIR-sensor
if (HIGH == value) {             // transmit HIGH signal
digitalWrite(RFoutPin, HIGH);
digitalWrite(ledPin, HIGH);
}
else {                           // transmit LOW signal
    digitalWrite(RFoutPin, LOW);
    digitalWrite(ledPin, LOW);
 }

}
</pre>
<p>Code for the receiving side:</p>
<pre class="brush: cpp; title: ; notranslate">
int ledPin = 11;                  // pin for the LED
int RFinPin = 7;                  // pin for the RF receiver
int val = 0;                      // variable for reading the pin status
void setup() {
pinMode(ledPin, OUTPUT);          // declare LED as output
pinMode(RFinPin, INPUT);          // declare RF receiver as input
}
void loop(){
 val = digitalRead(RFinPin);      // read input value
 if (val == HIGH) {               // check if the input is HIGH
    digitalWrite(ledPin, HIGH);   // turn LED ON
 } else {
  digitalWrite(ledPin, LOW);      // turn LED OFF
  }
}
</pre>
<p>Ok, maybe this example was a bit too easy.</p>
<p>Check <a title="Part 2" href="http://www.codetorment.com/2009/10/25/arduino-wireless-motion-detector-part-2/" target="_self">part 2</a> to learn how to connect arduino to a network and send/receive data to/from a webpage using the ethernet shield discussed <a href="http://www.codetorment.com/2009/10/24/arduino-goodness-ethernet-shield/">here</a>.</p>
<p><a title="Home" href="http://www.codetorment.com/" target="_self">Back to homepage</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.codetorment.com%2F2009%2F10%2F25%2Farduino-wireless-motion-detector%2F&amp;title=Arduino%20wireless%20motion%20detector%20%3A%20part%201" id="wpa2a_10"><img src="http://www.codetorment.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="share save 171 16 Arduino wireless motion detector : part 1"  title="Arduino wireless motion detector : part 1" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.codetorment.com/2009/10/25/arduino-wireless-motion-detector/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Arduino Goodness : Continued</title>
		<link>http://www.codetorment.com/2009/10/24/arduino-goodness-continued/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=arduino-goodness-continued</link>
		<comments>http://www.codetorment.com/2009/10/24/arduino-goodness-continued/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 13:17:49 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[pir]]></category>
		<category><![CDATA[remote]]></category>
		<category><![CDATA[rf-transmitter]]></category>
		<category><![CDATA[shield]]></category>

		<guid isPermaLink="false">http://www.codetorment.com/?p=270</guid>
		<description><![CDATA[In a recent shopping spre I bought some new arduino stuff to play with. This is the rest of the parts I received: The Arduino Sensor Shield is a handy extension for attaching sensors and servo&#8217;s using standard cables The shields provides you with: 6 analog connectors ( 5 on the left and one on [...]]]></description>
			<content:encoded><![CDATA[<p><strong>In a recent shopping spre I bought some new arduino stuff to play with.</strong></p>
<p>This is the rest of the parts I received:</p>
<div id="attachment_272" class="wp-caption alignnone" style="width: 469px"><a href="http://www.codetorment.com/wp-content/uploads/000_0273.JPG"><img class="size-large wp-image-272   " title="000_0273" src="http://www.codetorment.com/wp-content/uploads/000_0273-1024x770.jpg" alt="000 0273 1024x770 Arduino Goodness : Continued" width="459" height="345" /></a><p class="wp-caption-text">Arduino Sensor Shield</p></div>
<p>The Arduino Sensor Shield is a handy extension for attaching sensors and servo&#8217;s using standard cables<span id="more-270"></span></p>
<p>The shields provides you with:</p>
<ul>
<li> 6 analog connectors ( 5 on the left and one on the bottom )</li>
<li>13 digital IO headers (4 x 4 3-pin headers )</li>
<li>6 analog IO headers ( 6 3-pin headers )</li>
<li>Communication port ( I2C or UART, connector on the right)</li>
</ul>
<div id="attachment_279" class="wp-caption alignnone" style="width: 469px"><a href="http://www.codetorment.com/wp-content/uploads/000_0278.JPG"><img class="size-large wp-image-279    " title="000_0278" src="http://www.codetorment.com/wp-content/uploads/000_0278-1024x762.jpg" alt="000 0278 1024x762 Arduino Goodness : Continued" width="459" height="341" /></a><p class="wp-caption-text">Sensor Shield with PIR-sensor attached</p></div>
<p><!--more-->A PIR or Passive Infrared Sensor is a device that measures infrared light radiating from any objects in its field of view. These sensors are often used in backyard or driveway motion detectors.   Bassicaly they measure the amount of IR radiated by objects around it and detect sudden fluctuations  i.e. caused by a person walking into a sensors&#8217;  field of view.</p>
<p>I love the sensor shield for prototyping purposes, it will certainly lower the number of connections to your breadboard.</p>
<p>All these parts were bought on ebay, search for &#8216;arduino sensor shield&#8217; by clicking  <a title="Ebay Search 'Arduino+sensor+shield'" href="http://shop.ebay.com/?_from=R40&amp;_trksid=p3907.m38.l1313&amp;_nkw=arduino+sensor+shield&amp;_sacat=See-All-Categories" target="_blank">here</a></p>
<div id="attachment_297" class="wp-caption alignnone" style="width: 526px"><a href="http://www.codetorment.com/wp-content/uploads/000_0284.JPG"><img class="size-large wp-image-297   " title="000_0284" src="http://www.codetorment.com/wp-content/uploads/000_0284-1024x709.jpg" alt="000 0284 1024x709 Arduino Goodness : Continued" width="516" height="357" /></a><p class="wp-caption-text">RF receiver-transmitter pair</p></div>
<p>A RadioFrequency receiver-transmitter pair with 4-channels, 1 connector for each channel. The one on the left is the receiver, it also came with an antenna, like the one you see on the right, but it wasn&#8217;t soldered on.</p>
<p>The green transmitter and receiverboards have male headers and plug into the female headers mounted on the red extender boards. I have played around with them and can say that they work. I still need to check the maximum range these things will go. These were tested to be working at 4 meters appart with a wooden door and a drywall in between.</p>
<p>In a next post I&#8217;ll demonstrate an arduino motion-sensor-over-rf  to a webserver running php</p>
<p>pir-sensor  &gt;&gt;  arduino &gt;&gt;  rf-transmitter   . . .  _ _ _ . . .     rf-receiver  &gt;&gt;  arduino &gt;&gt;  ethernetshield &gt;&gt;  php</p>
<p><a title="Home" href="http://www.codetorment.com/" target="_self">Back to homepage</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.codetorment.com%2F2009%2F10%2F24%2Farduino-goodness-continued%2F&amp;title=Arduino%20Goodness%20%3A%20Continued" id="wpa2a_12"><img src="http://www.codetorment.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="share save 171 16 Arduino Goodness : Continued"  title="Arduino Goodness : Continued" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.codetorment.com/2009/10/24/arduino-goodness-continued/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino Goodness : Ethernet Shield</title>
		<link>http://www.codetorment.com/2009/10/24/arduino-goodness-ethernet-shield/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=arduino-goodness-ethernet-shield</link>
		<comments>http://www.codetorment.com/2009/10/24/arduino-goodness-ethernet-shield/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 10:11:02 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[ethernet]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[shield]]></category>

		<guid isPermaLink="false">http://www.codetorment.com/?p=114</guid>
		<description><![CDATA[In a recent shopping spre I bought some new arduino stuff to play with. This is the first of a few items I recentely bought from ebay: An arduino EthernetShield based on the WIZ5100 ethernet controller. Ever since I started thinkering with Arduino I wanted a way to connect it to a network.  So befor [...]]]></description>
			<content:encoded><![CDATA[<p><strong>In a recent shopping spre I bought some new arduino stuff to play with.</strong></p>
<p>This is the first of a few items I recentely bought from ebay: An arduino EthernetShield based on the WIZ5100 ethernet controller.</p>
<div id="attachment_117" class="wp-caption alignnone" style="width: 469px"><a href="http://www.codetorment.com/wp-content/uploads/000_0250.JPG"><img class="size-full wp-image-117   " title="Arduino Ethernet Shield" src="http://www.codetorment.com/wp-content/uploads/000_0250.JPG" alt=" Arduino Goodness : Ethernet Shield" width="459" height="394" /></a><p class="wp-caption-text">Arduino Ethernet Shield based on the WIZ5100 ethernet controller</p></div>
<address> </address>
<p>Ever since I started thinkering with Arduino I wanted a way to connect it to a network.  So befor I got this shield I started messing around <span id="more-114"></span>with a fonera router by connecting the rx-tx lines of the arduino to the tx-rx connections of a fonera 2100 router.  However  to be able to acces the fonera via serial you need to reflash it with a third-party image (open-wrt, dd-wrt,&#8230;) . The image needs to include the tty or stty command, which enables you to set the serial communication speed of the router to a baudspeed the arduino can handle.</p>
<div id="attachment_187" class="wp-caption alignnone" style="width: 522px"><a href="http://www.codetorment.com/wp-content/uploads/000_0129.JPG"><img class="size-full wp-image-187 " title="Arduino to Fonera Serial " src="http://www.codetorment.com/wp-content/uploads/000_0129.JPG" alt=" Arduino Goodness : Ethernet Shield" width="512" height="343" /></a><p class="wp-caption-text">Arduino to Fonera Serial Communication and Duvel beer</p></div>
<p>I&#8217;ll post a guide later containing information on how to connect to a fonera router and control it wireless. The major downside of this way of connecting to a network is the usage of the RX-TX lines on the arduino board. Making it harder to debug and thus making it harder to whip something up real quick.</p>
<p>To be completely honnest, she wasn&#8217;t my first&#8230; .  Some time ago in a moment of weakness I was in the believe I had struck upon a genuine bargain : a (very) cheap arduino ethernet shield. As I was later to realize, the price was about right. The problem with this shield is that is uses the Microchip&#8217;s ENC28J60 SPI based ethernet controller.</p>
<div id="attachment_193" class="wp-caption alignnone" style="width: 501px"><a href="http://www.codetorment.com/wp-content/uploads/000_0235.JPG"><img class="size-full wp-image-193  " title="Arduino Ethernet Shield V1.1" src="http://www.codetorment.com/wp-content/uploads/000_0235.JPG" alt=" Arduino Goodness : Ethernet Shield" width="491" height="491" /></a><p class="wp-caption-text">&quot;Arduino Ethernet Shield V1.1&quot; using ENC28J60 SPI controller.</p></div>
<p>I don&#8217;t mean to bash the ENC28J60 based shield, but it shouldn&#8217;t be branded  &#8220;Arduino Ethernet Shield v1.1&#8243; as it uses a different chip and design as stated in the <a title="Arduino Ethernet Shield " href="http://www.arduino.cc/en/Main/ArduinoEthernetShield" target="_blank">reference design</a> on the arduino website.  Because of the different chip the library you need to include differs from the arduino ethernet library. Since the library is different the code you need to write is different and in this case it could use some more abastraction.</p>
<p><span style="color: #FFFFFF;">Note : I did not buy my shield from nuelectronics but from a seller on ebay. Both shields however use the ENC28j60 chip and both are branded Arduino Ethernet Shield V1.x so my guess is in one way or the other they originated from the same place/drawingboard.</span></p>
<p>To better explain what I&#8217;m talkin about I&#8217;ll show two example programs. The first example is for the ENC28j60 based shield, the second example is for the WIZ5100 based shield using the official ethernet library.</p>
<p>The first code example is included in the <a title="nuelectronics ethernetShield library" href="http://www.nuelectronics.com/download/projects/etherShield.zip" target="_blank">etherShield library</a> provided by  <a title="nuelectronics" href="http://www.nuelectronics.com/" target="_blank">nuelectronics</a></p>
<pre class="brush: cpp; title: ; notranslate">
#include &quot;etherShield.h&quot;

// please modify the following lines. mac and ip have to be unique
// in your local area network. You can not have the same numbers in
// two devices:
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};
static uint8_t myip[4] = {192,168,1,88};
static uint16_t my_port = 1200;     // client port

// client_ip - modify it when you have multiple client on the network
// for server to distinguish each ethershield client
static char client_ip[] = &quot;192.168.1.88&quot;;

// server settings - modify the service ip to your own server
static uint8_t dest_ip[4]={192,168,1,4};
static uint8_t dest_mac[6];

enum CLIENT_STATE
{
   IDLE, ARP_SENT, ARP_REPLY, SYNC_SENT
 };

static CLIENT_STATE client_state;

static uint8_t client_data_ready;

static uint8_t syn_ack_timeout = 0;

#define BUFFER_SIZE 500
static uint8_t buf[BUFFER_SIZE+1];

char sensorData[10];

EtherShield es=EtherShield();

// prepare the webpage by writing the data to the tcp send buffer
uint16_t print_webpage(uint8_t *buf);
int8_t analyse_cmd(char *str);
// get current temperature
#define TEMP_PIN  3
void getCurrentTemp( char *temperature);
void client_process(void);

void setup(){

   /*initialize enc28j60*/
	 es.ES_enc28j60Init(mymac);
   es.ES_enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
   delay(10);

	/* Magjack leds configuration, see enc28j60 datasheet, page 11 */
	// LEDA=greed LEDB=yellow
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
  // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
  // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
  es.ES_enc28j60PhyWrite(PHLCON,0x476);
	delay(100);

  //init the ethernet/ip layer:
  es.ES_init_ip_arp_udp_tcp(mymac,myip,80);

  // intialize varible;
  syn_ack_timeout =0;
  client_data_ready = 0;
  client_state = IDLE;
  // initialize DS18B20 datapin
    digitalWrite(TEMP_PIN, LOW);
    pinMode(TEMP_PIN, INPUT);      // sets the digital pin as input (logic 1)

}

void loop(){

        if(client_data_ready==0){
          delay(60000UL);             // delay 60s
          getCurrentTemp(sensorData);
          client_data_ready = 1;
         }
	client_process();

}

uint16_t gen_client_request(uint8_t *buf )
{
	uint16_t plen;
	byte i;

	plen= es.ES_fill_tcp_data_p(buf,0, PSTR ( &quot;GET /ethershield_log/save.php?pwd=secret&amp;client=&quot; ) );
        for(i=0; client_ip[i]!='&#92;&#48;'; i++){
            buf[TCP_DATA_P+plen]=client_ip[i];
            plen++;
        }
        plen= es.ES_fill_tcp_data_p(buf,plen, PSTR ( &quot;&amp;status=temperature-&quot; ) );
        for(i=0; sensorData[i]!='&#92;&#48;'; i++){

                buf[TCP_DATA_P+plen]=sensorData[i];
                plen++;
        }	

	plen= es.ES_fill_tcp_data_p(buf, plen, PSTR ( &quot; HTTP/1.0\r\n&quot; ));
	plen= es.ES_fill_tcp_data_p(buf, plen, PSTR ( &quot;Host: 192.168.1.4\r\n&quot; ));
	plen= es.ES_fill_tcp_data_p(buf, plen, PSTR ( &quot;User-Agent: AVR ethernet\r\n&quot; ));
        plen= es.ES_fill_tcp_data_p(buf, plen, PSTR ( &quot;Accept: text/html\r\n&quot; ));
	plen= es.ES_fill_tcp_data_p(buf, plen, PSTR ( &quot;Keep-Alive: 300\r\n&quot; ));
	plen= es.ES_fill_tcp_data_p(buf, plen, PSTR ( &quot;Connection: keep-alive\r\n\r\n&quot; ));

	return plen;
}

//*****************************************************************************************
//
// Function : client_process
// Description : send temparature to web server, this option is disabled by default.
// YOU MUST install webserver and server script before enable this option,
// I recommented Apache webserver and PHP script.
// More detail about Apache and PHP installation please visit http://www.avrportal.com/
//
//*****************************************************************************************
void client_process ( void )
{
    uint16_t plen;
	uint8_t i;

    if (client_data_ready == 0)  return;     // nothing to send

	if(client_state == IDLE){   // initialize ARP
       es.ES_make_arp_request(buf, dest_ip);

	   client_state = ARP_SENT;
	   return;
	}

	if(client_state == ARP_SENT){

        plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

		// destination ip address was found on network
        if ( plen!=0 )
        {
            if ( es.ES_arp_packet_is_myreply_arp ( buf ) ){
                client_state = ARP_REPLY;
				syn_ack_timeout=0;
				return;
            }

		}
	        delay(10);
		syn_ack_timeout++;

		if(syn_ack_timeout== 100) {  //timeout, server ip not found
			client_state = IDLE;
			client_data_ready =0;
			syn_ack_timeout=0;
			return;
		}
    }

 // send SYN packet to initial connection
	if(client_state == ARP_REPLY){
		// save dest mac
		for(i=0; i&lt;6; i++){
			dest_mac[i] = buf[ETH_SRC_MAC+i];
		}

        es.ES_tcp_client_send_packet (
                       buf,
                       80,
                       1200,
                       TCP_FLAG_SYN_V,                 // flag
                       1,                                              // (bool)maximum segment size
                       1,                                              // (bool)clear sequence ack number
                       0,                                              // 0=use old seq, seqack : 1=new seq,seqack no data : new seq,seqack with data
                       0,                                              // tcp data length
		      dest_mac,
		      dest_ip
                       );

		client_state = SYNC_SENT;
	}
  // get new packet
  if(client_state == SYNC_SENT){
    plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

       // no new packet incoming
    if ( plen == 0 )
    {
        return;
    }

       // check ip packet send to avr or not?
       // accept ip packet only
    if ( es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){
		return;
    }

       // check SYNACK flag, after AVR send SYN server response by send SYNACK to AVR
    if ( buf [ TCP_FLAGS_P ] == ( TCP_FLAG_SYN_V | TCP_FLAG_ACK_V ) )
    {

               // send ACK to answer SYNACK

               es.ES_tcp_client_send_packet (
                       buf,
                       80,
                       1200,
                       TCP_FLAG_ACK_V,                 // flag
                       0,                                              // (bool)maximum segment size
                       0,                                              // (bool)clear sequence ack number
                       1,                                              // 0=use old seq, seqack : 1=new seq,seqack no data : new seq,seqack with data
                       0,                                              // tcp data length
						dest_mac,
						dest_ip
                       );
               // setup http request to server
               plen = gen_client_request( buf );
               // send http request packet
               // send packet with PSHACK
               es.ES_tcp_client_send_packet (
                                       buf,
                                       80,                                             // destination port
                                       1200,                                   // source port
                                       TCP_FLAG_ACK_V | TCP_FLAG_PUSH_V,                        // flag
                                       0,                                              // (bool)maximum segment size
                                       0,                                              // (bool)clear sequence ack number
                                       0,                                              // 0=use old seq, seqack : 1=new seq,seqack no data : &gt;1 new seq,seqack with data
                                       plen,                           // tcp data length
                                       dest_mac,
									   dest_ip
									   );
               return;
       }
       // after AVR send http request to server, server response by send data with PSHACK to AVR
       // AVR answer by send ACK and FINACK to server
       if ( buf [ TCP_FLAGS_P ] == (TCP_FLAG_ACK_V|TCP_FLAG_PUSH_V) )
       {
               plen = es.ES_tcp_get_dlength( (uint8_t*)&amp;buf );

               // send ACK to answer PSHACK from server
               es.ES_tcp_client_send_packet (
                                       buf,
                                       80,                                             // destination port
                                       1200,                                   // source port
                                       TCP_FLAG_ACK_V,                  // flag
                                       0,                                              // (bool)maximum segment size
                                       0,                                              // (bool)clear sequence ack number
                                       plen,                                           // 0=use old seq, seqack : 1=new seq,seqack no data : &gt;1 new seq,seqack with data
                                       0,                              // tcp data length
				      dest_mac,
				      dest_ip
               );;
               // send finack to disconnect from web server

               es.ES_tcp_client_send_packet (
                                       buf,
                                       80,                                             // destination port
                                       1200,                                   // source port
                                       TCP_FLAG_FIN_V|TCP_FLAG_ACK_V,                  // flag
                                       0,                                              // (bool)maximum segment size
                                       0,                                              // (bool)clear sequence ack number
                                       0,                                           // 0=use old seq, seqack : 1=new seq,seqack no data : &gt;1 new seq,seqack with data
                                       0,
										dest_mac,
										dest_ip
				);

               return;

       }
       // answer FINACK from web server by send ACK to web server
       if ( buf [ TCP_FLAGS_P ] == (TCP_FLAG_ACK_V|TCP_FLAG_FIN_V) )
       {
               // send ACK with seqack = 1
               es.ES_tcp_client_send_packet(

                                       buf,
                                       80,                                             // destination port
                                       1200,                                   // source port
                                       TCP_FLAG_ACK_V,                 // flag
                                       0,                                              // (bool)maximum segment size
                                       0,                                              // (bool)clear sequence ack number
                                       1,                                              // 0=use old seq, seqack : 1=new seq,seqack no data : &gt;1 new seq,seqack with data
                                       0,
									   dest_mac,
									   dest_ip
				);
			client_state = IDLE;		// return to IDLE state
			client_data_ready =0;		// client data sent
		}
  }
}

void OneWireReset(int Pin) // reset.  Should improve to act as a presence pulse
{
     digitalWrite(Pin, LOW);
     pinMode(Pin, OUTPUT); // bring low for 500 us
     delayMicroseconds(500);
     pinMode(Pin, INPUT);
     delayMicroseconds(500);
}

void OneWireOutByte(int Pin, byte d) // output byte d (least sig bit first).
{
   byte n;

   for(n=8; n!=0; n--)
   {
      if ((d &amp; 0x01) == 1)  // test least sig bit
      {
         digitalWrite(Pin, LOW);
         pinMode(Pin, OUTPUT);
         delayMicroseconds(5);
         pinMode(Pin, INPUT);
         delayMicroseconds(60);
      }
      else
      {
         digitalWrite(Pin, LOW);
         pinMode(Pin, OUTPUT);
         delayMicroseconds(60);
         pinMode(Pin, INPUT);
      }

      d=d&gt;&gt;1; // now the next bit is in the least sig bit position.
   }

}

byte OneWireInByte(int Pin) // read byte, least sig byte first
{
    byte d, n, b;

    for (n=0; n&lt;8; n++)
    {
        digitalWrite(Pin, LOW);
        pinMode(Pin, OUTPUT);
        delayMicroseconds(5);
        pinMode(Pin, INPUT);
        delayMicroseconds(5);
        b = digitalRead(Pin);
        delayMicroseconds(50);
        d = (d &gt;&gt; 1) | (b&lt;&lt;7); // shift d to right and insert b in most sig bit position
    }
    return(d);
}

void getCurrentTemp(char *temp)
{
  int HighByte, LowByte, TReading, Tc_100, sign, whole, fract;

  OneWireReset(TEMP_PIN);
  OneWireOutByte(TEMP_PIN, 0xcc);
  OneWireOutByte(TEMP_PIN, 0x44); // perform temperature conversion, strong pullup for one sec

  OneWireReset(TEMP_PIN);
  OneWireOutByte(TEMP_PIN, 0xcc);
  OneWireOutByte(TEMP_PIN, 0xbe);

  LowByte = OneWireInByte(TEMP_PIN);
  HighByte = OneWireInByte(TEMP_PIN);
  TReading = (HighByte &lt;&lt; 8) + LowByte;
  sign = TReading &amp; 0x8000;  // test most sig bit
  if (sign) // negative
  {
    TReading = (TReading ^ 0xffff) + 1; // 2's comp
  }
  Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25

  whole = Tc_100 / 100;  // separate off the whole and fractional portions
  fract = Tc_100 % 100;

	if(sign) temp[0]='-';
	else 		 temp[0]='+';

	temp[1]= (whole-(whole/100)*100)/10 +'0' ;
	temp[2]= whole-(whole/10)*10 +'0';

	temp[3]='.';
	temp[4]=fract/10 +'0';
	temp[5]=fract-(fract/10)*10 +'0';

	temp[6] = '&#92;&#48;';
}
</pre>
<p>&nbsp;<br />
As you can see this example involves alot of lowlevel configuration specific lines which could be hidden away in the library for clarity&#8217;s sake.</p>
<p>The second code example is one from the standard <a title="standard ethernet library" href="http://arduino.cc/en/Reference/Ethernet" target="_blank">ethernet library</a> included with any recent installation of the arduino environment. This is code that runs straight on a WIZ5100 powered ethernet shield.<br />
&nbsp;</p>
<pre class="brush: cpp; title: ; notranslate">
/*
 * Web Server
 *
 * A simple web server that shows the value of the analog input pins.
 */

#include &lt;Ethernet.h&gt;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 177 };

Server server(80);

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if we've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so we can send a reply
        if (c == '\n' &amp;&amp; current_line_is_blank) {
          // send a standard http response header
          client.println(&quot;HTTP/1.1 200 OK&quot;);
          client.println(&quot;Content-Type: text/html&quot;);
          client.println();

          // output the value of each analog input pin
          for (int i = 0; i &lt; 6; i++) {
            client.print(&quot;analog input &quot;);
            client.print(i);
            client.print(&quot; is &quot;);
            client.print(analogRead(i));
            client.println(&quot;&lt;br /&gt;&quot;);
          }
          break;
        }
        if (c == '\n') {
          // we're starting a new line
          current_line_is_blank = true;
        } else if (c != '\r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();
  }
}
</pre>
<p>&nbsp;<br />
Needless to say the latter is easier for the eye ( of mind ). Right now I use the WIZ5100 based shield for quick prototyping of new ideas and the ENC28j60 shield is used for more permanent setups, as the code isn&#8217;t stuff I want to rewrite on a daily basis.</p>
<p><a title="Arduino Goodness : Continued" href="http://www.codetorment.com/2009/10/24/arduino-goodness-continued/" target="_self">Next</a> up will be some more things I picked up :</p>
<ul>
<li>an rf-transmitter-receiver pair</li>
</ul>
<ul>
<li>a PIR-sensor</li>
</ul>
<ul>
<li>an Arduino sensor-shield</li>
</ul>
<p><a title="Home" href="http://www.codetorment.com/" target="_self">Back to homepage</a></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.codetorment.com%2F2009%2F10%2F24%2Farduino-goodness-ethernet-shield%2F&amp;title=Arduino%20Goodness%20%3A%20Ethernet%20Shield" id="wpa2a_14"><img src="http://www.codetorment.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="share save 171 16 Arduino Goodness : Ethernet Shield"  title="Arduino Goodness : Ethernet Shield" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.codetorment.com/2009/10/24/arduino-goodness-ethernet-shield/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

