<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Steve's personal blog - General</title>
    <link>http://www.analysisuk.com/blog/</link>
    <description>A blog about what's going on in Analysis UK...</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.0 - http://www.s9y.org/</generator>
    <pubDate>Sun, 06 Jul 2008 23:38:36 GMT</pubDate>

    <image>
        <url>http://www.analysisuk.com/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Steve's personal blog - General - A blog about what's going on in Analysis UK...</title>
        <link>http://www.analysisuk.com/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Build Indicator  Part 2 (The firmware)</title>
    <link>http://www.analysisuk.com/blog/archives/40-Build-Indicator-Part-2-The-firmware.html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/40-Build-Indicator-Part-2-The-firmware.html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=40</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=40</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    This is part 2 of the Build Indicator series.  &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=193&amp;amp;entry_id=40&quot; title=&quot;http://www.analysisuk.com/blog/archives/39-Build-Indicators-revisited.html&quot;  onmouseover=&quot;window.status=&#039;http://www.analysisuk.com/blog/archives/39-Build-Indicators-revisited.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Part 1  the construction of the hardware is here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The firmware is written using the Arduinos own &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=194&amp;amp;entry_id=40&quot; title=&quot;http://www.arduino.cc/en/Main/Software&quot;  onmouseover=&quot;window.status=&#039;http://www.arduino.cc/en/Main/Software&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;programming language&lt;/a&gt; which  is much like C/C++, using the IDE provided its easy to develop the code and push it down to the Arduino.&lt;br /&gt;
