<?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>The Electronics Hobbyist &#187; code</title>
	<atom:link href="http://www.theelectronicshobbyist.com/blog/tag/code/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.theelectronicshobbyist.com/blog</link>
	<description>A Passion for Curiosity and Play</description>
	<lastBuildDate>Fri, 20 Jan 2012 14:54:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Motion and Light Sensors with Arduino (and Without)</title>
		<link>http://www.theelectronicshobbyist.com/blog/motion-and-light-sensors-with-arduino-and-without/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/motion-and-light-sensors-with-arduino-and-without/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 08:00:13 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Reader Mailbag]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[circuit]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[diode]]></category>
		<category><![CDATA[LDR]]></category>
		<category><![CDATA[LED]]></category>
		<category><![CDATA[light dependent resistor]]></category>
		<category><![CDATA[logic probe]]></category>
		<category><![CDATA[motion sensor]]></category>
		<category><![CDATA[multimeter]]></category>
		<category><![CDATA[PIR]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[transistor]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=606</guid>
		<description><![CDATA[I have recently received the following question from a reader: I&#8217;m looking for a circuit board design that will need to turn on an array of LEDs when motion is detected during the day time, and also stay on continuously during the night time; using the Arduino would be nice. The project that I am [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I have recently received the following question from a reader:</p>
<blockquote><p>I&#8217;m looking for a circuit board design that will need to turn on an array of LEDs when motion is detected during the day time, and also stay on continuously during the night time; using the Arduino would be nice. The project that I am working on is just a picture frame with my artwork in it. The art is actually an embossed piece. The light that I am placing within the frame will shine across the embossed art, and reflect off the raised areas of paper and make the picture appear more three-dimensional. So, the picture acts as a night light when it&#8217;s dark, and then turns on for a moment during the day time when some approaches the picture.</p></blockquote>
<p>I suspected there had to be a simple circuit to accomplish this without having to program a microcontroller to take care of triggering the light. I could see that was overkill; after all, it is just a way to switch lights on/off. Still, I had no idea how to do it, if not from a software point of view.<br />
<span id="more-606"></span><br />
Well, he mentioned the Arduino in his email, and I wanted to give him a quick response, so I put together a prototype to achieve the effect he desired. I properly warned him that might not be the best solution, but since he wanted to tinker with the Arduino, that would be a simple sketch.</p>
<p>I suggested the use of a compact Arduino clone like the <a href="http://www.theelectronicshobbyist.com/blog/goto/ardweeny">Ardweeny</a> (check out &#8220;<a title="LED Bar Graph: Testing the Ardweeny" href="http://www.theelectronicshobbyist.com/blog/led-bar-graph-testing-the-ardweeny/">Testing the Ardweeny</a>&#8221; to see how tiny it is!)</p>
<p>Then, soldering everything onto a stripboard should result in a small footprint that would not detract from his art piece.</p>
<p>Anyway, here&#8217;s a <a href="http://fritzing.org/" target="_blank">Fritzing</a> diagram that shows how to wire the circuit:</p>
<p><a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/12/fritzing1.jpg"><img class="alignnone  wp-image-635" title="fritzing1" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/12/fritzing1.jpg" alt="Fritzing diagram for motion-triggered light using Arduino" width="557" height="601" /></a></p>
<p>You can see the Arduino, LDR (light sensor, the component with the &#8220;squiggly&#8221; line), LED and PIR (motion sensor, the black &#8220;mystery&#8221; component to the right &#8212; the Fritzing version I&#8217;m using has no PIR component and I still don&#8217;t know how to add a custom component the proper way).</p>
<p>Here&#8217;s an <a href="http://www.ladyada.net/learn/sensors/pir.html" target="_blank">excellent tutorial</a> on the use of PIRs, from Ladyada who did create her own component on Fritzing.</p>
<p>And here&#8217;s a picture of the setup:</p>
<p><a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/12/pic1.jpg"><img class="alignnone  wp-image-639" title="pic1" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/12/pic1.jpg" alt="Circuit for the motion-triggered light with Arduino" width="570" height="492" /></a></p>
<p>Bill of Materials (include parts used for both Arduino and non-Arduino* versions):</p>
<ul>
<li><a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4651" target="_blank">Breadboard</a></li>
<li>Power* (I used <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4414" target="_blank">this breakout board</a> connected to my USB; power pins only)</li>
<li>1 <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProduct_10001_10001_202403_-1" target="_blank">photocell</a> (light dependent resistor/LDR)</li>
<li>1 <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4290" target="_blank">motion sensor</a> (passive infrared sensor/PIR)</li>
<li><a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4447" target="_blank">Arduino</a> (any flavor)</li>
<li>1 NPN transistor* (<a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProduct_10001_10001_254781_-1" target="_blank">BC548B</a>) (for the PIR)</li>
<li>1 PNP transistor* (<a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProduct_10001_10001_178618_-1" target="_blank">2N3906</a>) (for the LDR)</li>
<li>2 <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4383" target="_blank">10K Ohm resistors</a>* (Arduino version uses only 1)</li>
<li>2 diodes (<a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProduct_10001_10001_655269_-1" target="_blank">1N914A</a>)*</li>
<li>1 <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProduct_10001_10001_94714_-1" target="_blank">10K trimpot</a>*</li>
<li><a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4242" target="_blank">Jumper wire</a> (male-to-male, assorted lengths)</li>
<li>1 <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4215" target="_blank">LED</a></li>
<li>2 180 Ohm resistors* (<a href="http://www.theelectronicshobbyist.com/blog/goto/uno" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/uno';return true;" onmouseout="self.status=''">Arduino</a> version uses only 1) (<a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4374" target="_blank">200 Ohm</a> will work, too)</li>
<li><a href="http://www.amazon.com/gp/product/B000FLVJ3Q/ref=as_li_ss_tl?ie=UTF8&amp;tag=mpu-proj-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=B000FLVJ3Q" target="_blank">Multimeter</a> (optional, but helpful)</li>
<li><a href="http://www.amazon.com/gp/product/B000Z9HAP4/ref=as_li_ss_tl?ie=UTF8&amp;tag=mpu-proj-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399373&amp;creativeASIN=B000Z9HAP4" target="_blank">Logic probe</a> (optional, but helpful)</li>
</ul>
<p>Here&#8217;s a <a href="http://www.youtube.com/watch?v=QuzCGq8SZPM" target="_blank">video</a> showing the concept:</p>
<p>(On a side note I have now acquired a HD flip camera so I don&#8217;t have to use my phone to record videos anymore).</p>
<p>OK, here’s the Arduino sketch:</p>
<pre><span style="color: #7e7e7e;">/* www.TheElectronicsHobbyist.com/blog</span>
<span style="color: #7e7e7e;"> * Natalia Fargasch Norman</span>
<span style="color: #7e7e7e;"> * Motion detection using Arduino</span>
<span style="color: #7e7e7e;"> */</span>

#define LDR 0
#define PIR 2
#define LED 3

<span style="color: #cc6600;">int</span> pirState;
<span style="color: #cc6600;">int</span> ldrValue;

<span style="color: #cc6600;">void</span> <span style="color: #cc6600;"><strong>setup</strong></span>() {
  <span style="color: #7e7e7e;">//Serial.begin(9600);</span>
  <span style="color: #cc6600;">pinMode</span>(LED, <span style="color: #006699;">OUTPUT</span>);
  <span style="color: #cc6600;">pinMode</span>(PIR, <span style="color: #006699;">INPUT</span>);
  <span style="color: #cc6600;">digitalWrite</span>(LED, <span style="color: #006699;">LOW</span>);
}

<span style="color: #cc6600;">void</span> <span style="color: #cc6600;"><strong>loop</strong></span>(){
  ldrValue = <span style="color: #cc6600;">analogRead</span>(LDR);
  <span style="color: #7e7e7e;">//Serial.print("Analog reading = ");</span>
  <span style="color: #7e7e7e;">//Serial.println(ldrValue);</span>

  <span style="color: #cc6600;">if</span> (ldrValue &lt;= 512) { <span style="color: #7e7e7e;">// dark</span>
    <span style="color: #cc6600;">digitalWrite</span>(LED, <span style="color: #006699;">HIGH</span>);
  } 
  <span style="color: #cc6600;">else</span> { <span style="color: #7e7e7e;">// ldrValue &gt; 512</span>
    pirState = <span style="color: #cc6600;">digitalRead</span>(PIR);
    <span style="color: #cc6600;">if</span> (pirState == <span style="color: #006699;">HIGH</span>) {
      <span style="color: #cc6600;">digitalWrite</span>(LED, <span style="color: #006699;">HIGH</span>);
      <span style="color: #cc6600;">delay</span>(5000);
      <span style="color: #cc6600;">digitalWrite</span>(LED, <span style="color: #006699;">LOW</span>);
      <span style="color: #cc6600;">delay</span>(1000);
    } 
    <span style="color: #cc6600;">else</span> { <span style="color: #7e7e7e;">// pirState == LOW</span>
      <span style="color: #cc6600;">digitalWrite</span>(LED, <span style="color: #006699;">LOW</span>);
    }
  }
  <span style="color: #7e7e7e;">// The processing in the Arduino occurs faster</span>
  <span style="color: #7e7e7e;">// than the response from the PIR, and adding this delay</span>
  <span style="color: #7e7e7e;">// eliminated a flickering on the LED</span>
  <span style="color: #cc6600;">delay</span>(1000);
}</pre>
<p>The idea is to trigger the light when it&#8217;s dark; otherwise, trigger it for a short duration if motion is detected. This simple Arduino sketch does just that. A light dependent resistor is connected to an analog pin on the Arduino, and reading from it will either trigger the light (if it&#8217;s dark) or have the Arduino check for motion by reading from the motion sensor connected to a digital pin (if it&#8217;s not dark).</p>
<h3>And finally&#8230; a non-Arduino version!</h3>
<p>A few days and a couple of aha! moments later, I finally figured out how to accomplish the same behavior without using a microcontroller.</p>
<p>I knew an OR gate could be used to trigger the LED (output) on either (or both, doesn&#8217;t matter) condition: darkness or motion detected. The PIR outputs either 0 (no motion detected) or 1 (motion detected). But what about the light detection piece of the circuit? The LDR gives me an analog reading, and I needed a 0 or a 1 as inputs to the OR gate.</p>
<p>When later reading about transistors in Forrest Mims&#8217; &#8220;<a href="http://www.amazon.com/gp/product/0945053282/ref=as_li_ss_tl?ie=UTF8&amp;tag=mpu-proj-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0945053282" target="_blank">Getting Started in Electronics</a>&#8221; it occurred to me that I could use one as a switch on the LDR part of the circuit to generate the second input to the OR gate.</p>
<p>So I excitedly went to Marvac (my trusty local electronics shop) to buy OR gates; unfortunately, they were out of stock&#8230; <img src='http://www.theelectronicshobbyist.com/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>But then, again courtesy of Forrest Mims, I learned how to build my own OR gate using two rectifier diodes. (And I had the necessary parts!)</p>
<p>Here&#8217;s how it&#8217;s wired:</p>
<p><a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/12/or.jpg"><img class="alignnone size-medium wp-image-630" title="diode-or-gate" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/12/or-202x300.jpg" alt="Diode OR Gate" width="202" height="300" /></a></p>
<h3>Now on to the complete circuit&#8230;</h3>
<p>First I hooked up the LED to the OR circuit to test that it worked. <em>Check</em>.</p>
<p>Then I connected the PIR to the LED to make sure that it woks, i.e. LED lights up when there is motion detected. <em>Check</em>.</p>
<p>Then I connected the PIR to be the first input of the OR gate&#8230; <em>and it didn&#8217;t work</em>.</p>
<p>I hooked up the LDR as the second input to the OR gate and that part&#8230; <em>&#8220;kind of&#8221; worked</em>. (LED off when dark and on when light; should be the other way around). I had used an NPN transistor, so I just switched to a PNP instead and it worked. Makes sense!</p>
<p>This is how it was hooked up: Emitter to ground, Collector to load (the LED) and Base to LDR. The LDR was connected to a 10K <a title="Pull Up Resistors" href="http://www.theelectronicshobbyist.com/blog/pull-up-resistors/">pull-up resistor</a> and a potentiometer (to fine tune the amount of darkness it takes to trigger the LED).</p>
<p>But the PIR part of the circuit was still &#8220;kaputt&#8221;&#8230; I checked with the logic probe and found out that there was a signal coming to the LED. I replaced it with a diffused LED and could see that it was actually on, just veeeery faint.</p>
<p>Using a multimeter I measured the voltage between the LED leads and it was 2.3V. My power source was 4.92V. It seems that the PIR causes a voltage drop&#8230;</p>
<p>Then I looked at the datasheet for the Parallax PIR I have (note to self: that should definitely NOT be an afterthought), and learned that there are two versions, and that mine requires a transistor or a MOSFET to drive external loads.</p>
<p>I hooked up a random (I&#8217;m no EE!) transistor (a 2N2222) and now the LED is brighter. But still not as bright as when I cover the LDR.</p>
<p>Looking at the current values, my multimeter read:</p>
<blockquote><p>Current through the LED when the LDR portion of the circuit is active: 4.2mA<br />
Current through the LED when the PIR portion of the circuit is active: 0.8mA</p></blockquote>
<p>The only other transistors I had were 2N3904, so I decided to try that one. The LED was much brighter and the current read 2.4mA. With a base current of 0.02mA I was getting a gain of 40 with the 2N2222 and 120 with the 2N3904.</p>
<p>I checked the datasheets for these two transistors, and these gain values were consistent. After some research it seems the BC548B is a better amplifier transistor for this application, and has a minimum gain of 200.</p>
<p>Here’s what the circuit looks like on Fritzing:</p>
<p><a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/12/fritzing2.jpg"><img class="alignnone  wp-image-636" title="fritzing2" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/12/fritzing2-1024x339.jpg" alt="Fritzing diagram for motion-triggered light" width="553" height="183" /></a></p>
<p>And here’s a picture of the real thing:</p>
<p><a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/12/pic2.jpg"><img class="alignnone  wp-image-640" title="pic2" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/12/pic2.jpg" alt="Circuit for the motion-triggered light" width="576" height="432" /></a></p>
<p>By the way, I heard back from my reader; he bought the <a href="http://www.ladyada.net/make/boarduino/" target="_blank">Boarduino from Adafruit</a>, not the <a href="http://www.theelectronicshobbyist.com/blog/led-bar-graph-testing-the-ardweeny/" title="LED Bar Graph: Testing the Ardweeny">Ardweeny</a>, and successfully built his &#8220;darkness-or-motion-triggered artwork illumination&#8221; project.</p>
<p>Keep sending me your questions; I love to see what you are working on, and it helps me on my learning journey as well. (Explaining something to somebody else is the best way to learn). I will also from time to time publish some of your questions here. (If you have an electronics blog let me know and I will include it here).</p>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/motion-and-light-sensors-with-arduino-and-without/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>LED Patterns Using DIP Switch and Arduino</title>
		<link>http://www.theelectronicshobbyist.com/blog/led-patterns-using-dip-switch-and-arduino/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/led-patterns-using-dip-switch-and-arduino/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 06:00:31 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Beginner]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[DIP switch]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=533</guid>
		<description><![CDATA[When I posted the “LED Control Using DIP Switch” sketch last year (a simple setup the turned on the LED corresponding to that switch position), I also had a slightly modified version of it in which the DIP switch controlled six different light patterns on the LEDs (scroll right, left, in, out, back and forth [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>When I posted the “<a href="http://www.theelectronicshobbyist.com/blog/2010/09/arduino-led-control-using-dip-switch/">LED Control Using DIP Switch</a>” sketch last year (a simple setup the turned on the <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4215" target="_blank">LED</a> corresponding to that switch position), I also had a slightly modified version of it in which the <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4318" target="_blank">DIP switch</a> controlled six different light patterns on the LEDs (scroll right, left, in, out, back and forth and random). It presented a “cleaned-up” version of the code using <span style="font-family: 'Courier New';">for</span> loops and compared it to the “long-hand” version, showing the trade-off between ease of understanding and conciseness. Except that… I forgot to post it.</p>
<p>Last week someone contacted me asking a question about a similar project he is working on and when I wanted to refer him to this modified sketch I realized it wasn’t on the blog. (Here’s the <a href="http://www.theelectronicshobbyist.com/blog/2010/09/arduino-led-control-using-dip-switch/">original sketch</a> and <a href="http://www.theelectronicshobbyist.com/blog/2010/09/arduino-led-control-using-dip-switch-schematic/">schematic</a> for reference).<span id="more-533"></span></p>
<p>What follows below is the missing blog post (not anymore), a comparison between the more readable sketch (easier for beginners to understand) and the more concise version, in a series of snippets showing the main differences between the two versions of the sketch.</p>
<p>The concise version generates a binary sketch that occupies approximately 25% less memory and is almost half as long in lines of code. The entire source code listings are at the very bottom of this post.</p>
<p><em>Note: the line above each snippet reflects the modification that shortened the sketch.</em></p>
<p>1) not using <span style="font-family: 'Courier New';">#define</span> directives for the LED and switch pins on the <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4447" target="_blank">Arduino</a> in order to use <span style="font-family: 'Courier New';">for</span> loops:</p>
<table border="1">
<tbody>
<tr>
<td>
<pre>    } else {
     // default: off
     digitalWrite(LED1, LOW);
     digitalWrite(LED2, LOW);
     digitalWrite(LED3, LOW);
     digitalWrite(LED4, LOW);
     digitalWrite(LED5, LOW);
     digitalWrite(LED6, LOW);
   }</pre>
</td>
<td>
<pre>    } else {
     // default: off
     for (i = 13; i &gt;= 8; i--) {
       digitalWrite(i, LOW);
     }</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>2) using a state variable array (and consequently a <span style="font-family: 'Courier New';">for</span> loop) as opposed to individual state variables:</p>
<table border="1">
<tbody>
<tr>
<td>
<pre>   s1state = digitalRead(S1);
   s2state = digitalRead(S2);
   s3state = digitalRead(S3);
   s4state = digitalRead(S4);
   s5state = digitalRead(S5);
   s6state = digitalRead(S6);</pre>
</td>
<td>
<pre>   for (i = 0, j = 7; i &lt; 6, j &gt;= 2; i++, j--) {
     state[i] = digitalRead(j);
   }</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>3) <span style="font-family: 'Courier New';">if (x)</span> versus <span style="font-family: 'Courier New';">if (x == 1)</span> (when <span style="font-family: 'Courier New';">x</span> is either <span style="font-family: 'Courier New';">0</span> or <span style="font-family: 'Courier New';">1</span>, then the (<span style="font-family: 'Courier New';">x == 1)</span> expression can be written as simply (<span style="font-family: 'Courier New';">x</span>)):</p>
<table border="1">
<tbody>
<tr>
<td>
<pre>    } else if (s5state == 1) {
     // scroll back and forth</pre>
</td>
<td>
<pre>    } else if (state[4]) {
     // scroll back and forth</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>4) long, repetitive code to randomly turn on or not each LED (for a random duration up to 300 milliseconds) replaced with <span style="font-family: 'Courier New';">for</span> loop:</p>
<table border="1">
<tbody>
<tr>
<td>
<pre>    } else if (s6state == 1) {
     // random
     randomSeed(analogRead(3));
     onoroff = random(0, 2);
     millisecs = random(0, 301);
     digitalWrite(LED1, onoroff);
     delay(millisecs);
     randomSeed(analogRead(3));
     onoroff = random(0, 2);
     millisecs = random(0, 301);
     digitalWrite(LED2, onoroff);
     delay(millisecs);
     randomSeed(analogRead(3));
     onoroff = random(0, 2);
     millisecs = random(0, 301);
     digitalWrite(LED3, onoroff);
     delay(millisecs);
     randomSeed(analogRead(3));
     onoroff = random(0, 2);
     millisecs = random(0, 301);
     digitalWrite(LED4, onoroff);
     delay(millisecs);
     randomSeed(analogRead(3));
     onoroff = random(0, 2);
     millisecs = random(0, 301);
     digitalWrite(LED5, onoroff);
     delay(millisecs);
     randomSeed(analogRead(3));
     onoroff = random(0, 2);
     millisecs = random(0, 301);
     digitalWrite(LED6, onoroff);
     delay(millisecs);
   }</pre>
</td>
<td>
<pre>    } else if (state[5]) {
     // random
     for (i = 13; i &gt;= 8; i--) {
       randomSeed(analogRead(i - 8));
       onoroff = random(0, 2);
       millisecs = random(0, 301);
       digitalWrite(i, onoroff);
       delay(millisecs);
     }
   }</pre>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Here’s the full long version:</p>
<ul>
<li>Binary sketch size: 3654 bytes</li>
<li>Code size was sacrificed in order to improve readability for beginners</li>
<li>Sketch length: 205 lines</li>
</ul>
<div style="width: 500px; height: 500px; overflow: auto; border: #cccccc 1px solid; padding: 5px;">
<pre>  // www.TheElectronicsHobbyist.com/blog
  // Natalia Fargasch Norman
  // LED control via DIP switches

  // <a href="http://www.theelectronicshobbyist.com/blog/goto/uno" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/uno';return true;" onmouseout="self.status=''">Arduino</a> pins used for the LEDs
  #define LED1 13
  #define LED2 12
  #define LED3 11
  #define LED4 10
  #define LED5 9
  #define LED6 8

  // Arduino pins used for the switches
  #define S1 7
  #define S2 6
  #define S3 5
  #define S4 4
  #define S5 3
  #define S6 2

  // State of each switch (0 or 1)
  int s1state;
  int s2state;
  int s3state;
  int s4state;
  int s5state;
  int s6state;

  // Random values for LED state and delay
  long onoroff;
  long millisecs;

  void setup() {
    // pins for LEDs are outputs
    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);
    pinMode(LED3, OUTPUT);
    pinMode(LED4, OUTPUT);
    pinMode(LED5, OUTPUT);
    pinMode(LED6, OUTPUT);
    // pins for switches are inputs
    pinMode(S1, INPUT);
    pinMode(S2, INPUT);
    pinMode(S3, INPUT);
    pinMode(S4, INPUT);
    pinMode(S5, INPUT);
    pinMode(S6, INPUT);
  }

  void loop() {
    s1state = digitalRead(S1);
    s2state = digitalRead(S2);
    s3state = digitalRead(S3);
    s4state = digitalRead(S4);
    s5state = digitalRead(S5);
    s6state = digitalRead(S6);
    if (s1state == 1) {
      // scroll right
      digitalWrite(LED1, HIGH);
      delay(250);
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, HIGH);
      delay(250);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, HIGH);
      delay(250);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, HIGH);
      delay(250);
      digitalWrite(LED4, LOW);
      digitalWrite(LED5, HIGH);
      delay(250);
      digitalWrite(LED5, LOW);
      digitalWrite(LED6, HIGH);
      delay(250);
      digitalWrite(LED6, LOW);
    } else if (s2state == 1) {
      // scroll left
      digitalWrite(LED6, HIGH);
      delay(250);
      digitalWrite(LED6, LOW);
      digitalWrite(LED5, HIGH);
      delay(250);
      digitalWrite(LED5, LOW);
      digitalWrite(LED4, HIGH);
      delay(250);
      digitalWrite(LED4, LOW);
      digitalWrite(LED3, HIGH);
      delay(250);
      digitalWrite(LED3, LOW);
      digitalWrite(LED2, HIGH);
      delay(250);
      digitalWrite(LED2, LOW);
      digitalWrite(LED1, HIGH);
      delay(250);
      digitalWrite(LED1, LOW);
    } else if (s3state == 1) {
      // scroll in
      digitalWrite(LED1, HIGH);
      digitalWrite(LED6, HIGH);
      delay(250);
      digitalWrite(LED1, LOW);
      digitalWrite(LED6, LOW);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED5, HIGH);
      delay(250);
      digitalWrite(LED2, LOW);
      digitalWrite(LED5, LOW);
      digitalWrite(LED3, HIGH);
      digitalWrite(LED4, HIGH);
      delay(250);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);
    } else if (s4state == 1) {
      // scroll out
      digitalWrite(LED3, HIGH);
      digitalWrite(LED4, HIGH);
      delay(250);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED5, HIGH);
      delay(250);
      digitalWrite(LED2, LOW);
      digitalWrite(LED5, LOW);
      digitalWrite(LED1, HIGH);
      digitalWrite(LED6, HIGH);
      delay(250);
      digitalWrite(LED1, LOW);
      digitalWrite(LED6, LOW);
    } else if (s5state == 1) {
      // scroll back and forth
      digitalWrite(LED1, HIGH);
      delay(250);
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, HIGH);
      delay(250);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, HIGH);
      delay(250);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, HIGH);
      delay(250);
      digitalWrite(LED4, LOW);
      digitalWrite(LED5, HIGH);
      delay(250);
      digitalWrite(LED5, LOW);
      digitalWrite(LED6, HIGH);
      delay(250);
      digitalWrite(LED6, LOW);
      digitalWrite(LED5, HIGH);
      delay(250);
      digitalWrite(LED5, LOW);
      digitalWrite(LED4, HIGH);
      delay(250);
      digitalWrite(LED4, LOW);
      digitalWrite(LED3, HIGH);
      delay(250);
      digitalWrite(LED3, LOW);
      digitalWrite(LED2, HIGH);
      delay(250);
      digitalWrite(LED2, LOW);
    } else if (s6state == 1) {
      // random
      randomSeed(analogRead(3));
      onoroff = random(0, 2);
      millisecs = random(0, 301);
      digitalWrite(LED1, onoroff);
      delay(millisecs);
      randomSeed(analogRead(3));
      onoroff = random(0, 2);
      millisecs = random(0, 301);
      digitalWrite(LED2, onoroff);
      delay(millisecs);
      randomSeed(analogRead(3));
      onoroff = random(0, 2);
      millisecs = random(0, 301);
      digitalWrite(LED3, onoroff);
      delay(millisecs);
      randomSeed(analogRead(3));
      onoroff = random(0, 2);
      millisecs = random(0, 301);
      digitalWrite(LED4, onoroff);
      delay(millisecs);
      randomSeed(analogRead(3));
      onoroff = random(0, 2);
      millisecs = random(0, 301);
      digitalWrite(LED5, onoroff);
      delay(millisecs);
      randomSeed(analogRead(3));
      onoroff = random(0, 2);
      millisecs = random(0, 301);
      digitalWrite(LED6, onoroff);
      delay(millisecs);
    } else {
      // default: off
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, LOW);
      digitalWrite(LED5, LOW);
      digitalWrite(LED6, LOW);
    }
  }</pre>
</div>
<p>&nbsp;</p>
<p>And here’s the full &#8220;cleaned-up&#8221; version:</p>
<ul>
<li>Binary sketch size: 2826 bytes</li>
<li>Sketch length: 119 lines</li>
</ul>
<div style="width: 500px; height: 500px; overflow: auto; border: #cccccc 1px solid; padding: 5px;">
<pre>  // www.TheElectronicsHobbyist.com/blog
  // Natalia Fargasch Norman
  // LED control via DIP switches

  // Arduino pins used for the LEDs
  // LED1 13
  // LED2 12
  // LED3 11
  // LED4 10
  // LED5 9
  // LED6 8

  // Arduino pins used for the switches
  // S1 7
  // S2 6
  // S3 5
  // S4 4
  // S5 3
  // S6 2

  // State of each switch (0 or 1)
  int state[6];

  // Random values for LED state and delay
  long onoroff;
  long millisecs;

  // loop counters
  int i, j;

  // delay
  int d = 250;

  void setup() {
    // pins for LEDs are outputs
    // LEDs 1-6 on pins 13-8
    for (i = 13; i &gt;= 8; i--) {
      pinMode(i, OUTPUT);
    }
    // pins for switches are inputs
    // switches 1-6 on pins 7-2
    for (i = 7; i &gt;= 2; i--) {
      pinMode(i, INPUT);
    }
  }

  void loop() {
    for (i = 0, j = 7; i &lt; 6, j &gt;= 2; i++, j--) {
      state[i] = digitalRead(j);
    }

    if (state[0]) {
      // scroll right
      for (i = 13; i &gt;= 8; i--) {
        digitalWrite(i, HIGH);
        delay(d);
        digitalWrite(i, LOW);
      }

    } else if (state[1]) {
      // scroll left
      for (i = 8; i &lt;= 13; i++) {
         digitalWrite(i, HIGH);
         delay(d);
         digitalWrite(i, LOW);
       }

   } else if (state[2]) {
       // scroll in
       // light up LEDs on pins i and 8+(13-i)
       for (i = 13; i &gt;= 11; i--) {
        digitalWrite(i, HIGH);
        digitalWrite(21 - i, HIGH);
        delay(d);
        digitalWrite(i, LOW);
        digitalWrite(21 - i, LOW);
      }

    } else if (state[3]) {
      // scroll out
      // light up LEDs on pins i and 8+(13-i)
      for (i = 11; i &lt;= 13; i++) {
         digitalWrite(i, HIGH);
         digitalWrite(21 - i, HIGH);
         delay(d);
         digitalWrite(i, LOW);
         digitalWrite(21 - i, LOW);
       }

    } else if (state[4]) {
       // scroll back and forth
       for (i = 13; i &gt;= 8; i--) {
        digitalWrite(i, HIGH);
        delay(d);
        digitalWrite(i, LOW);
      }
      for (i = 9; i &lt;= 12; i++) {
        digitalWrite(i, HIGH);
        delay(d);
        digitalWrite(i, LOW);
      }

    } else if (state[5]) {
       // random
       for (i = 13; i &gt;= 8; i--) {
        randomSeed(analogRead(i - 8));
        onoroff = random(0, 2);
        millisecs = random(0, 301);
        digitalWrite(i, onoroff);
        delay(millisecs);
      }      

    } else {
      // default: off
      for (i = 13; i &gt;= 8; i--) {
        digitalWrite(i, LOW);
      }
    }
  }</pre>
</div>
<p>Check out the <a href="http://www.youtube.com/watch?v=fHVdCT-iZwk" target="_blank">video</a> of this sketch in action.</p>
<p>You might also enjoy:<ol>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-led-control-using-dip-switch/' rel='bookmark' title='Arduino LED Control Using DIP Switch | Part 1'>Arduino LED Control Using DIP Switch | Part 1</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-3-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 3'>Controlling a Seven-Segment Display Using Arduino Part 3</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display with Buttons | Part 4'>Arduino 2-Digit 7-Segment Display with Buttons | Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-2-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 2'>Controlling a Seven-Segment Display Using Arduino Part 2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/led-patterns-using-dip-switch-and-arduino/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Arduino Serial Display: Introducing the GLO-216 2&#215;16 Multifont Serial OLED Display</title>
		<link>http://www.theelectronicshobbyist.com/blog/arduino-serial-display-introducing-the-glo-216-2x16-multifont-serial-oled-display/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/arduino-serial-display-introducing-the-glo-216-2x16-multifont-serial-oled-display/#comments</comments>
		<pubDate>Tue, 31 May 2011 20:00:28 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[OLED]]></category>
		<category><![CDATA[OLED display]]></category>
		<category><![CDATA[sketch]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=475</guid>
		<description><![CDATA[The GLO-216 2&#215;16 Multifont Serial OLED allows you to translate 9600bps serial data into bright, high-contrast text on a compact screen. This low cost, low power serial display comes in two font colors (yellow and green) and is made and sold by seetron.com, owned by Scott Edwards of Electronics Now and Nuts &#38; Volts fame. [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://seetron.com/glo216.html" target="_blank"><img style=' float: left; padding: 4px; margin: 0 7px 2px 0;'  class="size-medium wp-image-479 alignleft" title="imglo" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/05/imglo-300x225.jpg" alt="GLO216 Serial OLED Display" width="300" height="225" /></a>The <a href="http://seetron.com/glo216.html" target="_blank">GLO-216 2&#215;16 Multifont Serial OLED</a> allows you to translate 9600bps serial data into bright, high-contrast text on a compact screen. This low cost, low power serial display comes in two font colors (yellow and green) and is made and sold by <a href="http://seetron.com" target="_blank">seetron.com</a>, owned by Scott Edwards of Electronics Now and Nuts &amp; Volts fame.</p>
<p>Think of the <a href="http://seetron.com/glo216.html" target="_blank">GLO-216</a> as a &#8220;mini terminal&#8221; that displays text and custom characters and responds to control characters such as tabs, linefeeds, carriage returns, backspace, etc. It is compatible with RS-232, Stamps, PICs and Arduino; pretty much any serial out, really.</p>
<p>The display uses less than 50mA, so it can be connected straight to the Arduino&#8217;s power supply.<span id="more-475"></span></p>
<p>The GLO-216 can store startup text and custom characters in EEPROM and there are instructions to save and recall this information. The simple sketch created to test the display creates and saves a new heart shaped custom character, then displays it on the screen along with some text.</p>
<blockquote><p>Seetron.com has set up a special offer for theelectronicshobbyist.com/blog readers: you can <strong>save 20% off a GLO-216</strong> if you use promo code &#8220;<strong>HOBBYIST</strong>&#8221; upon check out. For more information and to purchase, see the <a href="http://seetron.com/glo216.html" target="_blank">GLO-216 product page</a>.</p></blockquote>
<p style="text-align: left;">Here&#8217;s the GLO-216G just out of the box:<br />
<a href="http://seetron.com/glo216.html" target="_blank"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-480" title="glo216gfront" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/05/glo216gfront-300x225.jpg" alt="GLO216 OLED display front" width="300" height="225" /></a><br />
And here&#8217;s the view from the back, notice the small board that brings out the pins nicely to a 5-pin header and saves you some soldering work:<br />
<a href="http://seetron.com/glo216.html" target="_blank"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-481" title="glo216gback" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/05/glo216gback-300x225.jpg" alt="GLO216 OLED display back" width="300" height="225" /></a><br />
This is what it looks like when you first power it on:<br />
<a href="http://seetron.com/glo216.html" target="_blank"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-482" title="glo216gseetron" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/05/glo216gseetron-300x225.jpg" alt="GLO216 Serial OLED Display by seetron" width="300" height="225" /></a><br />
And here&#8217;s the result of running the sketch I included in this post, that defines and prints a custom character:<br />
<a href="http://seetron.com/glo216.html" target="_blank"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-483" title="higlo" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2011/05/higlo-300x225.jpg" alt="GLO216 Serial OLED Display custom character" width="300" height="225" /></a></p>
<p>The sketch to drive the display uses the &#8220;newsoftserial&#8221; library, which can be found here: <a href="http://arduiniana.org/libraries/newsoftserial" target="_blank">http://arduiniana.org/libraries/newsoftserial</a></p>
<p>A few nice features of the newsoftserial library compared to the original softserial are more accurate timing, smaller code size, but best of all the ability to output &#8220;inverted&#8221; serial (the <a href="http://www.theelectronicshobbyist.com/blog/goto/uno" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/uno';return true;" onmouseout="self.status=''">Arduino</a> documentation states that their serial output is not RS-232 compatible, but newsoftserial permits the <a href="http://www.theelectronicshobbyist.com/blog/goto/uno">Arduino</a> to output inverted serial).</p>
<p>Sketch:</p>
<div style="width: 550px; height: 500px; overflow: auto; padding: 5px; border: 1px solid #CCCCCC;">
<pre>// Test of the GLO-216G serial OLED display
// Natalia Fargasch Norman @ theelectronicshobbyist.com/blog

// GLO-216Y/G information: http://www.seetron.com/glo216.html
// Programming reference: http://seetron.com/glo216/glo216prog.html

#include &lt;SoftwareSerial.h&gt;
#include &lt;GLO216.h&gt;

#define rxPin 255
#define txPin 3
#define NULL 0x00

int inverted = 1;

SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin, inverted);

void setup() {
  pinMode(txPin, OUTPUT);
  digitalWrite(txPin, LOW);
  mySerial.begin(9600);
  delay(10);

  // clears the screen and select font size and style
  char instr1[] = {
    clearScreen(),
    defaultSize(),
    selectSize(), // tall
    selectSize(), // wide
    selectSize(), // big
    textStyle(),
    NULL
  };
  const char message[] = "Hi GLO!";
  mySerial.print(instr1);
  // print message according to prior instructions
  mySerial.print(message);

  // defines a new custom heart shaped character
  char instr2[] = {
    // escape sequence to receive new custom character
    escape(),'D','0',
    // heart pattern using tool at http://seetron.com/apps/app_cceditor.html
    0x80,0x8A,0x95,0x91,0x8A,0x84,0x80,0x80,
    NULL
  };
  // print character 0x80, the newly defined heart
  const char msg[] = {0x80, NULL};
  mySerial.print(instr2);
  // print message according to prior instructions
  mySerial.print(msg);

/*  delay(3000);

  char instr3[] = {
    clearScreen(),
    NULL
  };
  mySerial.print(instr3);*/
}

void loop() {
  // ...
}</pre>
</div>
<p>GLO216 functions:</p>
<div style="width: 550px; height: 500px; overflow: auto; padding: 5px; border: 1px solid #CCCCCC;">
<pre>// GLO-216G serial OLED display
// Natalia Fargasch Norman @ theelectronicshobbyist.com/blog

// GLO-216Y/G information: http://www.seetron.com/glo216.html
// Programming reference: http://seetron.com/glo216/glo216prog.html

/*
Parameters for setPosition and rightAlign instructions:
setPosition: position + 0x40
rightAlign: '0'-'7'
*/

/*
Parameters for escape instructions:
Define lower custom character: 'D', '0'-'7'
Define upper custom character: 'd', '0'-'7'
Recall saved text: 'E', '0'
Restore custom character set: 'e', '0'
Save text since last clearScreen: 'X', '0'
Store custom character set: 'x', '0'
*/

// Moves printing position to the first character of top line
char homeCursor() {
  return 0x01;
}

// Cycles the font size: normal -&gt; tall -&gt; wide -&gt; big -&gt; normal -&gt; ...
char selectSize() {
  return 0x02;
}

// Sets font size to default of small on two lines of 16 characters
char defaultSize() {
  return 0x03;
}

// Behaves like the backspace key
char backspace() {
  return 0x08;
}

// Moves printing position to the next multiple of 4 location
char tab() {
  return 0x09;
}

// Moves the printing position down a line
char linefeed() {
  return 0x0A;
}

// Moves the printing position up a line
char verticalTab() {
  return 0x0B;
}

// Clears the screen and moves printing position to 0
char clearScreen() {
  return 0x0C;
}

// Moves to the first printing position of the next line
char carriageReturn() {
  return 0x0D;
}

// Turns on the OLED driver circuitry when it has been previously turned off
char turnOn() {
  return 0x0E;
}

// Turns off the OLED driver circuitry to save power
char turnOff() {
  return 0x0F;
}

// Sets the printing position according to value of next byte
char setPosition() {
  return 0x10;
}

// Prints text at the righthand end of a field of defined size from 2-8
char rightAlign() {
  return 0x12;
}

// Sets seven segment style font for large characters
char sevenSeg() {
  return 0x13;
}

// Sets text style font for large characters
char textStyle() {
  return 0x14;
}

// Begin multi-part instruction
char escape() {
  return 0x1B;
}

// See http://seetron.com/glo216/bpigloupgg.html
char bpkInstr() {
  return 0xFE;
}</pre>
</div>
<p>Header file:</p>
<div style="width: 550px; height: 200px; overflow: auto; padding: 5px; border: 1px solid #CCCCCC;">
<pre>// GLO-216G serial OLED display
// Natalia Fargasch Norman @ theelectronicshobbyist.com/blog

// GLO-216Y/G information: http://www.seetron.com/glo216.html
// Programming reference: http://seetron.com/glo216/glo216prog.html

#ifndef GLO216_h
#define GLO216_h

// Moves printing position to the first character of top line
char homeCursor();

// Cycles the font size: normal -&gt; tall -&gt; wide -&gt; big -&gt; normal -&gt; ...
char selectSize();

// Sets font size to default of small on two lines of 16 characters
char defaultSize();

// Behaves like the backspace key
char backspace();

// Moves printing position to the next multiple of 4 location
char tab();

// Moves the printing position down a line
char linefeed();

// Moves the printing position up a line
char verticalTab();

// Clears the screen and moves printing position to 0
char clearScreen();

// Moves to the first printing position of the next line
char carriageReturn();

// Turns on the OLED driver circuitry when it has been previously turned off
char turnOn();

// Turns off the OLED driver circuitry to save power
char turnOff();

// Sets the printing position according to value of next byte
char setPosition();

// Prints text at the righthand end of a field of defined size from 2-8
char rightAlign();

// Sets seven segment style font for large characters
char sevenSeg();

// Sets text style font for large characters
char textStyle();

// Begin multi-part instruction
char escape();

// See http://seetron.com/glo216/bpigloupgg.html
char bpkInstr();

#endif</pre>
</div>
<p>Keywords file:</p>
<div style="width: 550px; height: 200px; overflow: auto; padding: 5px; border: 1px solid #CCCCCC;">
<pre>#######################################
# Syntax Coloring Map for GLO216
#######################################

#######################################
# Datatypes (KEYWORD1)
#######################################

GLO216	KEYWORD1

#######################################
# Methods and Functions (KEYWORD2)
#######################################

homeCursor	KEYWORD2
selectSize	KEYWORD2
defaultSize	KEYWORD2
backspace	KEYWORD2
tab	KEYWORD2
linefeed	KEYWORD2
verticalTab	KEYWORD2
clearScreen	KEYWORD2
carriageReturn	KEYWORD2
turnOn	KEYWORD2
turnOff	KEYWORD2
setPosition	KEYWORD2
rightAlign	KEYWORD2
sevenSeg	KEYWORD2
textStyle	KEYWORD2
escape	KEYWORD2
bpkInstr	KEYWORD2

#######################################
# Constants (LITERAL1)
#######################################</pre>
</div>
<p>Download these four files in an archive here: <a href="http://www.theelectronicshobbyist.com/docs/GLO216.zip" target="_blank">GLO216.zip</a></p>
<p>You might also enjoy:<ol>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-serial-communication/' rel='bookmark' title='Arduino Serial Communication'>Arduino Serial Communication</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/led-patterns-using-dip-switch-and-arduino/' rel='bookmark' title='LED Patterns Using DIP Switch and Arduino'>LED Patterns Using DIP Switch and Arduino</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-3-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 3'>Controlling a Seven-Segment Display Using Arduino Part 3</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-2-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 2'>Controlling a Seven-Segment Display Using Arduino Part 2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/arduino-serial-display-introducing-the-glo-216-2x16-multifont-serial-oled-display/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LED Bar Graph: Testing the Ardweeny</title>
		<link>http://www.theelectronicshobbyist.com/blog/led-bar-graph-testing-the-ardweeny/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/led-bar-graph-testing-the-ardweeny/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 01:00:25 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Arduino Clone]]></category>
		<category><![CDATA[Kit]]></category>
		<category><![CDATA[Ardweeny]]></category>
		<category><![CDATA[circuit]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[kit]]></category>
		<category><![CDATA[LED bar graph]]></category>
		<category><![CDATA[schematic]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[soldering]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=409</guid>
		<description><![CDATA[A while ago I purchased an Ardweeny kit, but hadn&#8217;t put it together and tested it until now. The Ardweeny is a small, breadboard friendly Arduino clone. In fact, it is the smallest Arduino clone that I know of, and the tiny board is backpacked on top of the ATMega chip. Here are the parts [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>A while ago I purchased an <a href="http://www.theelectronicshobbyist.com/blog/goto/ardweeny">Ardweeny kit</a>, but hadn&#8217;t put it together and tested it until now. The <a href="http://www.theelectronicshobbyist.com/blog/goto/ardweeny" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/ardweeny';return true;" onmouseout="self.status=''">Ardweeny</a> is a small, <a href="http://www.theelectronicshobbyist.com/blog/goto/breadboard" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/breadboard';return true;" onmouseout="self.status=''">breadboard</a> friendly <a href="http://www.theelectronicshobbyist.com/blog/goto/uno" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/uno';return true;" onmouseout="self.status=''">Arduino</a> clone. In fact, it is the smallest Arduino clone that I know of, and the tiny board is backpacked on top of the ATMega chip.<br />
<a href="http://www.theelectronicshobbyist.com/blog/goto/ardweeny" target="_blank"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="size-medium wp-image-410 aligncenter" title="ardweeny" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/11/ardweeny-300x196.jpg" alt="Ardweeny" width="300" height="196" /></a><br />
Here are the parts laid out before I put the Ardweeny together: PCB, ATMega, headers and 7 parts. <em>Tip: double check that you received the correct parts; I received a 470K Ohm resistor (yellow-violet-yellow) instead of a 470 Ohm (yellow-violet-brown) one.</em><br />
<span id="more-409"></span><a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/11/ardweeny-parts.jpg"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-430" title="ardweeny-parts" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/11/ardweeny-parts-300x200.jpg" alt="Ardweeny parts" width="300" height="200" /></a><br />
The assembly manual that comes with the Ardweeny is illustrated in color, and explains how to put it together in great detail, step-by-step. It is a very easy kit to put together, perfect for a beginner. There isn&#8217;t a lot of soldering involved, either. (There are only 7 parts after all!)<br />
<a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/11/ardweeny-manual.jpg"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-431" title="ardweeny-manual" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/11/ardweeny-manual-300x234.jpg" alt="Ardweeny manual" width="300" height="234" /></a><br />
Here is the final product, assembled and ready to go! Isn&#8217;t it tiny? The <a href="http://www.theelectronicshobbyist.com/blog/goto/ardweeny">Ardweeny</a> comes preloaded with the &#8220;Blink&#8221; sketch. In order to program it you will need an <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4414&amp;affiliate_banner_id=1" target="_blank">FTDI breakout board</a> and <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4191&amp;affiliate_banner_id=1" target="_blank">USB miniB cable</a>. Upon hooking it up for the first time the green LED should blink.<br />
<a href="http://www.theelectronicshobbyist.com/blog/goto/ardweeny" target="_blank"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-432" title="ardweeny-finished" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/11/ardweeny-finished-300x261.jpg" alt="Ardweeny" width="300" height="261" /></a><br />
To test it I put together a simple circuit connecting a LED bar graph display and a variable resistor to the Ardweeny. Turning the dial on the trimpot lights the LEDs on the bar graph display accordingly. Here&#8217;s the setup:<br />
<a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/11/ardweeny-led-bar.jpg"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-433" title="ardweeny-led-bar" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/11/ardweeny-led-bar-300x243.jpg" alt="Ardweeny LED bar graph project" width="300" height="243" /></a><br />
Here&#8217;s the schematic showing how the circuit was wired:<br />
<a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/11/ardweeny-schematic.jpg"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-435" title="ardweeny-schematic" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/11/ardweeny-schematic-258x300.jpg" alt="Ardweeny LED bar graph schematic" width="258" height="300" /></a><br />
Here&#8217;s a quick <a href="http://www.youtube.com/watch?v=u2ZY6b3FGxg" target="_blank">video</a> of the Ardweeny in action.</p>
<p>And here&#8217;s the sketch:</p>
<pre>// www.TheElectronicsHobbyist.com/blog
// Natalia Fargasch Norman
// Trimpot display using LED bar graph

// loop variables and trimpot reading
int i, j, val;

void setup() {
  for (i = 0; i &lt; 10; i++) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  for (i = 0; i &lt; 10; i++) {
    digitalWrite(i, HIGH);
  }
  // trimpot connected to analog pin 0
  val = analogRead(0);
  // analogRead returns number
  // between 0 and 1023, scaling
  // for the 10 LEDs in the bar graph
  j = val / 100;
  for (i = 0; i &lt; j; i++) {
    // LED bar graph is common anode, LOW is on
    digitalWrite(i, LOW);
  }
}</pre>
<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/led-bar-graph-testing-the-ardweeny/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Arduino 2-Digit 7-Segment Display with Buttons: Sketch &#124; Part 5</title>
		<link>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons-sketch/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons-sketch/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 05:00:26 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[7-segment display]]></category>
		<category><![CDATA[button]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[sketch]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=280</guid>
		<description><![CDATA[As you could see from last week&#8217;s full Arduino sketch listing, the source code for the 2-digit 7-segment display project using buttons is strikingly similar to the one without the buttons; praise for &#8216;copy and paste&#8216;! (It is worth noting, though, that &#8216;copy and paste&#8216; can be responsible for a higher percentage of bugs than [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>As you could see from last week&#8217;s full <a href="http://www.cutedigi.com/product_info.php?ref=3&#038;products_id=4221&#038;affiliate_banner_id=1" target="_blank">Arduino</a> sketch listing, the source code for the 2-digit 7-segment display project using buttons is strikingly similar to the one without the buttons; praise for &#8216;<em>copy and paste</em>&#8216;! (It is worth noting, though, that &#8216;<em>copy and paste</em>&#8216; can be responsible for a higher percentage of bugs than I&#8217;d care to admit).</p>
<p>There are just a couple of snippets that I would like to comment on:</p>
<p>The first part of the loop() function checks whether either button has been pressed and increments the value of each digit.<br />
<span id="more-280"></span></p>
<pre>  // check button1
  int val1 = digitalRead(BTN1);
  if (val1 == HIGH) {
    digit1++;
    digit1 %= 10;
    delay(10);
  }

  // check button2
  int val2 = digitalRead(BTN2);
  if (val2 == HIGH) {
    digit2++;
    digit2 %= 10;
    delay(10);
  }</pre>
<p>The line</p>
<pre>    digit1 %= 10;</pre>
<p>which is shorthand for</p>
<pre>    digit1 = digit1 % 10;</pre>
<p>accomplishes the same as the line</p>
<pre>    if (count == 10) count = 0;</pre>
<p>that was used on the <a href="http://www.theelectronicshobbyist.com/blog/2010/02/controlling-a-seven-segment-display-using-arduino-part-4-of-4/">sketch for the single-digit 7-segment project</a> a couple of months ago. It updates digit1 with the remainder of the division of itself by 10, which will be zero when digit1 is 10. The latter code looks a bit more obvious for beginner programmers.</p>
<p>The last part of the loop() function refreshes the display, and is very similar to the <a href="http://www.theelectronicshobbyist.com/blog/2010/06/arduino-2-digit-7-segment-display-counter-sketch/">sketch for the 2-digit 7-segment display counter</a>.</p>
<pre>  // display number
  unsigned long startTime = millis();
  for (unsigned long elapsed=0; elapsed &lt; 600; elapsed = millis() - startTime) {
    lightDigit1(numbers[digit1]);
    delay(5);
    lightDigit2(numbers[digit2]);
    delay(5);
  }</pre>
<p>You might also enjoy:<ol>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter-sketch/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display Counter: Sketch | Part 3'>Arduino 2-Digit 7-Segment Display Counter: Sketch | Part 3</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display with Buttons | Part 4'>Arduino 2-Digit 7-Segment Display with Buttons | Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display Counter | Part 1'>Arduino 2-Digit 7-Segment Display Counter | Part 1</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter-circuit/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display Counter: Circuit | Part 2'>Arduino 2-Digit 7-Segment Display Counter: Circuit | Part 2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons-sketch/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Arduino 2-Digit 7-Segment Display with Buttons &#124; Part 4</title>
		<link>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 05:00:42 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[7-segment display]]></category>
		<category><![CDATA[button]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=267</guid>
		<description><![CDATA[This week we modify the original circuit and sketch to include two buttons, one to control each digit of the display. Here&#8217;s what the setup looks like: And here&#8217;s the complete sketch: // www.TheElectronicsHobbyist.com/blog // Natalia Fargasch Norman // Dual seven-segment LED Display with buttons // Common Anode digit 1 pin 10 // Common Anode [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>This week we modify the original circuit and sketch to include two buttons, one to control each digit of the display.</p>
<p>Here&#8217;s what the setup looks like:</p>
<p><a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/06/seven-segment-button.jpg"><img style=' display: block; margin-right: auto; margin-left: auto;'  class="aligncenter size-medium wp-image-268" title="seven-segment-button" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/06/seven-segment-button-300x216.jpg" alt="2-Digit 7-Segment Display" width="300" height="216" /></a></p>
<p>And here&#8217;s the complete sketch:<br />
<span id="more-267"></span></p>
<pre>// www.TheElectronicsHobbyist.com/blog
// Natalia Fargasch Norman
// Dual seven-segment LED Display with buttons
// Common Anode digit 1 pin 10
// Common Anode digit 2 pin 5

//       CA1 G  F  A  B
//        |  |  |  |  |      -&gt; pins and segments they control
//   ---------    ---------
//   |   A   |    |   A   |
//  F|       |B  F|       |B
//   |---G---|    |---G---|
//  E|       |C  E|       |C
//   |   D   |    |   D   |
//   ---------    ---------
//        |  |  |  |  |      -&gt; pins and segments they control
//        D  DP E  C CA2         

// Segments that make each number when lit:
// 0 =&gt; -FEDCBA
// 1 =&gt; ----BC-
// 2 =&gt; G-ED-BA
// 3 =&gt; G--DCBA
// 4 =&gt; GF--CB-
// 5 =&gt; GF-DC-A
// 6 =&gt; GFEDC-A
// 7 =&gt; ----CBA
// 8 =&gt; GFEDCBA
// 9 =&gt; GF-DCBA

// Arduino digital pins used to light up
// corresponding segments on the LED display
#define A 3
#define B 2
#define C 6
#define D 8
#define E 7
#define F 4
#define G 5

// Pushbuttons connected to pins 9 and 10
#define BTN1 9
#define BTN2 10

// Pins driving common anodes
#define CA1 13
#define CA2 12

// Pins for A B C D E F G, in sequence
const int segs[7] = { A, B, C, D, E, F, G };

// Segments that make each number
const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,
0b0000010, 0b1111000, 0b0000000, 0b0010000 };

int digit1 = 0;
int digit2 = 0;

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BTN1, INPUT);
  pinMode(BTN2, INPUT);
  pinMode(CA1, OUTPUT);
  pinMode(CA2, OUTPUT);
}

void loop() {

  // check button1
  int val1 = digitalRead(BTN1);
  if (val1 == HIGH) {
    digit1++;
    digit1 %= 10;
    delay(10);
  }

  // check button2
  int val2 = digitalRead(BTN2);
  if (val2 == HIGH) {
    digit2++;
    digit2 %= 10;
    delay(10);
  }

  // display number
  unsigned long startTime = millis();
  for (unsigned long elapsed=0; elapsed &lt; 600; elapsed = millis() - startTime) {
    lightDigit1(numbers[digit1]);
    delay(5);
    lightDigit2(numbers[digit2]);
    delay(5);
  }
}

void lightDigit1(byte number) {
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, HIGH);
  lightSegments(number);
}

void lightDigit2(byte number) {
  digitalWrite(CA1, HIGH);
  digitalWrite(CA2, LOW);
  lightSegments(number);
}

void lightSegments(byte number) {
  for (int i = 0; i &lt; 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }
}</pre>
<p>Here&#8217;s a video of the <a href="http://www.theelectronicshobbyist.com/blog/goto/uno" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/uno';return true;" onmouseout="self.status=''">Arduino</a> <a href="http://www.youtube.com/watch?v=NgssVuNDYgw" target="_blank">2-digit 7-segment display counter with buttons</a> in action.</p>
<p>You might also enjoy:<ol>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-3-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 3'>Controlling a Seven-Segment Display Using Arduino Part 3</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display Counter | Part 1'>Arduino 2-Digit 7-Segment Display Counter | Part 1</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-4-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 4'>Controlling a Seven-Segment Display Using Arduino Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons-sketch/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display with Buttons: Sketch | Part 5'>Arduino 2-Digit 7-Segment Display with Buttons: Sketch | Part 5</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arduino 2-Digit 7-Segment Display Counter: Sketch &#124; Part 3</title>
		<link>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter-sketch/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter-sketch/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 05:00:54 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[7-segment display]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[common anode]]></category>
		<category><![CDATA[sketch]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=207</guid>
		<description><![CDATA[This is part 3 in the project to control a 2-digit 7-segment display using an Arduino. Here is the first post on this 2-digit 7-segment display project. So now on the the meatier sections of the sketch for this project: Common anode displays are not immediately obvious as a segment is lit when the corresponding [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>This is part 3 in the project to control a 2-digit 7-segment display using an <a href="http://www.theelectronicshobbyist.com/blog/goto/uno" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/uno';return true;" onmouseout="self.status=''">Arduino</a>. Here is the <a href="http://www.theelectronicshobbyist.com/blog/2010/06/arduino-2-digit-7-segment-display-counter">first post on this 2-digit 7-segment display project</a>.</p>
<p>So now on the the meatier sections of the sketch for this project:</p>
<p>Common anode displays are not immediately obvious as a segment is lit when the corresponding pin is made LOW. You might  be surprised, though, that common anode displays are most often used because they can be used with 74xx series logic data-selector chips and PNP bipolar transistors.<br />
<span id="more-207"></span></p>
<pre>// Segments that make each number when lit:
// 0 =&gt; -FEDCBA
// 1 =&gt; ----BC-
// 2 =&gt; G-ED-BA
// 3 =&gt; G--DCBA
// 4 =&gt; GF--CB-
// 5 =&gt; GF-DC-A
// 6 =&gt; GFEDC-A
// 7 =&gt; ----CBA
// 8 =&gt; GFEDCBA
// 9 =&gt; GF-DCBA</pre>
<p>Remember, the Arduino pins are connected to the display&#8217;s cathodes. To light a segment we make the corresponding pin LOW.</p>
<p>We use 0s where the segments need to be lit up. The digit &#8216;zero&#8217;, for instance, is not the intuitive 0b0111111, but the less obvious 0b1000000.</p>
<pre>// Segments that make each number
const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,
0b0000010, 0b1111000, 0b0000000, 0b0010000 };</pre>
<p>To give the impression that both displays are active at the same time and avoid flickering we cycle through the digits in quick succession and keep each of them lit for 5ms. This is implemented by adding a short delay after displaying each digit. Since numbers stay lit for 600 ms, the whole process is repeated 60 times for each number displayed, and thanks to Persistence of Vision (POV) we have the impressios that both digits are actually lit up at the same time. (Even though they are not).</p>
<p>The loop below is where the action takes place in our sketch: we cycle through both digits keeping each on for 5ms at a time for the 600ms during which we display each complete number.</p>
<pre>void loop() {
  for (int digit1=0; digit1 &lt; 10; digit1++) {
    for (int digit2=0; digit2 &lt; 10; digit2++) {
      unsigned long startTime = millis();
      for (unsigned long elapsed=0; elapsed &lt; 600; elapsed = millis() - startTime) {
        lightDigit1(numbers[digit1]);
        delay(5);
        lightDigit2(numbers[digit2]);
        delay(5);
      }
    }
  }
}</pre>
<p>The lightDigit function for digit 1 enables only the transistor for the common anode pin of the tens digit:</p>
<pre>void lightDigit1(byte number) {
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, HIGH);
  lightSegments(number);
}</pre>
<p>The lightDigit function for digit 2 enables only the transistor for the common anode pin of the units digit:</p>
<pre>void lightDigit2(byte number) {
  digitalWrite(CA1, HIGH);
  digitalWrite(CA2, LOW);
  lightSegments(number);
}</pre>
<p>Function lightSegments was reused from the <a href="http://www.theelectronicshobbyist.com/blog/2010/02/controlling-a-seven-segment-display-using-arduino-part-1-of-4/">single-digit 7-segment sketch</a>:</p>
<pre>void lightSegments(byte number) {
  for (int i = 0; i &lt; 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }
}</pre>
<p>Next week we will modify our project to use buttons to control each digit, and as such we&#8217;ll avoid having to cycle through several numbers in order to achieve the desired number being displayed (if that number is significantly greater than the current number being displayed).</p>
<p>You might also enjoy:<ol>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons-sketch/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display with Buttons: Sketch | Part 5'>Arduino 2-Digit 7-Segment Display with Buttons: Sketch | Part 5</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display Counter | Part 1'>Arduino 2-Digit 7-Segment Display Counter | Part 1</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display with Buttons | Part 4'>Arduino 2-Digit 7-Segment Display with Buttons | Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter-circuit/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display Counter: Circuit | Part 2'>Arduino 2-Digit 7-Segment Display Counter: Circuit | Part 2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter-sketch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Arduino 2-Digit 7-Segment Display Counter &#124; Part 1</title>
		<link>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 05:00:28 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[7-segment display]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[LED]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=185</guid>
		<description><![CDATA[This month&#8217;s Arduino project is to build two 2-digit 7-segment LED display circuits and sketches, one that counts up and one that counts up using mini push buttons. The next posts will explain the circuits and the Arduino sketches. (Here&#8217;s a simpler, 1-digit 7-segment display using Arduino). Materials: Arduino Duemilanove (or Uno) 1 2-digit 7-segment display [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/05/2-digit-display.jpg"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright size-medium wp-image-186" title="2-digit-display" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/05/2-digit-display-217x300.jpg" alt="2-digit 7-segment display" width="174" height="240" /></a>This month&#8217;s <a href="http://www.theelectronicshobbyist.com/blog/goto/uno" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/uno';return true;" onmouseout="self.status=''">Arduino</a> project is to build two 2-digit 7-segment LED display circuits and sketches, one that counts up and one that counts up using mini push buttons. The next posts will explain the circuits and the Arduino sketches. (Here&#8217;s a simpler, <a href="http://www.theelectronicshobbyist.com/blog/2010/02/controlling-a-seven-segment-display-using-arduino-part-1-of-4/">1-digit 7-segment display using Arduino</a>).</p>
<p>Materials:</p>
<ul>
<li><a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4221&amp;affiliate_banner_id=1" target="_blank">Arduino Duemilanove</a> (or <a href="http://www.theelectronicshobbyist.com/blog/goto/uno">Uno</a>)</li>
<li>1 <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=https%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProduct_10001_10001_1955781_-1">2-digit 7-segment display<img style="border: none !important; margin: 0px !important;" src="http://www.avantlink.com/tpv/10609/0/17253/21273/-/cl/image.png" alt="" width="0" height="0" /></a> (I got a <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProduct_10001_10001_18201_-1" target="_blank">50-piece LED display grab bag<img style="border: none !important; margin: 0px !important;" src="http://www.avantlink.com/tpv/10609/0/17253/21273/-/cl/image.png" alt="" width="0" height="0" /></a> for better value; the one I used was configured as shown)</li>
<li>2 <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4211&amp;affiliate_banner_id=1" target="_blank">Mini push button switches</a></li>
<li>9 <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4373&amp;affiliate_banner_id=1" target="_blank">Resistors, 100 Ohm</a></li>
<li>2 <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4383&amp;affiliate_banner_id=1" target="_blank">Resistors, 10K Ohm</a></li>
<li><a href="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/05/seven-segment-count.jpg"><img style=' float: right; padding: 4px; margin: 0 0 2px 7px;'  class="alignright size-medium wp-image-187" title="seven-segment-count" src="http://www.theelectronicshobbyist.com/blog/wp-content/uploads/2010/05/seven-segment-count-300x225.jpg" alt="2-digit 7-segment display project on breadboard" width="300" height="225" /></a>2 <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProduct_10001_10001_38375_-1">2N3906 transistors (PNP)<img style="border: none !important; margin: 0px !important;" src="http://www.avantlink.com/tpv/10609/0/17253/21273/-/cl/image.png" alt="" width="0" height="0" /></a></li>
<li>1 <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProduct_10001_10001_194299_-1">Solderless breadboard<img style="border: none !important; margin: 0px !important;" src="http://www.avantlink.com/tpv/10609/0/17253/21273/-/cl/image.png" alt="" width="0" height="0" /></a></li>
<li><a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4242&amp;affiliate_banner_id=1" target="_blank">Jumper Wires</a> in assorted lengths</li>
</ul>
<p>Sketch for counting up without buttons:<br />
<span id="more-185"></span></p>
<pre>// www.TheElectronicsHobbyist.com/blog
// Natalia Fargasch Norman
// Dual seven-segment LED Display
// Common Anode digit 1 pin 10
// Common Anode digit 2 pin 5

//       CA1 G  F  A  B
//        |  |  |  |  |      -&gt; pins and segments they control
//   ---------    ---------
//   |   A   |    |   A   |
//  F|       |B  F|       |B
//   |---G---|    |---G---|
//  E|       |C  E|       |C
//   |   D   |    |   D   |
//   ---------    ---------
//        |  |  |  |  |      -&gt; pins and segments they control
//        D  DP E  C CA2         

// Segments that make each number when lit:
// 0 =&gt; -FEDCBA
// 1 =&gt; ----BC-
// 2 =&gt; G-ED-BA
// 3 =&gt; G--DCBA
// 4 =&gt; GF--CB-
// 5 =&gt; GF-DC-A
// 6 =&gt; GFEDC-A
// 7 =&gt; ----CBA
// 8 =&gt; GFEDCBA
// 9 =&gt; GF-DCBA

// Arduino digital pins used to light up
// corresponding segments on the LED display
#define A 3
#define B 2
#define C 6
#define D 8
#define E 7
#define F 4
#define G 5

// Pins driving common anodes
#define CA1 13
#define CA2 12

// Pins for A B C D E F G, in sequence
const int segs[7] = { A, B, C, D, E, F, G };

// Segments that make each number
const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,
0b0000010, 0b1111000, 0b0000000, 0b0010000 };

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(CA1, OUTPUT);
  pinMode(CA2, OUTPUT);
}

void loop() {
  for (int digit1=0; digit1 &lt; 10; digit1++) {
    for (int digit2=0; digit2 &lt; 10; digit2++) {
      unsigned long startTime = millis();
      for (unsigned long elapsed=0; elapsed &lt; 600; elapsed = millis() - startTime) {
        lightDigit1(numbers[digit1]);
        delay(5);
        lightDigit2(numbers[digit2]);
        delay(5);
      }
    }
  }
}

void lightDigit1(byte number) {
  digitalWrite(CA1, LOW);
  digitalWrite(CA2, HIGH);
  lightSegments(number);
}

void lightDigit2(byte number) {
  digitalWrite(CA1, HIGH);
  digitalWrite(CA2, LOW);
  lightSegments(number);
}

void lightSegments(byte number) {
  for (int i = 0; i &lt; 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }
}</pre>
<p>Here&#8217;s a video of the <a href="http://www.youtube.com/watch?v=bEE9ouaXEbU" target="_blank">2-digit 7-segment display counter in action</a>.</p>
<p>You might also enjoy:<ol>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display with Buttons | Part 4'>Arduino 2-Digit 7-Segment Display with Buttons | Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-4-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 4'>Controlling a Seven-Segment Display Using Arduino Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter-sketch/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display Counter: Sketch | Part 3'>Arduino 2-Digit 7-Segment Display Counter: Sketch | Part 3</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-3-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 3'>Controlling a Seven-Segment Display Using Arduino Part 3</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Controlling a Seven-Segment Display Using Arduino Part 4</title>
		<link>http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-4-of-4/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-4-of-4/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 07:00:19 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[7-segment display]]></category>
		<category><![CDATA[bits]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[LED]]></category>
		<category><![CDATA[pins]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=21</guid>
		<description><![CDATA[The third and final Arduino sketch uses bits to represent each segment and is a reduced code version of the previous sketch (1,210 bytes for sketch #3 instead of 1,852 bytes for sketch #2). A ten element array holds a byte for each number 0-9 that specifies what segments should be lit (pin low). Bit [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>The third and final <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4221&amp;affiliate_banner_id=1" target="_blank">Arduino</a> sketch uses bits to represent each segment and is a reduced code version of the previous sketch (1,210 bytes for sketch #3 instead of 1,852 bytes for sketch #2). A ten element array holds a byte for each number 0-9 that specifies what segments should be lit (pin low). Bit 0 corresponds to segment A, bit 1 to segment B and so on. In order to display the number 1, segments B and C need to be lit, so that is represented by the value 0b1111001. Function &#8220;lightSegments&#8221; reads these bits in sequence and sets the corresponding segments accordingly.</p>
<p><span id="more-21"></span></p>
<p>Sketch #3:</p>
<pre>
// www.TheElectronicsHobbyist.com/blog
// Natalia Fargasch Norman
// Seven-segment LED Display
// Common Anode pins 3 and 8

//   G F + A B
//   | | | | |   -&gt; pins and segments they control
//   ---------
//  F|   A   |B
//   |---G---|   -&gt; segments
//  E|   D   |C
//   ---------
//   | | | | |   -&gt; pins and segments they control
//   E D + C DP

// Segments that make each number when lit:
// 0 =&gt; -FEDCBA
// 1 =&gt; ----BC-
// 2 =&gt; G-ED-BA
// 3 =&gt; G--DCBA
// 4 =&gt; GF--CB-
// 5 =&gt; GF-DC-A
// 6 =&gt; GFEDC-A
// 7 =&gt; ----CBA
// 8 =&gt; GFEDCBA
// 9 =&gt; GF-DCBA

// <a href="http://www.theelectronicshobbyist.com/blog/goto/uno" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/uno';return true;" onmouseout="self.status=''">Arduino</a> digital pins used to light up
// corresponding segments on the LED display
#define A 2
#define B 3
#define C 4
#define D 5
#define E 6
#define F 7
#define G 8

// Pushbutton connected to pin 9
#define BUTTON 9

int count = 0; // current display count

const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,
0b0000010, 0b1111000, 0b0000000, 0b0010000 };

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BUTTON, INPUT);
  lightSegments(0b1000000);
}

void loop() {
  int val = digitalRead(BUTTON);
  if (val == HIGH) {
    count++;
    if (count == 10) count = 0;
    delay(200);
    lightSegments(numbers[count]);
  }
}

void lightSegments(byte number) {
  for (int i = 0; i &lt; 7; i++) {
    int bit = bitRead(number, i);
    // segments connected to Arduino pins 2-8
    digitalWrite(i+2, bit);
  }
}</pre>
<p>Watch <a href="http://www.youtube.com/watch?v=oL84Wo9PNYs" target="_blank">a short video</a> of this project in action.</p>
<p>You might also enjoy:<ol>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-3-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 3'>Controlling a Seven-Segment Display Using Arduino Part 3</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display with Buttons | Part 4'>Arduino 2-Digit 7-Segment Display with Buttons | Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display Counter | Part 1'>Arduino 2-Digit 7-Segment Display Counter | Part 1</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-2-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 2'>Controlling a Seven-Segment Display Using Arduino Part 2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-4-of-4/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Controlling a Seven-Segment Display Using Arduino Part 3</title>
		<link>http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-3-of-4/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-3-of-4/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 07:00:01 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[7-segment display]]></category>
		<category><![CDATA[button]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[LED]]></category>
		<category><![CDATA[pins]]></category>
		<category><![CDATA[sketch]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=19</guid>
		<description><![CDATA[The second sketch cycles through the numbers from 0 to 9, but only increments the display counter each time a button is pressed. Note that this code includes simple debouncing by introducing a short delay when the Arduino detects that the button has been pressed. Sketch #2: // www.TheElectronicsHobbyist.com/blog // Natalia Fargasch Norman // Seven-segment [...]]]></description>
			<content:encoded><![CDATA[<p></p><div class="separator" style="clear: both; text-align: center;"><a style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" href="http://www.theelectronicshobbyist.com/images/Seven-Segment.jpg"><img src="http://www.theelectronicshobbyist.com/images/Seven-Segment.jpg" border="0" alt="" width="162" height="200" /></a></div>
<p>The second sketch cycles through the numbers from 0 to 9, but only increments the display counter each time a button is pressed. Note that this code includes simple debouncing by introducing a short delay when the <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4221&amp;affiliate_banner_id=1" target="_blank">Arduino</a> detects that the button has been pressed.</p>
<p><span id="more-19"></span></p>
<p>Sketch #2:</p>
<pre>// www.TheElectronicsHobbyist.com/blog
// Natalia Fargasch Norman
// Seven-segment LED Display
// Common Anode pins 3 and 8

//   G F + A B
//   | | | | |   -&gt; pins and segments they control
//   ---------
//  F|   A   |B
//   |---G---|   -&gt; segments
//  E|   D   |C
//   ---------
//   | | | | |   -&gt; pins and segments they control
//   E D + C DP

// Segments that make each number when lit:
// 0 =&gt; ABCDEF
// 1 =&gt; BC
// 2 =&gt; ABDEG
// 3 =&gt; ABCDG
// 4 =&gt; BCFG
// 5 =&gt; ACDFG
// 6 =&gt; ACDEFG
// 7 =&gt; ABC
// 8 =&gt; ABCDEFG
// 9 =&gt; ABCDFG

// <a href="http://www.theelectronicshobbyist.com/blog/goto/uno" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/uno';return true;" onmouseout="self.status=''">Arduino</a> digital pins used to light up
// corresponding segments on the LED display
#define A 2
#define B 3
#define C 4
#define D 5
#define E 6
#define F 7
#define G 8

// Pushbutton connected to pin 9
#define BUTTON 9

// Common anode;
// on when pin is low
// and off when pin is high
#define ON LOW
#define OFF HIGH

int count = 0; // current display count
int val = 0;   // digital input from button

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(BUTTON, INPUT);
  zero();
}

void loop() {
  val = digitalRead(BUTTON);
  if (val == HIGH) {
    count++;
    delay(200);
    switch (count) {
      case 0:
        zero();
        break;
      case 1:
        one();
        break;
      case 2:
        two();
        break;
      case 3:
        three();
        break;
      case 4:
        four();
        break;
      case 5:
        five();
        break;
      case 6:
        six();
        break;
      case 7:
        seven();
        break;
      case 8:
        eight();
        break;
      case 9: {
        nine();
        count = -1;
        break;
      }
    }
  }
}

// 0 =&gt; ABCDEF
void zero() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, OFF);
}

// 1 =&gt; BC
void one() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
}

// 2 =&gt; ABDEG
void two() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, OFF);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
}

// 3 =&gt; ABCDG
void three() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
}

// 4 =&gt; BCFG
void four() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
}

// 5 =&gt; ACDFG
void five() {
  digitalWrite(A, ON);
  digitalWrite(B, OFF);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
}

// 6 =&gt; ACDEFG
void six() {
  digitalWrite(A, ON);
  digitalWrite(B, OFF);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
}

// 7 =&gt; ABC
void seven() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
}

// 8 =&gt; ABCDEFG
void eight() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
}