&lt;br /&gt;
I decided that as the Arduino has 13 IO pins it would be a shame not to make these available for 6 build indicators so 6 individual projects could be monitored.  Ive not used OO to implement the code so its a little messy with individual arrays for project status, red and green led pins which are indexed based on the project number.  I think you can create classes but this has to be done in external C++ files so for a simple application like this I didnt worry to add that extra complexity.&lt;br /&gt;
&lt;br /&gt;
Serial (RS232) communications is used to send a status message down to the Arduino build indicator to update the project status.&lt;br /&gt;
&lt;br /&gt;
The full Arduino &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=196&amp;amp;entry_id=40&quot; title=&quot;http://www.AnalysisUK.com/Download/BuildIndicator.zip&quot;  onmouseover=&quot;window.status=&#039;http://www.AnalysisUK.com/Download/BuildIndicator.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;build indicator code can be download here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
License :  Please use, copy and modify this code as you wish, all I ask is that you dont take credit for the bits I wrote.  You should ensure its fit for purpose before using it.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Variable declaration&lt;/strong&gt; :&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Courier New; font-size: 10pt; color: black; background: white;&quot;&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;1&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;/*&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;2&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;strong&gt; Build Indicator (c) Analysis UK Ltd 2008&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;3&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;*&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;4&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;/strong&gt; Digital Pin Assignments:&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;5&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;strong&gt; 0 - RX&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;6&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;/strong&gt; 1 - TX&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;7&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;strong&gt; 2 - Project 6 - Green LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;8&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;/strong&gt; 3 - Project 6 - Red LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;9&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;strong&gt; 4 - Project 5 - Green LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;10&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;/strong&gt; 5 - Project 5 - Red LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;11&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;strong&gt; 6 - Project 4 - Green LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;12&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;/strong&gt; 7 - Project 4 - Red LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;13&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;strong&gt; 8 - Project 3 - Green LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;14&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;/strong&gt; 9 - Project 3 - Red LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;15&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;strong&gt; 10 - Project 2 - Green LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;16&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;/strong&gt; 11 - Project 2 - Red LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;17&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;strong&gt; 12 - Project 1 - Green LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;18&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;&lt;/strong&gt; 13 - Project 1 - Red LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;19&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;&amp;#160;*/&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;20&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;21&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;#define&lt;/span&gt; VERSION &quot;1.0&quot;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;22&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;23&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Project not enabled of not connected.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;24&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; PROJECT_OFF = 0;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;25&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;26&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Project build failed&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;27&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; PROJECT_FAIL = 1; &lt;span style=&quot;color: green;&quot;&gt;// 001&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;28&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;29&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Project build good&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;30&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; PROJECT_GOOD = 2; &lt;span style=&quot;color: green;&quot;&gt;// 010&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;31&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;32&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// project building from a failed project.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;33&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; PROJECT_BUILDING_FAIL = 5; &lt;span style=&quot;color: green;&quot;&gt;// 101&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;34&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;35&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// project building from a good build.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;36&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; PROJECT_BUILDING_GOOD = 6; &lt;span style=&quot;color: green;&quot;&gt;// 110&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;37&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;38&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Maximum number of projects.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;39&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; maxProjects = 6;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;40&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;41&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Project status codes.&amp;#160; Indexed by project.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;42&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; projectStatus[] = {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;43&lt;/span&gt;&amp;#160;&amp;#160; 0, 0, 0, 0, 0, 0};&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;44&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;45&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Pins for the Red LEDs.&amp;#160; Indexed by project.&amp;#160; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;46&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; redLEDPin[] = {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;47&lt;/span&gt;&amp;#160;&amp;#160; 13, 11, 9, 7, 5, 3};&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;48&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;49&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Pins for the Green LEDs.&amp;#160; Indexed by project.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;50&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; greenLEDPin[] = {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;51&lt;/span&gt;&amp;#160;&amp;#160; 12, 10, 8, 6, 4, 2}; &lt;span style=&quot;color: green;&quot;&gt;// pins 0 and 1 reserverd for RS232.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The arrays redLEDPin and greenLEDPin represent the pins to use for the red/green leds and are indexed on the project number (i.e. project 0&#039;s red led is on pin 13).  The array projectStatus holds the status of the project and again is indexed by the project number.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Setup&lt;/strong&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Courier New; font-size: 10pt; color: black; background: white;&quot;&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;54&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// run once, when the sketch starts&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;55&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; setup()&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;56&lt;/span&gt;&amp;#160;{&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;57&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Initialise the ports for output to drive the LEDs&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;58&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; i=0; i&amp;lt;maxProjects; i++) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;59&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pinMode(greenLEDPin[i], OUTPUT);&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// sets the digital pin as output for the green/blue part of the tri color LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;60&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pinMode(redLEDPin[i], OUTPUT);&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// sets the digital pin as output for the red part of the tri color LED&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;61&lt;/span&gt;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;62&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;63&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Setup Serial communications&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;64&lt;/span&gt;&amp;#160;&amp;#160; Serial.begin(57600);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;65&lt;/span&gt;&amp;#160;}&lt;/p&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
The setup method iterates through all the projects setting up the pins designated as leds for output and then sets up serial communications at a baud rate or 57,600.  Fortunately the Arduino takes care of the difficult serial comms bits for us.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Main Loop&lt;/strong&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Courier New; font-size: 10pt; color: black; background: white;&quot;&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;67&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Main loop, runs over and over again&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;68&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; loop()&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160;  &lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;69&lt;/span&gt;&amp;#160;{&amp;#160; &lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;70&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Check and Read settings from PC&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;71&lt;/span&gt;&amp;#160;&amp;#160; ReadCommands();&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;72&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;73&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Update the LED&#039;s to indicate project status&#039;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;74&lt;/span&gt;&amp;#160;&amp;#160; UpdateLEDs();&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;75&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;76&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Idle.&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160; &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;77&lt;/span&gt;&amp;#160;&amp;#160; Idle();&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;78&lt;/span&gt;&amp;#160;}&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;79&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
The loop method is the main application loop that the Arduino will enter once setup is complete and will keep repeating.  &lt;br /&gt;
&lt;br /&gt;
Within loop we call 3 basic methods, ReadCommands() which will check the serial port for commands from the host, UpdateLEDs() which will update the leds based on the project status and Idle() which just inserts a small delay but can be used for other background tasks.&lt;br /&gt;
&lt;br /&gt;
The comms protocol is a fairly simple one. All messages should start with a byte value of 2 and terminate with a byte value of 3 so the Arduino can easily know when a instruction has been received.&lt;br /&gt;
&lt;br /&gt;
To update a project status send the ascii string @P[x]=y with x being the project number 1-6 and y being the status (0, 1, 2, 5, 6).  &lt;br /&gt;
&lt;br /&gt;
To query the version number of the firmware send ?V. &lt;br /&gt;
&lt;br /&gt;
Ive stolen the comms protocol from another project Im working on with the Arduino that has more commands and queries so Ive based all commands where the Arduino has to do work on the @ character and all queries on the ? character to help separate out the commands and queries.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;RS232 Message handling&lt;/strong&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Courier New; font-size: 10pt; color: black; background: white;&quot;&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;86&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Read commands sent from the PC&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;87&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; ReadCommands() &lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;88&lt;/span&gt;&amp;#160;{&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;89&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Check if serial data available, if so then read this in&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;90&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;91&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Read all from the serial port until no more bytes available looking for the&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;92&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// start byte (1) of a message.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;93&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;while&lt;/span&gt; (Serial.available()) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;94&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;//read the incoming byte:&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;95&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; incomingByte = Serial.read();&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;96&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;97&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Start identifier.&amp;#160; STX&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;98&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (incomingByte == 2) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;&amp;#160;99&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Found start byte now read in until we get the end of message byte.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;100&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; ReadSeialCommand(); &lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;101&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;102&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;103&lt;/span&gt;&amp;#160;&amp;#160; }&amp;#160; &lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;104&lt;/span&gt;&amp;#160;}&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;105&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;106&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Read a command from the serial port.&amp;#160; Read until the read byte&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;107&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// is an end of message (new line) indicator.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;108&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; ReadSeialCommand() {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;109&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Expect maximum of 25 bytes (normally 6)&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;110&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt; buffer[25];&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;111&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; index=0;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;112&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;113&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;while&lt;/span&gt; (&lt;span style=&quot;color: blue;&quot;&gt;true&lt;/span&gt;) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;114&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (Serial.available()) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;115&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// read the incoming byte:&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;116&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; incomingByte = Serial.read();&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;117&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;118&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Terminating byte&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;119&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Wait for ETX (End of text - transmision)&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;120&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (incomingByte==3) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;121&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; ProcessRequest(buffer);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;122&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;123&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; } &lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;124&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;else&lt;/span&gt; {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;125&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; buffer[index] = incomingByte;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;126&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; index++;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;127&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;128&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;129&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Check for buffer overflow and give up if it has.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;130&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (index&amp;gt;25) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;131&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; Serial.print(&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Error:Buffer Overflow.\n\r&quot;&lt;/span&gt;);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;132&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;133&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;134&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;135&lt;/span&gt;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;136&lt;/span&gt;&amp;#160;}&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;137&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;138&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; ProcessRequest(&lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt; request[]) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;139&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;140&lt;/span&gt;&amp;#160;&amp;#160; boolean processed = &lt;span style=&quot;color: blue;&quot;&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;141&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;142&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Check for Query commands (? at the start)&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;143&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (request[0] == 63) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;144&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Query&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;145&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; processed = ProcessQuery(request);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;146&lt;/span&gt;&amp;#160;&amp;#160; } &lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;147&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (request[0] == 64) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;148&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Set (@P[x]=0) - Set Project x = status.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;149&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; processed = ProcessSetValue(request);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;150&lt;/span&gt;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;151&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;152&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (!processed) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;153&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Serial.print (&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Error:Unknown Request.\n\r&quot;&lt;/span&gt;);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;154&lt;/span&gt;&amp;#160;&amp;#160; } &lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;155&lt;/span&gt;&amp;#160;}&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;156&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;157&lt;/span&gt;&amp;#160;boolean ProcessQuery(&lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt; request[]) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;158&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;159&lt;/span&gt;&amp;#160;&amp;#160; boolean processed = &lt;span style=&quot;color: blue;&quot;&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;160&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;161&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;switch&lt;/span&gt; (request[1]) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;162&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; 86: &lt;span style=&quot;color: green;&quot;&gt;// ?V - version&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;163&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; processed = SendVersion();&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;164&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;default&lt;/span&gt;:&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;165&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Serial.print (&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Error:Unknown Query.\n\r&quot;&lt;/span&gt;);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;166&lt;/span&gt;&amp;#160;&amp;#160; }&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;167&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt; processed;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;168&lt;/span&gt;&amp;#160;}&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;169&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;170&lt;/span&gt;&amp;#160;boolean ProcessSetValue(&lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt; request[]) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;171&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;172&lt;/span&gt;&amp;#160;&amp;#160; boolean processed = &lt;span style=&quot;color: blue;&quot;&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;173&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt; command = request[1];&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;174&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Allow ascii version of the fan number.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;175&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;//Position 2 should be [&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;176&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt; project = request[3] - 48; &lt;span style=&quot;color: green;&quot;&gt;// 48 = 0&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;177&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;//position 4 should be ]&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;178&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;//position 5 should be =&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;179&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;//position 6 should be the raw value.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;180&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt; value = request[6];&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;181&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;182&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;switch&lt;/span&gt; (command) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;183&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; 80: &lt;span style=&quot;color: green;&quot;&gt;//@P[x]=y Set project x status y.&amp;#160; y is ascii version of the status (0-9).&amp;#160; so subtract 48.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;184&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; processed = SetProjectStatus((&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt;)project, (&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt;)value - 48);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;185&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;186&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;default&lt;/span&gt;:&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;187&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Serial.print (&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Error:Unknown set command.&quot;&lt;/span&gt;);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;188&lt;/span&gt;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;189&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;190&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt; processed;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;191&lt;/span&gt;&amp;#160;}&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;192&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;193&lt;/span&gt;&amp;#160;boolean SendVersion() {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;194&lt;/span&gt;&amp;#160;&amp;#160; Serial.print (&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;Version=&quot;&lt;/span&gt;);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;195&lt;/span&gt;&amp;#160;&amp;#160; Serial.print (VERSION);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;196&lt;/span&gt;&amp;#160;&amp;#160; Serial.print (&lt;span style=&quot;color: #a31515;&quot;&gt;&quot;\n\r&quot;&lt;/span&gt;);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;197&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;true&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;198&lt;/span&gt;&amp;#160;}&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;199&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;200&lt;/span&gt;&amp;#160;&lt;span style=&quot;color: green;&quot;&gt;// Set the status for the project.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;201&lt;/span&gt;&amp;#160;boolean SetProjectStatus(&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; project, &lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; status) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;202&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;203&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (projectStatus[project-1] != status) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;204&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; projectStatus[project-1] = status;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;205&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;206&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Build failed.&amp;#160; Flash the red LED briefly to get attention.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;207&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (status == 1) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;208&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; digitalWrite(greenLEDPin[project-1], LOW);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;209&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;210&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; i=0; i&amp;lt;6; i++) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;211&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; digitalWrite(redLEDPin[project-1], HIGH);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;212&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; delay(100);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;213&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; digitalWrite(redLEDPin[project-1], LOW);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;214&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160;&amp;#160;&amp;#160; delay(100);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;215&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;216&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;217&lt;/span&gt;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;218&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;219&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;true&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;220&lt;/span&gt;&amp;#160;}&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;221&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
The method ReadCommands() will read the input buffer until it receives the start byte then call ReadSerialCommand() which reads the rest of the command into a buffer until it received the end byte.  Ive limited the buffer to 25 bytes which should be plenty and if this overflows then we just abandon it.  Their is no timeout between receiving the start and end bytes so this could cause a problem if the end byte is not received.&lt;br /&gt;
&lt;br /&gt;
Notice in the method SetProjectStatus() that the project index used is -1 from the project value sent.  When sending commands the first project is project 1 however the Arduino uses 0 based arrays.&lt;br /&gt;
&lt;br /&gt;
In SetProjectStatus() if the project state changes to be failure (value 1) then the red led is flashed 6 times to draw attention to the indicator.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Project State Indication&lt;/strong&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: Courier New; font-size: 10pt; color: black; background: white;&quot;&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;222&lt;/span&gt;&amp;#160;boolean UpdateLEDs() {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;223&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;224&lt;/span&gt;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; i=0; i&amp;lt;maxProjects; i++) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;225&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; greenLEDStatus = LOW;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;226&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; redLEDStatus = LOW;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;227&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;228&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;switch&lt;/span&gt; (projectStatus[i]) {&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;229&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; 0: &lt;span style=&quot;color: green;&quot;&gt;// NC&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;230&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// No acton&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;231&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;232&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; 1: &lt;span style=&quot;color: green;&quot;&gt;// Fail&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;233&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; redLEDStatus = HIGH;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;234&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;235&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; 2: &lt;span style=&quot;color: green;&quot;&gt;// Good&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;236&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; greenLEDStatus = HIGH;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;237&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;238&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; 5: &lt;span style=&quot;color: green;&quot;&gt;// Building from a Fail build&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;239&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; 6: &lt;span style=&quot;color: green;&quot;&gt;// Building from a good build&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;240&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; greenLEDStatus = HIGH;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;241&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; redLEDStatus = HIGH;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;242&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;243&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;default&lt;/span&gt;:&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;244&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; redLEDStatus = HIGH;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;245&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;#160; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;246&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;247&lt;/span&gt;&amp;#160;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;248&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: green;&quot;&gt;// Determine project LED pins and set them appropriatly.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;249&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; digitalWrite(redLEDPin[i], redLEDStatus);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;250&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; digitalWrite(greenLEDPin[i], greenLEDStatus);&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;251&lt;/span&gt;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;br /&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: #2b91af;&quot;&gt;&amp;#160;&amp;#160;252&lt;/span&gt;&amp;#160;}&lt;/p&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
In the method UpdateLEDs() we update the led status based on the project status.  &lt;br /&gt;
&lt;br /&gt;
If you are wondering what happened to status codes 3 &amp;amp; 4 Ive used a bit based project status.  0001 (1) is fail, 0010 (2) is good, 01xx is building so 0101 (5) is building from a previously failed state and 0110 (6) is building from a good previous good state.&lt;br /&gt;
&lt;br /&gt;
If you want to use indicators other than leds for your project state then you can update the UpdateLEDs() method with another way to indicate the project status (maybe a LCD panel?).&lt;br /&gt;
&lt;br /&gt;
Thats basically the firmware, not much to it, the Arduino does most of the work for us which is the best bit!&lt;br /&gt;
&lt;br /&gt;
To program the Arduino connect it up, install the drivers (my Vista x64 and Vista x86 installs got the drivers from Windows Update without a problem and also installed the VCP virtual com port drivers).  Open up the IDE, ensure the board and serial port are correct and load the &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=196&amp;amp;entry_id=40&quot; title=&quot;http://www.AnalysisUK.com/Download/BuildIndicator.zip&quot;  onmouseover=&quot;window.status=&#039;http://www.AnalysisUK.com/Download/BuildIndicator.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;build indicator firmware&lt;/a&gt;, then hit the upload to I/O board button.  &lt;br /&gt;
&lt;br /&gt;
In the next entry Ill talk about the PC application to drive the Arduino. 
    </content:encoded>

    <pubDate>Mon,  7 Jul 2008 00:38:36 +0100</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/40-guid.html</guid>
    
</item>
<item>
    <title>Build Indicators revisited</title>
    <link>http://www.analysisuk.com/blog/archives/39-Build-Indicators-revisited.html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/39-Build-Indicators-revisited.html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=39</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=39</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    &lt;img src=&quot;http://www.analysisuk.com/blog/uploads/GreenTree.jpg&quot; alt=&quot;Arduino controlled X-Mas tree.&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Some time ago I posted about a &lt;a href=&quot; http://www.analysisuk.com/blog/archives/33-Putting-the-SnowMan-to-work-Cruise-Control-.Net-Build-Status-Monitor..html&quot;&gt;USB Snowman build indicator&lt;/a&gt;, the problem with the first version was the USB IO board I used, its availability was limited and the output was designed as a current sink rather than source, so some modifications had to be made to the board, which isnt really ideal.&lt;br /&gt;
&lt;br /&gt;
Recently I came across the Arduino project, an open source hardware solution and one of the little &lt;a href=&quot; http://www.arduino.cc/en/Main/ArduinoBoardDiecimila&quot;&gt;Diecimila boards&lt;/a&gt; provides a perfect base for revisiting the build indicator.  The SnowMan is still in use at home and I wanted one for work as well so I figured Id make another build indicator based on the Arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/ArduinoDiecimila.jpg&quot; alt=&quot;Arduino Diecimila.&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
The 13 IO pins can sink or source up to 40mA which is ideal for driving the tri-color led used by the build indicator.  The led requires 2 current sources and has a common cathode.  The Arduino has a USB interface that provides normal serial port communications to the host PC so interfacing is easy as well.&lt;br /&gt;
&lt;br /&gt;
This time instead of a snowman I decided to use a Xmas tree.  They are very similar, basically a lump of plastic with a 5MM LED mounted inside.  The Arduino provides multiple IO ports of which Im using only two and the intention here is to provide some common functionality so that the device could be easily adapted to other forms of build indication (Switching relays, multiple project build indicators, other leds, buzzers etc).&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/XMasTree.jpg&quot; alt=&quot;X-Mas tree as new.&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
Removing the base and replacing the led is a simple job, either use a flat screwdriver or use the cable exit to push off the base off. &lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/XMasTreeBase.jpg&quot; alt=&quot;X-Mas tree from underneath.&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/XMasTreeBaseRemoved.jpg&quot; alt=&quot;X-Mas tree base removed.&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
Pull out the led fitted into the tree using the cable.  This is no longer needed.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/XMasTreeLEDRemoved.jpg&quot; alt=&quot;X-Mas tree led removed.&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Now glue the base onto the top of the box the tree is to be mounted on.  Previously I used a black ABS box but this time Im using a &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=192&amp;amp;entry_id=39&quot; title=&quot;http://www.maplin.co.uk/Module.aspx?ModuleNo=30226&amp;&amp;source=14&amp;doy=Search&quot;  onmouseover=&quot;window.status=&#039;http://www.maplin.co.uk/Module.aspx?ModuleNo=30226&amp;&amp;source=14&amp;doy=Search&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;ice blue box&lt;/a&gt; and this has worked out much better for aligning the parts and seeing the leds on the Arduino board (RX/TX when programming), and also appeals to the inner geek a little more now that the workings can be seen.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/CaseWithBase.jpg&quot; alt=&quot;Plastic case with X-Mas tree base glued in place.&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
Drill a hole through the middle of the base so that it will line up with the middle of the x-mas tree.  This is best done with the base stuck to the box as it holds it in place and ensures every thing lines up.  The hole should be about 7-8mm so that the LED + resistors pass thought easily.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/CaseWithBaseAndHole.jpg&quot; alt=&quot;Hole through Xmas tree base and case.&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
Now we need to prepare the led.  Using a standard Tri-Color led (Ive used Red + Green) we need to fit a current limiting resistor to the supply legs.  One for the red and one for the green component of the led.  &lt;br /&gt;
&lt;br /&gt;
Using the datasheet for the led the voltage drop across the red Led is about 2V, this leaves a drop of 3V across the current limiting resistor as its driven from a 5V source.  Im going to drive the Leds at 30mA, so we will need a 100R resistor for the red Led.  &lt;br /&gt;
&lt;br /&gt;
The green led has a different voltage drop across it (3.4V) so we need to do the same calculation for that and again aim to drive it at 30mA which means we need a 53R resistor, as I only had a 56R resistor to hand Ive used that which gives us about 29mA current flow.&lt;br /&gt;
&lt;br /&gt;
The data sheet gives luminous intensity for both red and green at 20mA and the green is much brighter than the red so we may wish at a latter date to play around with the drive current to get a better balance when both red and green are on.&lt;br /&gt;
 &lt;br /&gt;