// 9 =&gt; ABCDFG
void nine() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
}</pre>
<p>You might also enjoy:<ol>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-4-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 4'>Controlling a Seven-Segment Display Using Arduino Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-2-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 2'>Controlling a Seven-Segment Display Using Arduino Part 2</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display with Buttons | Part 4'>Arduino 2-Digit 7-Segment Display with Buttons | Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display Counter | Part 1'>Arduino 2-Digit 7-Segment Display Counter | Part 1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-3-of-4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Controlling a Seven-Segment Display Using Arduino Part 2</title>
		<link>http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-2-of-4/</link>
		<comments>http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-2-of-4/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 15:00:00 +0000</pubDate>
		<dc:creator>Natalia</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[7-segment display]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[LED]]></category>
		<category><![CDATA[pins]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[supplies]]></category>

		<guid isPermaLink="false">http://www.theelectronicshobbyist.com/blog/?p=17</guid>
		<description><![CDATA[This month&#8217;s project is a simple program to display the Arabic numbers using the Arduino and a 7-segment display. Parts list: Arduino Duemilanove 7-Segment Display(I got the grab bag, with 50 displaysfor $10.95) Breadboard Mini Push Button Switch Jumper Wire The 7-segment display used in this example is a common anode display with pin connections [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>This month&#8217;s project is a simple program to display the Arabic numbers using the <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4221&amp;affiliate_banner_id=1" target="_blank">Arduino</a> and a 7-segment display.</p>
<p>Parts list:</p>
<ul>
<li><a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4221&amp;affiliate_banner_id=1" target="_blank">Arduino Duemilanove</a></li>
<li><a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProductDisplay%3FlangId%3D-1%26storeId%3D10001%26catalogId%3D10001%26productId%3D1955790" target="_blank">7-Segment Display<img style="border: 0px;" src="http://www.avantlink.com/tpv/10609/0/17253/21273/-/cl/image.png" alt="" width="0" height="0" /></a>(I got the <a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProduct_10001_10001_18201_-1" target="_blank">grab bag, with 50 displays<img style="border: none !important; margin: 0px !important;" src="http://www.avantlink.com/tpv/10609/0/17253/21273/-/cl/image.png" alt="" width="0" height="0" /></a>for $10.95)</li>
<li><a href="http://www.avantlink.com/click.php?tt=cl&amp;mi=10609&amp;pw=21273&amp;url=http%3A%2F%2Fwww.jameco.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProductDisplay%3FlangId%3D-1%26storeId%3D10001%26catalogId%3D10001%26productId%3D20601" target="_blank">Breadboard<img style="border: 0px;" src="http://www.avantlink.com/tpv/10609/0/17253/21273/-/cl/image.png" alt="" width="0" height="0" /></a></li>
<li><a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4211&amp;affiliate_banner_id=1" target="_blank">Mini Push Button Switch</a></li>
<li><a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4242&amp;affiliate_banner_id=1" target="_blank">Jumper Wire</a></li>
</ul>
<p><span id="more-17"></span></p>
<div class="separator" style="clear: both; text-align: center;"><a style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" href="http://www.theelectronicshobbyist.com/images/7segpins.jpg"><img src="http://www.theelectronicshobbyist.com/images/7segpins.jpg" border="0" alt="" /></a></div>
<p>The 7-segment display used in this example is a common anode display with pin connections as shown in the picture, and the <a href="http://www.cutedigi.com/product_info.php?ref=3&amp;products_id=4221&amp;affiliate_banner_id=1" target="_blank">Arduino</a> sketches were written so as to light up a segment when the corresponding pin is LOW.</p>
<p>The first of a series of three simple sketches cycles through the numbers from 0 to 9, resets the display to show a &#8220;0&#8243; once it reaches &#8220;9&#8243; and repeats until the power is turned off on the Arduino. The code below accomplishes this in a very simplified manner, as each digit is formed by a separate function that sequentially lights up each of the necessary segments to display that number.</p>
<p>The third sketch in this sequence will use individual bits to represent each segment and will require less written code, a good thing to keep in mind when programming microcontrollers, as they have a small memory footprint (the <a href="http://www.theelectronicshobbyist.com/blog/goto/uno" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/uno';return true;" onmouseout="self.status=''">Arduino</a> <a href="http://www.theelectronicshobbyist.com/blog/goto/duemilanove" style="" target="_blank" rel="nofollow" onmouseover="self.status='http://www.theelectronicshobbyist.com/blog/goto/duemilanove';return true;" onmouseout="self.status=''">Duemilanove</a> has 32K bytes of program memory).</p>
<p>Sketch #1:</p>
<pre>
// www.TheElectronicsHobbyist.com/blog
// Natalia Fargasch Norman
// Seven-segment LED Display
// Common Anode pins 3 and 8

//   G F + A B
//   | | | | |   -&gt; pins and segments they control
//   ---------
//  F|   A   |B
//   |---G---|   -&gt; segments
//  E|   D   |C
//   ---------
//   | | | | |   -&gt; pins and segments they control
//   E D + C DP

// Segments that make each number when lit:
// 0 =&gt; ABCDEF
// 1 =&gt; BC
// 2 =&gt; ABDEG
// 3 =&gt; ABCDG
// 4 =&gt; BCFG
// 5 =&gt; ACDFG
// 6 =&gt; ACDEFG
// 7 =&gt; ABC
// 8 =&gt; ABCDEFG
// 9 =&gt; ABCDFG

// Arduino digital pins used to light up
// corresponding segments on the LED display
#define A 2
#define B 3
#define C 4
#define D 5
#define E 6
#define F 7
#define G 8

// Common anode;
// on when pin is low
// and off when pin is high
#define ON LOW
#define OFF HIGH

int ms = 1000;

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
}

void loop() {
  zero();
  one();
  two();
  three();
  four();
  five();
  six();
  seven();
  eight();
  nine();
}

// 0 =&gt; ABCDEF
void zero() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, OFF);
  delay(ms);
}