Trim the red and green legs of the led fairly short but leave enough to solder on the resistors and attach these.  Next connect a cable to the other side of the resistors and to the common pin on the led.  If you prefer you can attach the resistors to the Arduino connector and solder the cable directly to the led.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/TriColorLED.jpg&quot; alt=&quot;The Tri-color led.&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
I used 2 core screened cable as this happened to be what I had to hand and as it turns out by tinning the screen and soldering to the led common pin gives a good sturdy way to physically push the led into the socket in the tree (and pull it out again!).  I also put a bit of heat shrinking around the connections to prevent them shorting out.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/LEDConnected.jpg&quot; alt=&quot;Led with resistors and wires connected.&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
Now we need the connection to the Arduino board, the led is connected to pins 12, 13 and GND.  This is easy as they are all close together and as an added bonus the Arduino already uses an onboard led on pin 13 for status when starting up which means that the tree flashes when the Arduino is starting up, its easy to use other pins if you prefer.&lt;br /&gt;
&lt;br /&gt;
Ive used a standard 0.1&quot; Molex connector (The type used for 3 pin PC fans), the PCB version is ideal, but soldering the led connecting wire to the PCB side and plugging it into the header in the Arduino rather than mounting it on a PCB.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/Connector.jpg&quot; alt=&quot;Connector for the led to Arduino controller.&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/ConnectingLED.jpg&quot; alt=&quot;Led connector plugged into the Arduino.&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Note that in the photos the red cable is actually for the green led and the blue one is for the red led.  It doesnt really matter a great deal which way round they go as long as you get the correct resistor matched up with the appropriate led.  However the default in the firmware is that the red led is on pin 13 and green on pin 12.&lt;br /&gt;
&lt;br /&gt;
Next drill some holes in the base of the box and mount the Arduino.  Note that one hole is smaller than the others so I ended up using only 2 mounting points due to my lack of any 2mm bolts.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/Mounts.jpg&quot; alt=&quot;Arduino mounting points.&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
The advantage of using a translucent box is finding the place to drill a hole of the USB connector.  I elected to use a cone drill and just have a circular cut out for the USB cable to go through, it doesnt look all that professional but it was quick and it worked a treat!&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/USBHole.jpg&quot; alt=&quot;Hole for the USB connector&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
Next its just a matter of screwing everything together.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/FinalProduct.jpg&quot; alt=&quot;X-Mas tree build indicator assembled.&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.analysisuk.com/blog/uploads/GreenTreeMounted6.jpg&quot; alt=&quot;A Green X-Mas tree.&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I put 6 small feet on the base of the box as well.  Why 6?  With sticky feet one always falls off (especially with commercial products!) and then it rocks, with 6 you still have some stability to the device if one falls off.&lt;br /&gt;
&lt;br /&gt;
Now all thats needed is a little firmware to run the Arduino and some software for the PC to put it to use but thats going to have to be the subject of the next posting(s). 
    </content:encoded>

    <pubDate>Thu,  3 Jul 2008 01:39:08 +0100</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/39-guid.html</guid>
    
</item>
<item>
    <title>Recent Site Outages</title>
    <link>http://www.analysisuk.com/blog/archives/38-Recent-Site-Outages.html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/38-Recent-Site-Outages.html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=38</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=38</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    Apologies for the recent outages on a number of the Analysis UK websites, these included &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=184&amp;amp;entry_id=38&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;  title=&quot;BookSwap.ws&quot;&gt;BookSwap.ws&lt;/a&gt;, &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=185&amp;amp;entry_id=38&quot;  onmouseover=&quot;window.status=&#039;http://www.Dollars2Pounds.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;Dollars 2 Pounds exchange rates&quot;&gt;Dollars2Pounds&lt;/a&gt;, &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=186&amp;amp;entry_id=38&quot;  onmouseover=&quot;window.status=&#039;http://www.Pounds2Euro.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; title=&quot;Pounds to Euros exchange rated&quot;&gt;Pounds2Euro&lt;/a&gt; and all the other exchange rate sites as well as this blog.&lt;br /&gt;
&lt;br /&gt;
On Saturday the &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=188&amp;amp;entry_id=38&quot; title=&quot;http://forums.theplanet.com/index.php?showtopic=90185&quot;  onmouseover=&quot;window.status=&#039;http://forums.theplanet.com/index.php?showtopic=90185&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;hosting provider had an explosion and fire at one of it&#039;s data centers&lt;/a&gt; hosting one of servers.  Initial estimates that were given made it look like it would be quicker to leave the sites (it was a Sunday and their usually quiet on Sundays) and wait for the host to get the power back on.&lt;br /&gt;
&lt;br /&gt;
Unfortunately it didnt resolve that well, after many hours of delays some power was restored but floor 1 had even more damage than was anticipated and power was much slower at being restored, this unfortunately eat into most of Monday (UK time), however Monday evening all was back and well.&lt;br /&gt;
&lt;br /&gt;
I got home Tuesday tonight to find yet another apology from the company saying that this time the generator powering floor 1 had failed and they were sourcing a new one, this took a significant amount of time, especially given how much they like to state N+1 redundancy (i.e. a spare generator should have been to hand anyway).  &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=188&amp;amp;entry_id=38&quot; title=&quot;http://forums.theplanet.com/index.php?showtopic=90185&quot;  onmouseover=&quot;window.status=&#039;http://forums.theplanet.com/index.php?showtopic=90185&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Updates were slow, uninformative, vague and at the point of being misleading&lt;/a&gt;  Ive have yet to see any photo&#039;s of anything as well.  Eventually power returned at about midnight UK time on Tuesday/Wednesday, so fingers crossed nothing else can go wrong in this world class N+1 redundancy data center!&lt;br /&gt;
&lt;br /&gt;
Sincere apologies to all those affected, this one is going firmly into the experience category and Im extremely unhappy this has taken so long to resolve, I will look to do more to improve this and hopefully &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=189&amp;amp;entry_id=38&quot; title=&quot;http://www.theplanet.com&quot;  onmouseover=&quot;window.status=&#039;http://www.theplanet.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;The Planet&lt;/a&gt; will learn and improve (if they have any customers left after this!).&lt;br /&gt;
&lt;br /&gt;
I read on &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=190&amp;amp;entry_id=38&quot; title=&quot;http://www.GoDaddy.com&quot;  onmouseover=&quot;window.status=&#039;http://www.GoDaddy.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;GoDaddy&lt;/a&gt; some time ago about a problem they had and that they didnt have geographical redundancy, if your running a serious e-commerce operation and have enough cash for some spare servers get them now and with a different host in a different [part of the] country.  &lt;br /&gt;
&lt;br /&gt;
BTW - If you have .co.uk domain names with GoDaddy be sure to renew them extra early as they claim they have to renew them at least a month early, then before the 20th of that month (unless I was getting some BS from the customer support as to why they canceled 4 of my domains over 1 month before the renewal date!).&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed,  4 Jun 2008 01:56:26 +0100</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/38-guid.html</guid>
    
</item>
<item>
    <title>Earthquake  in the UK!</title>
    <link>http://www.analysisuk.com/blog/archives/35-Earthquake-in-the-UK!.html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/35-Earthquake-in-the-UK!.html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=35</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=35</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    Minor tremors felt here in Cambridge, thought I was going crazy and fired up &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=178&amp;amp;entry_id=35&quot; title=&quot;http://twitter.com&quot;  onmouseover=&quot;window.status=&#039;http://twitter.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Twitter&lt;/a&gt; to see other reports, news starting to come through on &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=175&amp;amp;entry_id=35&quot; title=&quot;http://news.sky.com/skynews/article/0,,30100-1307071,00.html&quot;  onmouseover=&quot;window.status=&#039;http://news.sky.com/skynews/article/0,,30100-1307071,00.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;sky news&lt;/a&gt; sometime after.&lt;br /&gt;
&lt;br /&gt;
Turns out I wasnt imagining things!  Apparently 4.7 on the Richter scale.&lt;br /&gt;
&lt;br /&gt;
Unusual to get this in the UK.  Only minor here in Cambridge, like a helicopter flying over the house and the only thing to shake was me and the study lamp!&lt;br /&gt;
&lt;br /&gt;
Just woken up and want to get your PC fired up quickly to check out &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=176&amp;amp;entry_id=35&quot; title=&quot;http://news.sky.com/&quot;  onmouseover=&quot;window.status=&#039;http://news.sky.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Sky News&lt;/a&gt;, &lt;a href= &quot;http://news.bbc.co.uk/1/hi/england/7266136.stm&quot;&gt;BBC News&lt;/a&gt; or &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=178&amp;amp;entry_id=35&quot; title=&quot;http://twitter.com&quot;  onmouseover=&quot;window.status=&#039;http://twitter.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Twitter&lt;/a&gt;?  Waiting for lots of background applications starting that you dont need and just want to fire up a browser quickly?  Check out &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=179&amp;amp;entry_id=35&quot; title=&quot;http://www.LazyLoad.com&quot;  onmouseover=&quot;window.status=&#039;http://www.LazyLoad.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;LazyLoad&lt;/a&gt; to delay the stuff you dont need immediately so you can get started sooner.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 27 Feb 2008 02:16:51 +0000</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/35-guid.html</guid>
    
</item>
<item>
    <title>Heli Fun.</title>
    <link>http://www.analysisuk.com/blog/archives/26-Heli-Fun..html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/26-Heli-Fun..html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=26</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=26</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    Some weeks ago I (and three others at my day job) purchased a &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=145&amp;amp;entry_id=26&quot; title=&quot;http://www.buzzflyer.co.uk/Special-Offers/ESky-Lama-V3-Helicopter/p-92-126/&quot;  onmouseover=&quot;window.status=&#039;http://www.buzzflyer.co.uk/Special-Offers/ESky-Lama-V3-Helicopter/p-92-126/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;ESky Lama V3 Helicopter&lt;/a&gt;, if you are thinking about trying remote control helicopters then this one is just so much fun you should go for it!&lt;br /&gt;
&lt;br /&gt;
This is one strong and fun helicopter, you are best off flying indoors, in an area with some reasonable space and nothing valuable around.  The battery charge lasts about 10 minutes but that seams like a long time and whilst you are learning to fly most of the time you will be picking the heli off its side and placing it back in a position you can fly it from.&lt;br /&gt;
&lt;br /&gt;
I have repeatedly crashed the Lama and its incredibly strong, so far Im on my second set of blades (both A and B !), fortunately it comes with a spare set in the box and Im also on my second tail, this didnt come as a spare but only cost about £8.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=146&amp;amp;entry_id=26&quot; title=&quot;http://www.buzzflyer.co.uk&quot;  onmouseover=&quot;window.status=&#039;http://www.buzzflyer.co.uk&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;BuzzFlyer&lt;/a&gt; do a great range of &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=147&amp;amp;entry_id=26&quot; title=&quot;http://www.buzzflyer.co.uk/Electric-RC-Helicopter-Spares-Parts/ESky-Lama-2--V3-Spares/c-1-72-87/&quot;  onmouseover=&quot;window.status=&#039;http://www.buzzflyer.co.uk/Electric-RC-Helicopter-Spares-Parts/ESky-Lama-2--V3-Spares/c-1-72-87/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;spare parts for the V3 Lama&lt;/a&gt; and with their being 4 of us at work I just see what every body else needs and do a big-ish order which helps with the postage.&lt;br /&gt;
&lt;br /&gt;
Various connectors for the blades, balance thingy and what not take some serious grief but these just pop back into place without to many problems, I expected these to be the first things to break but they have done amazingly well.  Just moments ago I hit the ceiling with the heli, which landed badly on the sofa, the balance hammer on the top came out and was actually bent, but all connectors are in one piece and I was back flying again 20 seconds latter.&lt;br /&gt;
&lt;br /&gt;
The Tail broke some time ago and was a similar crash, I was trying to back away from the window when I got it all wrong and the heli came down backwards from the ceiling and hit the rowing machine on its way, so no great surprise the plastic tail broke!  This was easy to replace, just 4 small screws.&lt;br /&gt;
&lt;br /&gt;
If you are looking for a fun present for someone this x-mas then look seriously at the LAMA, I put some serious thought into the purchase and wasnt sure if Id done the right thing, until I started flying it, then it instantly became my favourite toy!&lt;br /&gt;
&lt;br /&gt;
Unfortunately the manuals not to hot for getting started, but its quite simple.  Switch on the remote control handset, set the throttle (left hand lever + trim) all the way down, place the Lama on a flat surface, plug in the battery, dont touch it until you see the red flashing led go solid green.  Pick up the controls and start flying.  You will need to adjust the trims and these change with battery charge, I find getting it a few inches from the ground to get the coarse adjustment then fly it properly and you can then get an idea of the fine adjustment.&lt;br /&gt;
&lt;br /&gt;
One big tip I was given and I would suggest the same, keep it pointing away from you, it gets very confusing working back to front and the Lama reaches the scene of the accident very quickly normally but if you have the controls back to front you end up making it even quicker!&lt;br /&gt;
&lt;br /&gt;
There are some good RC forums around with more tips on flying the Lama.&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sun, 19 Nov 2006 19:08:03 +0000</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/26-guid.html</guid>
    
</item>
<item>
    <title>Partial outage of Analysis UK web sites.</title>
    <link>http://www.analysisuk.com/blog/archives/24-Partial-outage-of-Analysis-UK-web-sites..html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/24-Partial-outage-of-Analysis-UK-web-sites..html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=24</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=24</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    Apologies to all those effected earlier today by the outage of a number of the Analysis UK websites, including &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=135&amp;amp;entry_id=24&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;BookSwap.ws&lt;/a&gt; and &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=136&amp;amp;entry_id=24&quot; title=&quot;http://www.Dollars2Pounds.com&quot;  onmouseover=&quot;window.status=&#039;http://www.Dollars2Pounds.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Dollars2Pounds&lt;/a&gt; as well as the other exchange rate sites.&lt;br /&gt;
&lt;br /&gt;
This outage occurred on the main web server and was caused by a power supply failure.  The &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=137&amp;amp;entry_id=24&quot; title=&quot;http://www.EV1Servers.net&quot;  onmouseover=&quot;window.status=&#039;http://www.EV1Servers.net&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;hosting company&lt;/a&gt; were quick to get the problem identified, however unfortunately their was significant delay in finding a replacement power supply, hence the sites were off line for a number of hours.&lt;br /&gt;
&lt;br /&gt;
All sites are now back up and running.&lt;br /&gt;
&lt;br /&gt;
Steve.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri,  3 Nov 2006 02:42:28 +0000</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/24-guid.html</guid>
    
</item>
<item>
    <title>Dinner Timer Lite</title>
    <link>http://www.analysisuk.com/blog/archives/23-Dinner-Timer-Lite.html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/23-Dinner-Timer-Lite.html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=23</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=23</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    I am pleased to announce the release of Dinner Timer Lite and the &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=134&amp;amp;entry_id=23&quot; title=&quot;http://www.DinnerTimer.com&quot;  onmouseover=&quot;window.status=&#039;http://www.DinnerTimer.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;DinnerTimer.com&lt;/a&gt; web site.&lt;br /&gt;