// 1 =&gt; BC
void one() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  delay(ms);
}

// 2 =&gt; ABDEG
void two() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, OFF);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  delay(ms);
}

// 3 =&gt; ABCDG
void three() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  delay(ms);
}

// 4 =&gt; BCFG
void four() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  delay(ms);
}

// 5 =&gt; ACDFG
void five() {
  digitalWrite(A, ON);
  digitalWrite(B, OFF);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  delay(ms);
}

// 6 =&gt; ACDEFG
void six() {
  digitalWrite(A, ON);
  digitalWrite(B, OFF);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  delay(ms);
}

// 7 =&gt; ABC
void seven() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  delay(ms);
}

// 8 =&gt; ABCDEFG
void eight() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  delay(ms);
}

// 9 =&gt; ABCDFG
void nine() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  delay(ms);
}</pre>
<p>You might also enjoy:<ol>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-3-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 3'>Controlling a Seven-Segment Display Using Arduino Part 3</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-4-of-4/' rel='bookmark' title='Controlling a Seven-Segment Display Using Arduino Part 4'>Controlling a Seven-Segment Display Using Arduino Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-with-buttons/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display with Buttons | Part 4'>Arduino 2-Digit 7-Segment Display with Buttons | Part 4</a></li>
<li><a href='http://www.theelectronicshobbyist.com/blog/arduino-2-digit-7-segment-display-counter/' rel='bookmark' title='Arduino 2-Digit 7-Segment Display Counter | Part 1'>Arduino 2-Digit 7-Segment Display Counter | Part 1</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.theelectronicshobbyist.com/blog/controlling-a-seven-segment-display-using-arduino-part-2-of-4/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: www.theelectronicshobbyist.com @ 2012-02-06 22:18:38 -->