&lt;br /&gt;
Dinner Timer Lite can be downloaded, for free from &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=134&amp;amp;entry_id=23&quot; title=&quot;http://www.DinnerTimer.com&quot;  onmouseover=&quot;window.status=&#039;http://www.DinnerTimer.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;DinnerTimer.com&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Dinner Timer Lite is as the name implies a timer to help with the timing of cooking, although it doesnt have to stop there, it can be used for any application that requires a count down timer.&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;images/DinnerTimerLite.jpg&quot; alt=&quot;Dinner Time Lite in action&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Dinner Timer Lite is the first of a few Dinner Timer applications to come from Analysis UK, however these are still in development and there are more features to be added to Dinner Timer Lite as well so please keep an eye out on &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=134&amp;amp;entry_id=23&quot; title=&quot;http://www.DinnerTimer.com&quot;  onmouseover=&quot;window.status=&#039;http://www.DinnerTimer.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;DinnerTimer.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Dinner Timer Lite features a flexible notifiers architecture, it currently ships with bubble and sound notifiers so you can get a pop up bubble from the system tray or play built in, or custom sounds on specific events.&lt;br /&gt;
&lt;br /&gt;
A number of different events are supported when running the application, these naturally include start and end events but also a timer end close event, two timer over run events which can be configured to suite your own style of cooking.&lt;br /&gt;
&lt;br /&gt;
A novel feature is the over run timer, when the time is complete the timer keeps running, telling you exactly how long over the completion time you have gone, no need to scramble around resetting the timer just to get an extra minute for the peas.&lt;br /&gt;
&lt;br /&gt;
The transparency/opacity settings of Dinner Timer Lite can be used to allow the timer to be visible as well as what ever (TV on the PC?) happens to be underneath it, the transparency changes with the events of the timer, so when your dinner is cooked the timer is fully visible and when its not running it can be practically invisible.&lt;br /&gt;
&lt;br /&gt;
You may well be asking why you need a PC based timer when you have a stand alone one.  I have two stand alone timers and I still use Dinner Timer Lite regularly.  Often I return to my PC to carry on working on the various projects and realise that  I have not set the timer, Dinner Timer Lite is only a click away at this time and becomes very useful, especially as it would typically be 5-10 minutes before I got around to returning to the kitchen to set the timer and I would end up burning the dinner.&lt;br /&gt;
&lt;br /&gt;
I wrote Dinner Timer Lite to solve the problems of me returning to the PC to carry on working and forgetting to start a timer, so I could easily see how the time was going and because I didnt find the two normal timers I had to be particularly use friendly.&lt;br /&gt;
&lt;br /&gt;
Even if you are using a normal timer, Dinner Timer Lite can still be very useful, its easy to see how long remains, or if you want to put something extra on a set time after you started dinner you can put Dinner Timer Lite into elapsed time mode.&lt;br /&gt;
&lt;br /&gt;
Maybe like me, youve set the timer for your Pizza, returned to the PC to get a little bit of work done but you know full well you want to be back for the Pizza early, just start the timer, it will warn you just before the timer is complete (1 minute by default), you can also keep an eye on the time remaining with out having to be in the kitchen to watch the timer.&lt;br /&gt;
&lt;br /&gt;
This is the first release of Dinner Timer Lite and I am keen to get feedback, so please use the support page or comments here to let me know what you think and what extras you think a timer should provide.  I already have a big list of bits to add to the full Dinner Timer and Dinner Timer Lite.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 31 Oct 2006 01:41:18 +0000</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/23-guid.html</guid>
    
</item>
<item>
    <title>More SmartStamp pains.</title>
    <link>http://www.analysisuk.com/blog/archives/18-More-SmartStamp-pains..html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/18-More-SmartStamp-pains..html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=18</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=18</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    It always amazes me how worse a product can become over its life time, Royal Mail appear to have perfected making SmartStamp annoy its customers on a frequent basis.&lt;br /&gt;
&lt;br /&gt;
With home based business increasing thanks to sites like  &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=97&amp;amp;entry_id=18&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;BookSwap.ws&lt;/a&gt; and &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=98&amp;amp;entry_id=18&quot; title=&quot;http://www.eBay.com&quot;  onmouseover=&quot;window.status=&#039;http://www.eBay.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;eBay&lt;/a&gt; stamp printing applications such as SmartStamp are going to become a crucial tool.&lt;br /&gt;
&lt;br /&gt;
Today all I wanted to do was print a single stamp for a small parcel to the USA.&lt;br /&gt;
&lt;br /&gt;
Naturally I had to alter the printer and label when I started the application, see my &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=99&amp;amp;entry_id=18&quot; title=&quot;http://www.analysisuk.com/blog/archives/12-SmartStamp-feedback..html&quot;  onmouseover=&quot;window.status=&#039;http://www.analysisuk.com/blog/archives/12-SmartStamp-feedback..html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;previous post about the default label and printer&lt;/a&gt;, and then go through more pain to find the postage.&lt;br /&gt;
&lt;br /&gt;
Having finally got the postage I wanted I hit print, enter my password and found out I have to do an update.  It waits until Ive spent ages setting it all up to do this.  So the update happens, quite a big update, fortunately I have a fast internet connection so not to much of a problem.&lt;br /&gt;
&lt;br /&gt;
Naturally being an important part of the computer I have to restart the PC to get the updates installed.  However it did print my stamp for me.  Wrongly!  Up until today the one thing thats always worked for me is the stamp has been well positioned.  Not any more, 99012 label + stamp on a Dymo 320 looks something like this&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://www.AnalysisUK.com/blog/images/Stamp.jpg&quot;/&gt;&lt;br /&gt;
&lt;br /&gt;
So next I restart my PC incase the s/w needs to be updated like it asked me for. I wasnt to happy as I was part way through downloading Vista RC1 from MSDN and the download program is a pain to find to get it to continue if you stop it part way.  Actually I have no idea how to restart it I always end up back in MSDN and start another download then cancel that, but thats another story of an annoying app.&lt;br /&gt;
&lt;br /&gt;
Well after the restart which took an age (which if you are like me and trying to run an micro-ISV in your free time after work is time wasted you really could do without) the label is &lt;b&gt;still positioned wrongly&lt;/b&gt;.  Fortunately there are some confusing controls in SmartStamp to position it, so after a bit of guess work the label now shows the price like it used to.&lt;br /&gt;
&lt;br /&gt;
Now for the next issue, I have to find my stamp again, USA, near the bottom of a long list of countries,  I expect quite a lot of people post to USA, you would think that like most web sites and software they would have a few at the top that were very popular.  But no.  Then I find the stamp type, AirMail, then select the weight.  Next I realise the one I wanted was actually Small Packet AirMail.  Guess what, its decided not to keep my weight, so I have to go select one of them again.  &lt;br /&gt;
&lt;br /&gt;
Now I know its not all that easy to make the weight thing correct its self as there are different bands.  BUT, this is really annoying every time you change stamp type it changes the weight to the min.  Maybe I could just enter the weight in a text box, or use the selector, and if Ive entered it manually then it can choose the best weight band for me.  After all the one thing thats not going to change is the weight of my parcel, but stamp choice, now that will change as I try to find the most appropriate one.&lt;br /&gt;
&lt;br /&gt;
Personally Im hoping the cheap postage scales will have a RS232 or USB interface one of these days, that would be really nice.&lt;br /&gt;
&lt;br /&gt;
One day I am going to end up with the wrong stamp because of the resetting to default.  Actually I just printed the stamp whilst writing this and if it wasnt for the big SU on the label instead of the A I would have got the wrong one and the wrong weight.  Its to easy to do that.  The stamp doesnt say what weight its valid for either so thats no help.&lt;br /&gt;
&lt;br /&gt;
Now I have a stamp for Airmail Small Packet , I have to put a Airmail sticker on the packet and a customs declaration.  Not to difficult.  You can download a CN22 from Royal Mails web site and I can fire you the Dymo printer to print an Airmail sticker I have already made.&lt;br /&gt;
&lt;br /&gt;
Did you make the same mistake I made.  Thinking  that as a label printing application designed for postage SmartStamp would include labels for Airmail and Customs declarations.  Odd really, I have to print out a PDF on my laser and cut it down to size, then with a different labeller application I have to print the Airmail label.  3 Applications to sort out the stuff that has to go onto a parcel.  I just dont think anybody at royal mail has actually tried to use SmartStamp for real.&lt;br /&gt;
&lt;br /&gt;
Before you correct me, yes I know that there is an Airmail logo I can use on the stamp, but not as a label by its self, and it wont fit with the postage onto a 99012 label.  So someone has clearly put 2 seconds of thought into it and stopped at that.  And its not for small packet either.  Maybe when you select an airmail stamp that has extra label requirements their could be an option to include these in the list of labels its about to print.&lt;br /&gt;
&lt;br /&gt;
One more thing that really bugs me, and this was common in VB3 days, is the &quot;are you sure?&quot; exit message, thats so old and annoying.  If Ive printed my stamp and pressed X then I certainly want to exit, dont annoy me any more!  All it tells me is the application development is still thinking VB3 style and it doesnt really know what state its data is in.&lt;br /&gt;
&lt;br /&gt;
Now I know I rant on about this annoying little application (which isnt all that cheap at the end of the day), but as someone who uses it I feel I have to make my views known in a desperate hope someone may take notice one day  &lt;br /&gt;
&lt;br /&gt;
Come on Royal Mail sort this product out.  Please put a little effort into this, you may have won a best use of technology award for it, but it still needs a lot of attention to make it customer friendly and usable technology.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Update:  As I continue to write this Ive just tried a few more things and guess what, its remembered my printer and the label positioning (V3.0.0.10), I selected another label and it looks like that would also print wrong, but at least its remembered my settings, sad how something so basic should now cause me to be happy.  Now I dont know if thats because of the update that just happened or because I just saved my label as a template in the hope that it would keep the label positions.&lt;br /&gt;
&lt;br /&gt;
Well Im off to search around the Royal Mail website to try and get a refund for the badly printed label.  Guess what, thats not part of the application either.  Im also firing up Napster for some music, theirs another application that continues to irritate me immensely, can they make it any more difficult and slow to play some music!&lt;br /&gt;
&lt;br /&gt;
Steve.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri,  8 Sep 2006 04:10:10 +0100</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/18-guid.html</guid>
    
</item>
<item>
    <title>SmartStamp Hacks.</title>
    <link>http://www.analysisuk.com/blog/archives/14-SmartStamp-Hacks..html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/14-SmartStamp-Hacks..html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=14</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=14</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    After my other post talking about wishful improvements to SmartStamp, I realised I have one little hack that I should share.&lt;br /&gt;
&lt;br /&gt;
If like me you &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=66&amp;amp;entry_id=14&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;sell your books&lt;/a&gt; (CDs, DVDs etc) in the evening after youve completed your day job printing a stamp only really gives you the option of sending the parcel the next day, where as if you use SmartStamp during the day (9-5 style) you can post the item that day or the next.&lt;br /&gt;
&lt;br /&gt;
The simple work around for this is to print your stamps after midnight, I appreciate not everyone is a night owl like my self so maybe print them the next morning, but ideally dont print them between getting home from work and midnight.&lt;br /&gt;
&lt;br /&gt;
This gives you an extra day in which your stamp will be valid.  Ideally we all want to post our parcels the next day so the buyer gets them as soon as possible, but on the odd occasion we dont get to put them in the post that day, when this happens your stamp is invalid and you have to do a new one, and apply for a refund.  By printing after midnight you get an extra bit of grace to get your parcel in the post.&lt;br /&gt;
&lt;br /&gt;
Hopefully one day RM may update SmartStamp so you get an extra day after 6pm or so, but for now wait till midnight +1 min before stamping!.&lt;br /&gt;
&lt;br /&gt;
Steve.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sat, 26 Aug 2006 03:01:43 +0100</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/14-guid.html</guid>
    
</item>
<item>
    <title>SmartStamp feedback.</title>
    <link>http://www.analysisuk.com/blog/archives/12-SmartStamp-feedback..html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/12-SmartStamp-feedback..html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=12</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=12</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    Isnt this typical, I dont post for ages then I post twice in one day!&lt;br /&gt;
&lt;br /&gt;
This is a call out to all SmartStamp users who like me are disappointed with the application and feel a few simple improvements would make a massive difference and reduce a lot of frustration.&lt;br /&gt;
&lt;br /&gt;
Royal Mail are conducting a survey to get feedback on the product and on the SmartStamp web site.  Please take the time to visit the &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=59&amp;amp;entry_id=12&quot; title=&quot;http://www.royalmail.com/portal/rm/jump2?catId=400043&amp;mediaId=600023&quot;  onmouseover=&quot;window.status=&#039;http://www.royalmail.com/portal/rm/jump2?catId=400043&amp;mediaId=600023&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;SmartStamp Website&lt;/a&gt; and fill in the questionnaire (you should get a pop up asking if you wish to take part in the questionnaire if its still running).&lt;br /&gt;
&lt;br /&gt;
Dont let me put you off SmartStamp though, if you are &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=60&amp;amp;entry_id=12&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;selling books&lt;/a&gt;, &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=61&amp;amp;entry_id=12&quot; title=&quot;http://www.CDSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.CDSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;CDs&lt;/a&gt;, &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=62&amp;amp;entry_id=12&quot; title=&quot;http://www.DVDSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.DVDSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;DVDs&lt;/a&gt; etc then it is a great way to avoid the queue at your local post office which can be a huge time saver, just launch the application, after some fiddling hit print and you have a little stamp all ready to put on your package then drop it in the post (or skip the queue at the post office and drop it at the counter or in the bag).&lt;br /&gt;
&lt;br /&gt;
The SmartStamp application has some great potential with the ever increasing eCommerce market and the increase in home based businesses.  Being able to print a little stamp is a huge benefit, even if it does require me to alter a multitude of settings every time I launch the application just to be able to do the same thing I do every time and create a simple stamp. &lt;br /&gt;
&lt;br /&gt;
I have to say Im still hugely disappointed that Royal Mail choice to charge so much to rent the application, I believe its cheaper than franking but then at least you get some discount on the postage with franking.  This is after all just another way to allow you to purchase Royal Mails main product, postage. &lt;br /&gt;
&lt;br /&gt;
You also have to watch out when you post your package as the stamp has a short life and if you miss the post your stamp may not be valid the next day.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SmartStamp is a registered trademark of Royal Mail.  All views expressed in my blog entries are personal views and do not represent the views of Analysis UK Ltd or anybody/business related to Analysis UK Ltd other than my self.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed,  9 Aug 2006 03:35:39 +0100</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/12-guid.html</guid>
    
</item>
<item>
    <title>What happened to .ws domain names?</title>
    <link>http://www.analysisuk.com/blog/archives/9-What-happened-to-.ws-domain-names.html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/9-What-happened-to-.ws-domain-names.html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=9</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=9</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    Sincere apologies to all trying to access &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=56&amp;amp;entry_id=9&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;BookSwap.ws&lt;/a&gt;, &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=51&amp;amp;entry_id=9&quot; title=&quot;http://www.CDSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.CDSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;CDSwap.ws&lt;/a&gt; or &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=52&amp;amp;entry_id=9&quot; title=&quot;http://www.DVDSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.DVDSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;DVDSwap.ws&lt;/a&gt;.  &lt;br /&gt;
&lt;br /&gt;
Something appears to have gone badly wrong with the .ws dns system.  Sites such as &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=53&amp;amp;entry_id=9&quot; title=&quot;http://www.visitsamoa.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.visitsamoa.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;visitsamoa.ws&lt;/a&gt; and &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=54&amp;amp;entry_id=9&quot; title=&quot;http://www.somoa.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.somoa.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;somoa.ws&lt;/a&gt; have been effected as well.  &lt;br /&gt;
&lt;br /&gt;
Its not a good thing when an entire domain name extension disappears from the internet!&lt;br /&gt;
&lt;br /&gt;
When I try and run a &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url=aHR0cDovL3d3dy5ETlNSZXBvcnQuY29t&amp;amp;entry_id=9&quot; title=&quot;http://www.DNSReport.com&quot;  onmouseover=&quot;window.status=&#039;http://www.DNSReport.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;DNSReport&lt;a/&gt; on them some DNS servers return empty name servers and others are reporting nothing at all (ns1.dns.ws).&lt;br /&gt;
&lt;br /&gt;
It appears over the last 2-3 hours things are starting to return to normal.  Hopefully I can stop pulling my hair out now. Ns1.dns.ws still returns nothing for &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=56&amp;amp;entry_id=9&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;BookSwap.ws&lt;/a&gt; but the other servers are returning the correct nameservers.&lt;br /&gt;
&lt;br /&gt;
Ive always wondered why I was able to get some really good domain names easily with the .ws extension, Guess I know one of the reasons now!&lt;br /&gt;
&lt;br /&gt;
The good news is that I updated &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=56&amp;amp;entry_id=9&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;BookSwap.ws&lt;/a&gt; et al over the last few nights with a new code base that Ive been working on for ages, this sees some background improvements to the sale transaction handling which was needed for future plans, improved pages for sale transactions management and some other smaller updates.  More updates to come soon.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 19 Jul 2006 22:48:05 +0100</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/9-guid.html</guid>
    
</item>
<item>
    <title>Electricity issues all around!</title>
    <link>http://www.analysisuk.com/blog/archives/8-Electricity-issues-all-around!.html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/8-Electricity-issues-all-around!.html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=8</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=8</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    Apparently Im not alone with UPS problems, looks like even the big boys over at &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=48&amp;amp;entry_id=8&quot; title=&quot;http://del.icio.us&quot;  onmouseover=&quot;window.status=&#039;http://del.icio.us&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;del.icio.us&lt;/a&gt; have been having &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=44&amp;amp;entry_id=8&quot; title=&quot;http://blog.del.icio.us/blog/2005/12/yet_another_pow.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.del.icio.us/blog/2005/12/yet_another_pow.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;more than their fair share of UPS issues&lt;/a&gt;.  Its only when you need the UPS you really find out if its up to the job!&lt;br /&gt;
&lt;br /&gt;
I have to take my hat off to them and complement them with the amount of feedback they are providing letting every body know whats going on.  Great work!&lt;br /&gt;
&lt;br /&gt;
Todays issue of &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=45&amp;amp;entry_id=8&quot; title=&quot;http://www.computing.co.uk&quot;  onmouseover=&quot;window.status=&#039;http://www.computing.co.uk&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Computing&lt;/a&gt; ran an article on the &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=46&amp;amp;entry_id=8&quot; title=&quot;http://www.computing.co.uk/computing/news/2150433/power-shortage-hits&quot;  onmouseover=&quot;window.status=&#039;http://www.computing.co.uk/computing/news/2150433/power-shortage-hits&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Power Shortages in IT&lt;/a&gt;, whilst its great to see the IT arena (and especially eCommerce) taking off so well after all we have been through since 2000 it is alarming to think about the amount of juice we are using.  Something tells me with all the electric being consumed in London my self and del.icio.us wont be the only ones blogging about UPS problems.&lt;br /&gt;
&lt;br /&gt;
So if you are relying on a UPS go give it a test now and if its not been exercised in a while (6+ months), go give it a deep discharge (when your computers not to busy), charge it up again then test it again.  Do it whilst you dont need it  next time you may just have spent an hour writing your blog for the electric to fail and the UPS to shut down with it!.&lt;br /&gt;
&lt;br /&gt;
I should probably mention that whilst my UPS let me down just recently, its been good for about 3 years now and saved me a numerous times, the power in my part of Cambridge has been somewhat unreliable, I bought the best of the consumer market devices, it runs 3 machines and 2 monitors with about 60% load  and if the power stays off for more than a blip I know its going to be off for hours so everything gets shut down cleanly and I plug the TV into the UPS!  thats assuming its to dark to read otherwise Id be reading one of my many &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=47&amp;amp;entry_id=8&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;books&lt;/a&gt;, ok, maybe Id also be heading off to the pub - for erm, food you know!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note to &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=48&amp;amp;entry_id=8&quot; title=&quot;http://del.icio.us&quot;  onmouseover=&quot;window.status=&#039;http://del.icio.us&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;del.icio.us - Great name!&lt;/a&gt;, just somewhat of a nightmare for us dyslexics that cant spell!  You can only imagine the attempts I have at entering the URL!  Odd how I can spell dyslexia though.&lt;br /&gt;
&lt;br /&gt;
My thought for today - it&#039;s when things go wrong that you really find out who you are dealing with.&lt;br /&gt;
&lt;br /&gt;
Does the issue get covered up?  Does it get swept under the carpet?  Do you get a run around? Or are you dealing with a great company that knows how important it&#039;s customers are to take the time and write blog entries to let you know what&#039;s going on and communicate their pain with you.    &lt;br /&gt;
&lt;br /&gt;
The company I previously used for hosting are know offering a great deal on bandwidth (odd, they had a totally terrible deal before, now it&#039;s gone to unlimited - from one extream to the other!), still I know their business practices are anti-customer and the customer support is truly poor so no chance of me returning to them, on the other hand &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=49&amp;amp;entry_id=8&quot; title=&quot;http://www.ev1servers.com&quot;  onmouseover=&quot;window.status=&#039;http://www.ev1servers.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;EV1 Server&lt;/a&gt; have just been fantastic!&lt;br /&gt;
&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 17 Feb 2006 01:22:24 +0000</pubDate>
    <guid isPermaLink="false">http://www.analysisuk.com/blog/archives/8-guid.html</guid>
    
</item>
<item>
    <title>When Backup systems bite back.</title>
    <link>http://www.analysisuk.com/blog/archives/7-When-Backup-systems-bite-back..html</link>
            <category>General</category>
    
    <comments>http://www.analysisuk.com/blog/archives/7-When-Backup-systems-bite-back..html#comments</comments>
    <wfw:comment>http://www.analysisuk.com/blog/wfwcomment.php?cid=7</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.analysisuk.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=7</wfw:commentRss>
    

    <author>nospam@example.com (Stephen Harrison)</author>
    <content:encoded>
    Im a firm believer in backups.  Data backups, spare part backups, uninterruptible power supplies, raid disks and stuff that should sit around in the background and help you when things go wrong.  However the last thing I expect of these systems is to introduce major failures.&lt;br /&gt;
&lt;br /&gt;
I got struct three times with this just recently with backup systems that decided they needed more attention.&lt;br /&gt;
&lt;br /&gt;
All the web sites I run are basically data driven, all the exchange rates for &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=31&amp;amp;entry_id=7&quot; title=&quot;http://www.Dollars2Pounds.com&quot;  onmouseover=&quot;window.status=&#039;http://www.Dollars2Pounds.com&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Dollars2Pounds&lt;/a&gt; are in a database, all the page impressions are logged into a database, all the &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=34&amp;amp;entry_id=7&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;used books for sale on BookSwap.ws&lt;/a&gt; are all in a database so the backups for these sites is a backup of the databases (which is stored on a separate machine or two), the actual application code doesnt need regular backups.&lt;br /&gt;
&lt;br /&gt;
The other week after the server had a bit of a hiccup I figured Id give the automated backups for the web sites a try, after all, if I needed to move to a new server this may save me some time.  I only set up 3 sites as its a slow process, Im so glad I only did 3 as two backup attempts latter I had to stop these.  I set the backups to occur weekly  as I said, nothing really changes on the actual front end so very little need for backups anyway.&lt;br /&gt;
&lt;br /&gt;
One of the things the web site control panels automated backup does is to take the site off line  now I can kind of understand this if data is being changed but really, most websites are static files (html, php, dlls)  so youd think these could be just copied.&lt;br /&gt;
&lt;br /&gt;
Have you spotted the snag so far, backup are really important, keeping your web site on line is also important  I dont think being offline for 30mins every day to do backups is all that acceptable for global eCommerce sites.&lt;br /&gt;
&lt;br /&gt;
So what happened, well the backup for &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=34&amp;amp;entry_id=7&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;BookSwap.ws&lt;/a&gt; started, the site was taken off line, then, well, the backup appears to have failed and the site never got put back on line.  No details of this in the control panel for the site and I even had to go as far as editing the setup to kick the site back online.  It was a very evil situation that I was VERY unhappy with.  When I realised what had happened I canned the automated backups immediately.&lt;br /&gt;
&lt;br /&gt;
Then 2 weeks latter I found out the secure server part of &lt;a href=&quot;http://www.analysisuk.com/blog/exit.php?url_id=34&amp;amp;entry_id=7&quot; title=&quot;http://www.BookSwap.ws&quot;  onmouseover=&quot;window.status=&#039;http://www.BookSwap.ws&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;BookSwap.ws&lt;/a&gt; was off line, this meant transactions, &quot;my account&quot; and member login were all unavailable  not a funny situation.  Guess who had setup automated backups and forgotten to disable them on this account!  &lt;br /&gt;
&lt;br /&gt;
Having finally got rid of the web site automated backups (remember the database is backed up separately!) the websites have been up and running without any problems since.&lt;b