<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5128599798485935180</id><updated>2012-02-26T06:46:39.617-08:00</updated><category term='Arduino'/><category term='configuration'/><category term='cable'/><category term='BPI-216'/><category term='software'/><category term='OLED'/><category term='graphics'/><category term='SGX-120'/><category term='GLO-216'/><category term='SGX-120L'/><category term='GLO-416'/><category term='serial display'/><category term='BPI-216N'/><category term='Serial Sender'/><category term='BPI-216L'/><category term='serial port'/><category term='USB'/><title type='text'>Seetron Tech</title><subtitle type='html'>Hints and Tips for Serial Displays from Seetron Tech Support.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-4519755069250632412</id><published>2012-02-24T13:33:00.002-08:00</published><updated>2012-02-24T13:35:51.711-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serial display'/><category scheme='http://www.blogger.com/atom/ns#' term='BPI-216'/><category scheme='http://www.blogger.com/atom/ns#' term='BPI-216N'/><category scheme='http://www.blogger.com/atom/ns#' term='BPI-216L'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-216'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>Cleaner Arduino Coding with Streaming</title><content type='html'>Arduino &lt;code&gt;Serial.Print()&lt;/code&gt; and &lt;code&gt;Serial.Write()&lt;/code&gt; instructions multiply like bunnies in applications that use serial output for debugging or to drive serial displays. If only related instructions, variables and strings could be neatly packaged for serial output using a single instruction...Turns out that they &lt;i&gt;can&lt;/i&gt;, and with &lt;i&gt;zero&lt;/i&gt; code overhead. All that's required is the Streaming library from &lt;a href="http://arduiniana.org/libraries/streaming/" target="_blank"&gt;Arduiniana.org&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Once you copy the Streaming folder into your Arduino Libraries directory, you can &lt;code&gt;#include &amp;lt;Streaming.h&amp;gt;&lt;/code&gt; into your programs and go from this: &lt;br /&gt;&lt;br /&gt;&lt;code&gt;Serial.Print("x= ") ;&lt;br /&gt;Serial.Print(varX) ;&lt;br /&gt;Serial.Print(" y= ");&lt;br /&gt;Serial.Print(varY);&lt;br /&gt;//ad nauseum &lt;/code&gt;&lt;br /&gt;&lt;br /&gt;to this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Serial&amp;lt;&amp;lt;"x= "&amp;lt;&amp;lt;varX&amp;lt;&amp;lt;" y= "&amp;lt;&amp;lt;varY;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Slick, eh? Below is an example that drives a &lt;a href="http://seetron.com/bpi216.html" target="_blank"&gt;BPI-216 serial LCD&lt;/a&gt; or &lt;a href="http://seetron.com/glo216.html" target="_blank"&gt;GLO-216Y/G serial OLED&lt;/a&gt;. (Although the GLOs have a larger, more extensive instruction set, they understand a subset of LCD instructions, too.)&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #111111;"&gt;&lt;span style="color: #339900;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;Streaming&amp;nbsp;Example&amp;nbsp;for&amp;nbsp;BPI-216&amp;nbsp;Serial&amp;nbsp;LCD&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;(Will&amp;nbsp;run&amp;nbsp;on&amp;nbsp;GLO-216Y/G,&amp;nbsp;too,&amp;nbsp;thanks&amp;nbsp;to&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;limited&amp;nbsp;BPI&amp;nbsp;emulation.)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;Arduiniana.org&amp;nbsp;offers&amp;nbsp;an&amp;nbsp;Arduino&amp;nbsp;library&amp;nbsp;that&amp;nbsp;enables&amp;nbsp;C++&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;style&amp;nbsp;"streaming"&amp;nbsp;notation&amp;nbsp;for&amp;nbsp;serial&amp;nbsp;output.&amp;nbsp;Streaming&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;really&amp;nbsp;helps&amp;nbsp;tighten&amp;nbsp;up&amp;nbsp;multi-part&amp;nbsp;Prints&amp;nbsp;by&amp;nbsp;allowing&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;you&amp;nbsp;to&amp;nbsp;combine&amp;nbsp;multiple&amp;nbsp;strings,&amp;nbsp;chars,&amp;nbsp;bytes&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;variables&amp;nbsp;into&amp;nbsp;a&amp;nbsp;single&amp;nbsp;line&amp;nbsp;that&amp;nbsp;get&amp;nbsp;'funneled'&amp;nbsp;into&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;the&amp;nbsp;serial&amp;nbsp;object&amp;nbsp;by&amp;nbsp;a&amp;nbsp;series&amp;nbsp;of&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;symbols.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;SoftwareSerial.h&amp;gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// New SoftSerial, Arduino v1.0+&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;&lt;span style="color: #cc6600;"&gt;Streaming&lt;/span&gt;.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;rxPin&amp;nbsp;255&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Not used, so set to invalid pin #&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;txPin&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Hook BPI/BPK SER input to Arduino pin 3.&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;inverted&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Set serial-output polarity to inverted&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//BPI&amp;nbsp;Clear-Screen&amp;nbsp;instruction,&amp;nbsp;plus&amp;nbsp;a&amp;nbsp;redundant&amp;nbsp;Position-to-0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//instruction&amp;nbsp;for&amp;nbsp;timing&amp;nbsp;purposes.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;CLS&amp;nbsp;&lt;span style="color: #006699;"&gt;"\xFE\x01\xFE\x80"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//BPI&amp;nbsp;Go-To-Start-of-Line-2&amp;nbsp;instruction.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;L2&amp;nbsp;&lt;span style="color: #006699;"&gt;"\xFE\xC0"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;/*&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;Set&amp;nbsp;up&amp;nbsp;a&amp;nbsp;new&amp;nbsp;serial&amp;nbsp;output&amp;nbsp;using&amp;nbsp;the&amp;nbsp;pin&amp;nbsp;definitions&amp;nbsp;above.&amp;nbsp;Note&amp;nbsp;the&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;"inverted,"&amp;nbsp;which&amp;nbsp;instructs&amp;nbsp;SoftwareSerial&amp;nbsp;to&amp;nbsp;output&amp;nbsp;BPI/BPK-compatible&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;inverted-TTL&amp;nbsp;serial&amp;nbsp;(like&amp;nbsp;RS-232,&amp;nbsp;but&amp;nbsp;without&amp;nbsp;the&amp;nbsp;+/-&amp;nbsp;voltage&amp;nbsp;swing).&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;SoftwareSerial&amp;nbsp;mySerial&amp;nbsp;=&amp;nbsp;&amp;nbsp;SoftwareSerial(rxPin,&amp;nbsp;txPin,&amp;nbsp;inverted);&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;The&amp;nbsp;Serial&amp;nbsp;dot-Print&amp;nbsp;method&amp;nbsp;handles&amp;nbsp;all&amp;nbsp;sorts&amp;nbsp;of&amp;nbsp;data,&amp;nbsp;including&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;automatic&amp;nbsp;conversion&amp;nbsp;of&amp;nbsp;floats&amp;nbsp;to&amp;nbsp;strings&amp;nbsp;(with&amp;nbsp;two&amp;nbsp;digits&amp;nbsp;after&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;the&amp;nbsp;decimal&amp;nbsp;point).&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;float&lt;/span&gt; pi = 3.14159; &lt;span style="color: #339900;"&gt;// Print prints floats.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; two = 2 ;  &lt;span style="color: #339900;"&gt;// Print also prints ints (as does &amp;lt;&amp;lt;) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;()  {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// define pin modes for tx, rx:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(txPin, &lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);   &lt;span style="color: #339900;"&gt;// Stop bit state for inverted serial&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;pinMode&lt;/span&gt;(txPin, &lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;begin&lt;/span&gt;(9600);    &lt;span style="color: #339900;"&gt;// Set the data rate&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(1000);              &lt;span style="color: #339900;"&gt;// wait.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Here's the magical "Streaming" part. The line that follows &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// replaces seven lines of "mySerial.Print(...)" instructions. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial&amp;lt;&amp;lt;CLS&amp;nbsp;&amp;lt;&amp;lt;&lt;span style="color: #006699;"&gt;"Pi is "&lt;/span&gt; &amp;lt;&amp;lt;pi &amp;lt;&amp;lt;L2 &amp;lt;&amp;lt;&lt;span style="color: #006699;"&gt;"Good "&lt;/span&gt;&amp;lt;&amp;lt;two &amp;lt;&amp;lt;&lt;span style="color: #006699;"&gt;" know."&lt;/span&gt;;  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// ...&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-4519755069250632412?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/4519755069250632412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2012/02/cleaner-arduino-coding-with-streaming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/4519755069250632412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/4519755069250632412'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2012/02/cleaner-arduino-coding-with-streaming.html' title='Cleaner Arduino Coding with Streaming'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-1275390994193571051</id><published>2012-02-07T12:48:00.000-08:00</published><updated>2012-02-13T10:38:44.801-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serial display'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-216'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='OLED'/><title type='text'>Arduino ISR Clock Demo</title><content type='html'>The engineering blog &lt;a href="http://engblaze.com/"&gt;engblaze.com&lt;/a&gt; recently posted a great tutorial on using &lt;a href="http://www.engblaze.com/microcontroller-tutorial-avr-and-arduino-timer-interrupts/" target="_blank"&gt;Arduino/AVR timer interrupts&lt;/a&gt;. This led to a lunch-hour challenge: To convert their once-a-second LED blinker into a minimal 7-segment-style clock display using our &lt;a href="http://seetron.com/glo216.html" target="_blank"&gt;GLO-216G serial OLED&lt;/a&gt;. Mission accomplished:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/elHQhV64gGE/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/elHQhV64gGE&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/elHQhV64gGE&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;The clock program is minimal. All I did was take the excellent Engblaze timer/interrupt framework and drop in functions to keep time and do the serial stuff to drive the display. What may be of interest to Arduino programmers is the way that I organized the time values: Rather than declare separate variables to hold the hours, minutes and seconds, I used a single char array.&lt;br /&gt;&lt;br /&gt;Since a char array that ends with null/zero in the last position is also a string for the purposes of Arduino serial routines, this approach allowed me to avoid the typical Arduino bugaboo of &amp;nbsp;needing multiple serial "print" instructions to print a list of variables.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #111111;"&gt;&lt;span style="color: #339900;"&gt;/*&amp;nbsp;Simple&amp;nbsp;Clock&amp;nbsp;Demo&amp;nbsp;for&amp;nbsp;GLO-216Y/G&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;A&amp;nbsp;tutorial&amp;nbsp;at&amp;nbsp;engblaze.com&amp;nbsp;shows&amp;nbsp;how&amp;nbsp;to&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;set&amp;nbsp;up&amp;nbsp;AVR&amp;nbsp;timers&amp;nbsp;to&amp;nbsp;fire&amp;nbsp;an&amp;nbsp;interrupt&amp;nbsp;at&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;regular&amp;nbsp;intervals--in&amp;nbsp;this&amp;nbsp;case&amp;nbsp;1.0000&amp;nbsp;second.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;The&amp;nbsp;engblaze&amp;nbsp;program&amp;nbsp;toggles&amp;nbsp;an&amp;nbsp;LED&amp;nbsp;every&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;second.&amp;nbsp;This&amp;nbsp;version,&amp;nbsp;for&amp;nbsp;the&amp;nbsp;Arduino&amp;nbsp;Uno,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;runs&amp;nbsp;a&amp;nbsp;24-hour&amp;nbsp;clock&amp;nbsp;and&amp;nbsp;shows&amp;nbsp;the&amp;nbsp;time&amp;nbsp;on&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;a&amp;nbsp;GLO-216Y/G&amp;nbsp;serial&amp;nbsp;OLED&amp;nbsp;display.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;=Program&amp;nbsp;is&amp;nbsp;written&amp;nbsp;for&amp;nbsp;GLO-216Y/G&amp;nbsp;with&amp;nbsp;intact&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;Spol&amp;nbsp;jumper&amp;nbsp;(inverted&amp;nbsp;serial).&amp;nbsp;Connect&amp;nbsp;GLO&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;SER&amp;nbsp;to&amp;nbsp;Arduino&amp;nbsp;pin&amp;nbsp;3;&amp;nbsp;power&amp;nbsp;to&amp;nbsp;+5&amp;nbsp;and&amp;nbsp;GND.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;avr-libc&amp;nbsp;library&amp;nbsp;includes&amp;nbsp;for&amp;nbsp;timer&amp;nbsp;ISR&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;avr/io.h&amp;gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Software&amp;nbsp;Serial&amp;nbsp;Stuff&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;#define&amp;nbsp;rxPin&amp;nbsp;255&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Not used, set to invalid #&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;txPin&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// GLO input to this Arduino pin&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;inverted&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// If GLO-216 Spol jumper is intact  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Instructions&amp;nbsp;sent&amp;nbsp;to&amp;nbsp;GLO-216Y/G&amp;nbsp;at&amp;nbsp;startup.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;0x0c&amp;nbsp;=&amp;nbsp;clear&amp;nbsp;the&amp;nbsp;screen.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;0x03,0x02,0x02,0x02&amp;nbsp;=&amp;nbsp;Set&amp;nbsp;big&amp;nbsp;font.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;0x19&amp;nbsp;=&amp;nbsp;Use&amp;nbsp;the&amp;nbsp;7-segment&amp;nbsp;number&amp;nbsp;font.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;char&lt;/span&gt; const gloSetup[] = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x0c,0x03,0x02,0x02,0x02,0x13,0x00&amp;nbsp;}&amp;nbsp;&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Dual-use&amp;nbsp;char-array&amp;nbsp;string&amp;nbsp;==========================&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;As&amp;nbsp;an&amp;nbsp;array,&amp;nbsp;it&amp;nbsp;stores&amp;nbsp;the&amp;nbsp;digits&amp;nbsp;of&amp;nbsp;the&amp;nbsp;time&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;hh&amp;nbsp;mm&amp;nbsp;ss.&amp;nbsp;Functions&amp;nbsp;below&amp;nbsp;increment&amp;nbsp;the&amp;nbsp;digits&amp;nbsp;as&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;appropriate&amp;nbsp;for&amp;nbsp;their&amp;nbsp;units&amp;nbsp;(0-59&amp;nbsp;for&amp;nbsp;minutes&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;seconds,&amp;nbsp;0-23&amp;nbsp;for&amp;nbsp;hours).&amp;nbsp;Digits&amp;nbsp;are&amp;nbsp;stored&amp;nbsp;as&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;ASCII&amp;nbsp;characters&amp;nbsp;rather&amp;nbsp;than&amp;nbsp;raw&amp;nbsp;values,&amp;nbsp;allowing&amp;nbsp;for&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;the&amp;nbsp;string&amp;nbsp;to&amp;nbsp;be&amp;nbsp;printed&amp;nbsp;without&amp;nbsp;further&amp;nbsp;processing.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;In&amp;nbsp;addition&amp;nbsp;to&amp;nbsp;the&amp;nbsp;digits,&amp;nbsp;the&amp;nbsp;string&amp;nbsp;also&amp;nbsp;contains&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;a&amp;nbsp;pair&amp;nbsp;of&amp;nbsp;':'&amp;nbsp;characters,&amp;nbsp;and&amp;nbsp;starts&amp;nbsp;with&amp;nbsp;the&amp;nbsp;GLO&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;home-cursor&amp;nbsp;instruction&amp;nbsp;0x01.&amp;nbsp;Packing&amp;nbsp;the&amp;nbsp;digits,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;colons&amp;nbsp;and&amp;nbsp;formatting&amp;nbsp;instruction&amp;nbsp;together&amp;nbsp;in&amp;nbsp;one&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;string&amp;nbsp;allows&amp;nbsp;the&amp;nbsp;time&amp;nbsp;to&amp;nbsp;be&amp;nbsp;updated&amp;nbsp;in&amp;nbsp;one&amp;nbsp;"print."&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;char&lt;/span&gt; hmsTime[10] = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x01,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #006699;"&gt;'1'&lt;/span&gt;,&lt;span style="color: #006699;"&gt;'2'&lt;/span&gt;,&lt;span style="color: #006699;"&gt;':'&lt;/span&gt;,&lt;span style="color: #006699;"&gt;'4'&lt;/span&gt;,&lt;span style="color: #006699;"&gt;'1'&lt;/span&gt;,&lt;span style="color: #006699;"&gt;':'&lt;/span&gt;,&lt;span style="color: #006699;"&gt;'5'&lt;/span&gt;,&lt;span style="color: #006699;"&gt;'0'&lt;/span&gt;,0x00} &lt;br /&gt;;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Defining&amp;nbsp;names&amp;nbsp;for&amp;nbsp;the&amp;nbsp;digit&amp;nbsp;positions&amp;nbsp;in&amp;nbsp;the&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;time&amp;nbsp;string&amp;nbsp;makes&amp;nbsp;it&amp;nbsp;easier&amp;nbsp;to&amp;nbsp;read&amp;nbsp;the&amp;nbsp;functions&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;that&amp;nbsp;increment&amp;nbsp;the&amp;nbsp;time&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;sOnes&amp;nbsp;8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Ones digit of seconds. &lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;sTens&amp;nbsp;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Tens digit of seconds. &lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;msColon&amp;nbsp;6&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// ':' between minutes and seconds.&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;mOnes&amp;nbsp;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Ones digit of minutes.&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;mTens&amp;nbsp;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Tens digit of minutes. &lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;hmColon&amp;nbsp;3&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// ':' between hours and minutes.&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;hOnes&amp;nbsp;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Ones digit of hours.&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;hTens&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Tens digit of hours.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Establish&amp;nbsp;a&amp;nbsp;soft&amp;nbsp;serial&amp;nbsp;port&amp;nbsp;using&amp;nbsp;the&amp;nbsp;pin&amp;nbsp;definitions&amp;nbsp;above.&lt;/span&gt;&lt;br /&gt;SoftwareSerial&amp;nbsp;mySerial&amp;nbsp;=&amp;nbsp;&amp;nbsp;SoftwareSerial(rxPin,&amp;nbsp;txPin,&amp;nbsp;inverted);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Set&amp;nbsp;up&amp;nbsp;the&amp;nbsp;Soft&amp;nbsp;Serial&amp;nbsp;output&amp;nbsp;and&amp;nbsp;send&amp;nbsp;the&amp;nbsp;GLO&amp;nbsp;its&amp;nbsp;setup&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;instructions.&amp;nbsp;Then,&amp;nbsp;using&amp;nbsp;code&amp;nbsp;copied&amp;nbsp;from&amp;nbsp;engblaze.com,&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;set&amp;nbsp;up&amp;nbsp;a&amp;nbsp;timer&amp;nbsp;to&amp;nbsp;fire&amp;nbsp;an&amp;nbsp;ISR&amp;nbsp;at&amp;nbsp;precise&amp;nbsp;1-second&amp;nbsp;intervals.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(txPin, &lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);   &lt;span style="color: #339900;"&gt;// Stop bit state for &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;pinMode&lt;/span&gt;(txPin, &lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);    &lt;span style="color: #339900;"&gt;// &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;begin&lt;/span&gt;(9600);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(500);              &lt;span style="color: #339900;"&gt;// wait &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(gloSetup);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// initialize Timer1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;cli();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// disable global interrupts&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;TCCR1A&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// set entire TCCR1A register to 0&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;TCCR1B&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// same for TCCR1B&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// set compare match register to desired timer count:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;OCR1A&amp;nbsp;=&amp;nbsp;15624;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// turn on CTC mode:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;TCCR1B&amp;nbsp;|=&amp;nbsp;(1&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;WGM12);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Set CS10 and CS12 bits for 1024 prescaler:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;TCCR1B&amp;nbsp;|=&amp;nbsp;(1&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;CS10);&lt;br /&gt;&amp;nbsp;&amp;nbsp;TCCR1B&amp;nbsp;|=&amp;nbsp;(1&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;CS12);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// enable timer compare interrupt:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;TIMSK1&amp;nbsp;|=&amp;nbsp;(1&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;OCIE1A);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// enable global interrupts:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;sei();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Nothing&amp;nbsp;in&amp;nbsp;the&amp;nbsp;loop.&amp;nbsp;All&amp;nbsp;the&amp;nbsp;action&amp;nbsp;is&amp;nbsp;in&amp;nbsp;the&amp;nbsp;ISR.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Put your code here.  &lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Timer&amp;nbsp;fires&amp;nbsp;this&amp;nbsp;ISR&amp;nbsp;every&amp;nbsp;second.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;ISR(TIMER1_COMPA_vect)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(hmsTime);  &lt;span style="color: #339900;"&gt;// print the string. &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;incSeconds()&amp;nbsp;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// update for next time. &lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Timekeeping&amp;nbsp;routines&amp;nbsp;=======================&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;The&amp;nbsp;digits&amp;nbsp;of&amp;nbsp;the&amp;nbsp;hours,&amp;nbsp;&amp;nbsp;minutes&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;second&amp;nbsp;are&amp;nbsp;stored&amp;nbsp;as&amp;nbsp;characters&amp;nbsp;in&amp;nbsp;a&amp;nbsp;char-&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;array&amp;nbsp;string.&amp;nbsp;Since&amp;nbsp;the&amp;nbsp;only&amp;nbsp;math&amp;nbsp;needed&amp;nbsp;is&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;increment&amp;nbsp;(and&amp;nbsp;carry-the-one),&amp;nbsp;it's&amp;nbsp;efficient&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;to&amp;nbsp;just&amp;nbsp;work&amp;nbsp;with&amp;nbsp;the&amp;nbsp;chars&amp;nbsp;rather&amp;nbsp;than&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;regular&amp;nbsp;integers&amp;nbsp;(or&amp;nbsp;bytes,&amp;nbsp;etc.).&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;============================================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//Increment&amp;nbsp;seconds.&amp;nbsp;If&amp;nbsp;seconds&amp;nbsp;value&amp;nbsp;exceeds&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//59,&amp;nbsp;increment&amp;nbsp;minutes.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; incSeconds() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;hmsTime[sOnes]&amp;nbsp;+=&amp;nbsp;1&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (hmsTime[sOnes] &amp;gt; &lt;span style="color: #006699;"&gt;'9'&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[sOnes]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #006699;"&gt;'0'&lt;/span&gt; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[sTens]&amp;nbsp;+=&amp;nbsp;1&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (hmsTime[sTens] &amp;gt; &lt;span style="color: #006699;"&gt;'5'&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[sTens]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #006699;"&gt;'0'&lt;/span&gt; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incMinutes();&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//Increment&amp;nbsp;minutes.&amp;nbsp;If&amp;nbsp;minutes&amp;nbsp;value&amp;nbsp;exceeds&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//59,&amp;nbsp;increment&amp;nbsp;hours.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; incMinutes() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;hmsTime[mOnes]&amp;nbsp;+=&amp;nbsp;1&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (hmsTime[mOnes] &amp;gt; &lt;span style="color: #006699;"&gt;'9'&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[mOnes]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #006699;"&gt;'0'&lt;/span&gt; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[mTens]&amp;nbsp;+=&amp;nbsp;1&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (hmsTime[mTens] &amp;gt; &lt;span style="color: #006699;"&gt;'5'&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[mTens]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #006699;"&gt;'0'&lt;/span&gt; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;incHours()&amp;nbsp;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//Increment&amp;nbsp;hours.&amp;nbsp;If&amp;nbsp;hours&amp;nbsp;value&amp;nbsp;exceeds&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//23,&amp;nbsp;rollover&amp;nbsp;to&amp;nbsp;0.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; incHours() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (hmsTime[hTens] == &lt;span style="color: #006699;"&gt;'2'&lt;/span&gt; &amp;amp;&amp;amp; hmsTime[hOnes] == &lt;span style="color: #006699;"&gt;'3'&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[hOnes]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #006699;"&gt;'0'&lt;/span&gt; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[hTens]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #006699;"&gt;'0'&lt;/span&gt; ;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[hOnes]&amp;nbsp;+=&amp;nbsp;1&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (hmsTime[hOnes] &amp;gt; &lt;span style="color: #006699;"&gt;'9'&lt;/span&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[hOnes]&amp;nbsp;=&amp;nbsp;&lt;span style="color: #006699;"&gt;'0'&lt;/span&gt; ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hmsTime[hTens]&amp;nbsp;+=&amp;nbsp;1&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-1275390994193571051?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/1275390994193571051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2012/02/arduino-isr-clock-demo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/1275390994193571051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/1275390994193571051'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2012/02/arduino-isr-clock-demo.html' title='Arduino ISR Clock Demo'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-1513759341826774507</id><published>2012-01-19T12:24:00.000-08:00</published><updated>2012-02-13T10:38:26.667-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serial display'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Serial Sender'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-216'/><category scheme='http://www.blogger.com/atom/ns#' term='OLED'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-416'/><title type='text'>Custom Character Demo with Serial Sender</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RKcNiqHDpSU/TyHIY7eFiwI/AAAAAAAAAGI/J2dM9mQVM3k/s1600/lockun.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="191" src="http://4.bp.blogspot.com/-RKcNiqHDpSU/TyHIY7eFiwI/AAAAAAAAAGI/J2dM9mQVM3k/s200/lockun.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://seetrontech.blogspot.com/2011/08/introduction-to-serial-sender.html" target="_blank"&gt;Serial Sender&lt;/a&gt;, our free Windows tool for sending text and data via a comm port or &lt;a href="http://seetrontech.blogspot.com/2011/08/port-and-power-for-serial-displays-with.html" target="_blank"&gt;USB adapter&lt;/a&gt;, has been updated to v1.2. Previous versions allowed you to send arbitrary bytes by wrapping their decimal values in angle brackets, like so: &lt;code&gt;&amp;lt;65&amp;gt;&lt;/code&gt;. The update allows bytes expressed as hex: &lt;code&gt;&amp;lt;0x41&amp;gt;&lt;/code&gt;. Some values, particularly bit patterns, are easier to work with in hex. Coincidentally, a user asked for guidance on defining custom characters for the &lt;a href="http://seetron.com/glo216.html" target="_blank"&gt;GLO-216&lt;/a&gt; with Serial Sender, so here it is:&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Our serial OLED displays, &lt;a href="http://seetron.com/glo216.html" target="_blank"&gt;GLO-216&lt;/a&gt; and &lt;a href="http://seetron.com/glo416.html" target="_blank"&gt;GLO-416&lt;/a&gt;&amp;nbsp;superficially resemble serial LCD modules. They fit the same mounting holes, have similar screen sizes, etc. But they are entirely different (superior!) displays, with better brightness, contrast and efficiency, support for multiple, large font sizes and a convenient serial interface.&lt;br /&gt;&lt;br /&gt;One minor area of improvement is custom-character support. LCDs have eight, non-reusable custom characters—GLOs have 16 reusable custom characters. By "reusable" I mean that the same character can be printed and redefined on the same screen. GLOs allow this, but LCDs do not. When you redefine an LCD custom character, previously printed instances of that character change to the new pattern, garbling your screen.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GLO-216/416 Custom Characters.&lt;/b&gt; Custom characters occupy character codes 128 - 143 in the GLO character set. Defaults look like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-vPT9_rAcTE4/TxhqVKM-nbI/AAAAAAAAAEk/AnrXGE5Xx5E/s1600/gloccset.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-vPT9_rAcTE4/TxhqVKM-nbI/AAAAAAAAAEk/AnrXGE5Xx5E/s1600/gloccset.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Suppose we want to change character 128, the large degree ° symbol, to a padlock icon to indicate limited access or write-protection. First stop would be the Seetron site to use the &lt;a href="http://seetron.com/apps/app_cceditor.html"&gt;online bitmap designer&lt;/a&gt;. Clickety-click, and the icon is designed: &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-EKdMuMTRLCQ/Txhr98m7iAI/AAAAAAAAAEw/yMJZ3jfpR5g/s1600/cceditor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="211" src="http://1.bp.blogspot.com/-EKdMuMTRLCQ/Txhr98m7iAI/AAAAAAAAAEw/yMJZ3jfpR5g/s320/cceditor.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Highlight the bitmap data in either format (decimal or hex) and copy it to the clipboard. Then open Serial Sender and type in the redefine-character instruction as described in the &lt;a href="http://seetron.com/glo216/glo216prog.html#escape"&gt;programmer's reference&lt;/a&gt;. Paste the bitmap data into the instruction. Result: &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-i8RoiGm1zBg/TxhthBPDvmI/AAAAAAAAAE8/bMZe9BGncjs/s1600/definecc0.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="265" src="http://2.bp.blogspot.com/-i8RoiGm1zBg/TxhthBPDvmI/AAAAAAAAAE8/bMZe9BGncjs/s320/definecc0.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Click &lt;code&gt;Send&lt;/code&gt; to download the pattern to the display. Repeat the process, making an open padlock in the bitmap designer, pasting the data into Serial Sender, and changing the ESC instruction from &lt;code&gt;D0&lt;/code&gt; to &lt;code&gt;d0&lt;/code&gt; (lowercase 'd'). This targets custom character 8, which lives at code 136. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Shk6qLpy_nI/TxhwMIAuAmI/AAAAAAAAAFc/cwlIZ7B1244/s1600/definecc8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="265" src="http://1.bp.blogspot.com/-Shk6qLpy_nI/TxhwMIAuAmI/AAAAAAAAAFc/cwlIZ7B1244/s320/definecc8.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now the fun part, testing the new characters. Clear the text box, type and Send:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;L,128&amp;gt; Locked&amp;lt;M,136&amp;gt; Unlocked&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-AsIfsAGbEe8/Txhw-phBYII/AAAAAAAAAFo/MxRkiqUcbxw/s1600/glolockunlock1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="275" src="http://2.bp.blogspot.com/-AsIfsAGbEe8/Txhw-phBYII/AAAAAAAAAFo/MxRkiqUcbxw/s320/glolockunlock1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;So far, all of this is very similar to stuff you can do with an LCD. Let's try something specific to the GLO-216— using the font-size capabilities. Type and send:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;L,C,B,128&amp;gt; Locked&amp;lt;C,P,74&amp;gt;unlock&amp;lt;P,89,126&amp;gt;exit&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-eiwVTU3kY_w/Txh1JvowS7I/AAAAAAAAAF0/NF1iIx_gvOM/s1600/glolockunlock2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://1.bp.blogspot.com/-eiwVTU3kY_w/Txh1JvowS7I/AAAAAAAAAF0/NF1iIx_gvOM/s320/glolockunlock2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;How about a big icon? Type and send:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;L,C,B,B,B,128,C&amp;gt; Access Denied&amp;lt;P,83&amp;gt;Abort/Retry?&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-oOfMSPMqDos/Txh40A7M5eI/AAAAAAAAAGA/nM-3EQhxZhE/s1600/glolbiglock.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://3.bp.blogspot.com/-oOfMSPMqDos/Txh40A7M5eI/AAAAAAAAAGA/nM-3EQhxZhE/s320/glolbiglock.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If your custom characters are useful, you may want to save them to the GLO's flash memory. Easy: type and send &lt;code&gt;&amp;lt;ESC&amp;gt;x0&lt;/code&gt; (that's a lowercase 'x' and the number zero).&lt;br /&gt;&lt;br /&gt;I've gone pretty fast here, presenting the Serial Sender sequences without much explanation. Basically it boils down to this: Instructions are listed in our documentation by control code, decimal code and hex code. You can use any of these sandwiched between &amp;lt; &amp;gt; brackets in Serial Sender, much as you can define constants in various ways in a programming language. Using Serial Sender to understand and debug sequences of instructions can be a real time saver. And of course if you still have questions, email tech at seetron dot com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-1513759341826774507?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/1513759341826774507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2012/01/custom-character-demo-with-serial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/1513759341826774507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/1513759341826774507'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2012/01/custom-character-demo-with-serial.html' title='Custom Character Demo with Serial Sender'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-RKcNiqHDpSU/TyHIY7eFiwI/AAAAAAAAAGI/J2dM9mQVM3k/s72-c/lockun.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-5378595755422613761</id><published>2012-01-05T13:53:00.000-08:00</published><updated>2012-02-13T10:37:57.067-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GLO-216'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>Odometer-effect Counter with Arduino and GLO-216 Serial OLED</title><content type='html'>Using a custom character in an unusual way, you can create a fun rolling-odometer visual effect with a &lt;a href="http://seetron.com/glo216.html" target="_blank"&gt;GLO-type serial OLED&lt;/a&gt;. We've posted a sample Arduino program that does the trick. Here's a quick video:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/zlDqYXCbl3Q/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zlDqYXCbl3Q?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/zlDqYXCbl3Q?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Program listing is after the jump. (It's been tweaked slightly since first publication; now uses PROGMEM to store the digit bitmaps and instructions in program memory, sparing precious Arduino RAM.)&lt;/div&gt;&lt;div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="background-color: #111111;"&gt;&lt;span style="color: #339900;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;Arduinodometer!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;(GLO-216&amp;nbsp;and&amp;nbsp;Arduino&amp;nbsp;Uno)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;This&amp;nbsp;program&amp;nbsp;demonstrates&amp;nbsp;a&amp;nbsp;fun&amp;nbsp;visual&amp;nbsp;effect&amp;nbsp;in&amp;nbsp;which&amp;nbsp;the&amp;nbsp;final&amp;nbsp;digit&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;of&amp;nbsp;a&amp;nbsp;counter&amp;nbsp;is&amp;nbsp;animated&amp;nbsp;to&amp;nbsp;'roll&amp;nbsp;up,'&amp;nbsp;like&amp;nbsp;the&amp;nbsp;tenths-of-a-mile&amp;nbsp;digit&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;on&amp;nbsp;a&amp;nbsp;mechanical&amp;nbsp;odometer.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;Connect&amp;nbsp;the&amp;nbsp;GLO-&amp;nbsp;to&amp;nbsp;the&amp;nbsp;Arduino&amp;nbsp;+5&amp;nbsp;and&amp;nbsp;GND,&amp;nbsp;with&amp;nbsp;serial&amp;nbsp;input&amp;nbsp;from&amp;nbsp;pin&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;3&amp;nbsp;(using&amp;nbsp;NewSoftSerial&amp;nbsp;library&amp;nbsp;or&amp;nbsp;Arduino&amp;nbsp;v1.0+).&amp;nbsp;If&amp;nbsp;the&amp;nbsp;Spol&amp;nbsp;jumper&amp;nbsp;on&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;your&amp;nbsp;GLO-&amp;nbsp;has&amp;nbsp;been&amp;nbsp;cut&amp;nbsp;(for&amp;nbsp;UART-direct&amp;nbsp;input),&amp;nbsp;change&amp;nbsp;the&amp;nbsp;parameter&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;"inverted"&amp;nbsp;to&amp;nbsp;"noninverted"&amp;nbsp;in&amp;nbsp;the&amp;nbsp;program&amp;nbsp;line:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;SoftwareSerial&amp;nbsp;mySerial&amp;nbsp;=&amp;nbsp;&amp;nbsp;SoftwareSerial(rxPin,&amp;nbsp;txPin,&amp;nbsp;inverted);&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;avr/pgmspace.h&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// needed for PROGMEM&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;SoftwareSerial.h&amp;gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// use any pin for serial out&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;rxPin&amp;nbsp;255&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Not used, set to invalid pin #&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;txPin&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Plug GLO's serial input  into this pin.&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;inverted&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// If GLO- Spol jumper is intact (COM-polarity)&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;noninverted&amp;nbsp;0&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// If GLO Spol jumper is cut (UART polarity)&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;odoChar&amp;nbsp;0x8F&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Custom character 15, at ASCII 143&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Bitmaps&amp;nbsp;for&amp;nbsp;the&amp;nbsp;digits&amp;nbsp;"0"&amp;nbsp;-&amp;nbsp;"9".&amp;nbsp;Using&amp;nbsp;PROGMEM&amp;nbsp;to&amp;nbsp;store&amp;nbsp;them&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;in&amp;nbsp;Flash.&amp;nbsp;This&amp;nbsp;saves&amp;nbsp;80&amp;nbsp;bytes&amp;nbsp;of&amp;nbsp;Arduino&amp;nbsp;RAM&amp;nbsp;(at&amp;nbsp;the&amp;nbsp;expense&amp;nbsp;of&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;some&amp;nbsp;code&amp;nbsp;overhead).&amp;nbsp;&lt;/span&gt;&lt;br /&gt;const&amp;nbsp;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; digitPatterns[] PROGMEM = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x0E,0x11,0x13,0x15,0x19,0x11,0x0E,0x80,&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// 0&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x04,0x0C,0x04,0x04,0x04,0x04,0x1F,0x80,&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// 1&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x0E,0x11,0x11,0x02,0x04,0x08,0x1F,0x80,&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// 2&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x1F,0x02,0x04,0x02,0x01,0x11,0x0E,0x80,&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// 3&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x02,0x06,0x0A,0x12,0x1F,0x02,0x02,0x80,&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// 4&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x1F,0x10,0x1E,0x01,0x01,0x11,0x0E,0x80,&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// 5&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x06,0x08,0x10,0x1E,0x11,0x11,0x0E,0x80,&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// 6&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x1F,0x01,0x02,0x04,0x08,0x08,0x08,0x80,&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// 7&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x0E,0x11,0x11,0x0E,0x11,0x11,0x0E,0x80,&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// 8&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x0E,0x11,0x11,0x0F,0x01,0x02,0x06,0x80&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// 9&lt;/span&gt;&lt;br /&gt;}&amp;nbsp;&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;This&amp;nbsp;program&amp;nbsp;includes&amp;nbsp;a&amp;nbsp;GLO-216&amp;nbsp;instruction&amp;nbsp;that&amp;nbsp;expects&amp;nbsp;8&amp;nbsp;bytes&amp;nbsp;of&amp;nbsp;data.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;If&amp;nbsp;the&amp;nbsp;program&amp;nbsp;is&amp;nbsp;reset&amp;nbsp;during&amp;nbsp;this&amp;nbsp;download,&amp;nbsp;the&amp;nbsp;GLO&amp;nbsp;would&amp;nbsp;consume&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;our&amp;nbsp;setup&amp;nbsp;instructions&amp;nbsp;thinking&amp;nbsp;they&amp;nbsp;were&amp;nbsp;the&amp;nbsp;expected&amp;nbsp;data.&amp;nbsp;So&amp;nbsp;we'll&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;feed&amp;nbsp;it&amp;nbsp;some&amp;nbsp;harmless&amp;nbsp;characters&amp;nbsp;as&amp;nbsp;insurance.&amp;nbsp;After&amp;nbsp;that,&amp;nbsp;clear&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;the&amp;nbsp;screen&amp;nbsp;(0x0C),&amp;nbsp;set&amp;nbsp;the&amp;nbsp;tall&amp;nbsp;1x16&amp;nbsp;font&amp;nbsp;(0x03,0x02)&amp;nbsp;and&amp;nbsp;specify&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;text-style&amp;nbsp;numbers&amp;nbsp;(0x14).&lt;/span&gt;&lt;br /&gt;const&amp;nbsp;prog_char&amp;nbsp;clsSetBigFont[&amp;nbsp;]&amp;nbsp;PROGMEM&amp;nbsp;=&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;//reset insurance&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x0C,0x03,0x02,0x14,0x00&amp;nbsp;}&amp;nbsp;&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;This&amp;nbsp;instruction&amp;nbsp;consists&amp;nbsp;of&amp;nbsp;ctrl-A,&amp;nbsp;ctrl-R,&amp;nbsp;and&amp;nbsp;the&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;text&amp;nbsp;number&amp;nbsp;"6".&amp;nbsp;Translation:&amp;nbsp;'Move&amp;nbsp;to&amp;nbsp;screen&amp;nbsp;position&amp;nbsp;0,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;then&amp;nbsp;right-align&amp;nbsp;the&amp;nbsp;number&amp;nbsp;that&amp;nbsp;follows&amp;nbsp;in&amp;nbsp;a&amp;nbsp;6-character&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;field.'&amp;nbsp;Starting&amp;nbsp;at&amp;nbsp;position&amp;nbsp;0&amp;nbsp;and&amp;nbsp;moving&amp;nbsp;backward&amp;nbsp;with&amp;nbsp;ctrl-R&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;causes&amp;nbsp;the&amp;nbsp;text&amp;nbsp;to&amp;nbsp;align&amp;nbsp;to&amp;nbsp;the&amp;nbsp;righthand&amp;nbsp;end&amp;nbsp;of&amp;nbsp;the&amp;nbsp;screen.&lt;/span&gt;&lt;br /&gt;const&amp;nbsp;prog_char&amp;nbsp;setPosRightAlign[&amp;nbsp;]&amp;nbsp;PROGMEM&amp;nbsp;=&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x01,0x12,0x36,0x00}&amp;nbsp;&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Instruction&amp;nbsp;ESC&amp;nbsp;d&amp;nbsp;7,&amp;nbsp;sets&amp;nbsp;up&amp;nbsp;redefinition&amp;nbsp;of&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;custom&amp;nbsp;character&amp;nbsp;15&amp;nbsp;(ASCII&amp;nbsp;143).&amp;nbsp;The&amp;nbsp;eight&amp;nbsp;bytes&amp;nbsp;sent&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;after&amp;nbsp;this&amp;nbsp;instruction&amp;nbsp;define&amp;nbsp;the&amp;nbsp;character&amp;nbsp;bitmap.&lt;/span&gt;&lt;br /&gt;const&amp;nbsp;prog_char&amp;nbsp;defineCC[&amp;nbsp;]&amp;nbsp;PROGMEM&amp;nbsp;=&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;0x1B,0x64,0x37,0x00}&amp;nbsp;&lt;br /&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Main-count&amp;nbsp;variable:&amp;nbsp;0-65535&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;unsigned&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; odoCount = 1024 ;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;RAM&amp;nbsp;buffer&amp;nbsp;for&amp;nbsp;strings&amp;nbsp;used&amp;nbsp;by&amp;nbsp;serial&amp;nbsp;output,&amp;nbsp;which&amp;nbsp;can't&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;directly&amp;nbsp;access&amp;nbsp;strings&amp;nbsp;stored&amp;nbsp;in&amp;nbsp;program&amp;nbsp;memory&amp;nbsp;with&amp;nbsp;PROGMEM.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;char&lt;/span&gt; buffer[15] ;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Define&amp;nbsp;a&amp;nbsp;new&amp;nbsp;serial&amp;nbsp;port&amp;nbsp;using&amp;nbsp;the&amp;nbsp;pin&amp;nbsp;definitions&amp;nbsp;above.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Using&amp;nbsp;inverted&amp;nbsp;serial;&amp;nbsp;if&amp;nbsp;Spol&amp;nbsp;is&amp;nbsp;cut,&amp;nbsp;change&amp;nbsp;to&amp;nbsp;noninverted.&lt;/span&gt;&lt;br /&gt;SoftwareSerial&amp;nbsp;mySerial&amp;nbsp;=&amp;nbsp;&amp;nbsp;SoftwareSerial(rxPin,&amp;nbsp;txPin,&amp;nbsp;inverted);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;SETUP:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Initialize&amp;nbsp;the&amp;nbsp;serial&amp;nbsp;output,&amp;nbsp;send&amp;nbsp;some&amp;nbsp;bytes&amp;nbsp;to&amp;nbsp;complete&amp;nbsp;a&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;pending&amp;nbsp;instruction,&amp;nbsp;clear&amp;nbsp;the&amp;nbsp;screen&amp;nbsp;and&amp;nbsp;set&amp;nbsp;the&amp;nbsp;font,&amp;nbsp;then&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;print&amp;nbsp;a&amp;nbsp;label.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(txPin, &lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);   &lt;span style="color: #339900;"&gt;// Stop bit state for inverted serial&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;pinMode&lt;/span&gt;(txPin, &lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// set the data rate for the SoftwareSerial port&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;begin&lt;/span&gt;(9600);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// give the GLO ample time to start up&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(500); &lt;br /&gt;&amp;nbsp;&amp;nbsp;strcpy_P(buffer,&amp;nbsp;clsSetBigFont);&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(buffer) ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(&lt;span style="color: #006699;"&gt;"Odometer:"&lt;/span&gt;) ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;LOOP:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Print&amp;nbsp;the&amp;nbsp;main&amp;nbsp;count,&amp;nbsp;invoke&amp;nbsp;the&amp;nbsp;function&amp;nbsp;that&amp;nbsp;updates&amp;nbsp;the&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;rolling&amp;nbsp;custom-character&amp;nbsp;pattern,&amp;nbsp;and&amp;nbsp;update&amp;nbsp;the&amp;nbsp;main&amp;nbsp;count&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;when&amp;nbsp;the&amp;nbsp;final&amp;nbsp;digit&amp;nbsp;rolls&amp;nbsp;over.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// right align at the end of the display&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;strcpy_P(buffer,&amp;nbsp;setPosRightAlign);&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(buffer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// print the main count&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(odoCount) ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// now print the rolling final digit&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;write&lt;/span&gt;(odoChar) ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// roll up the last digit, and if it has &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// rolled over to 0, increment main count&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;if&lt;/span&gt; (incOdoChar() == 0) { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;odoCount++&amp;nbsp;;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(25) ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;incOdoChar()&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Moves&amp;nbsp;a&amp;nbsp;pointer&amp;nbsp;(odoIndex)&amp;nbsp;through&amp;nbsp;the&amp;nbsp;digitPattern[]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;array&amp;nbsp;to&amp;nbsp;redefine&amp;nbsp;the&amp;nbsp;odo-digit&amp;nbsp;custom&amp;nbsp;character.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;This&amp;nbsp;causes&amp;nbsp;the&amp;nbsp;"0"&amp;nbsp;bitmap&amp;nbsp;to&amp;nbsp;scroll&amp;nbsp;up&amp;nbsp;row-by-pixel-&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;row&amp;nbsp;to&amp;nbsp;be&amp;nbsp;replaced&amp;nbsp;by&amp;nbsp;the&amp;nbsp;"1"&amp;nbsp;bitmap,&amp;nbsp;which&amp;nbsp;scrolls&amp;nbsp;up...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;Function&amp;nbsp;returns&amp;nbsp;the&amp;nbsp;index&amp;nbsp;value;&amp;nbsp;when&amp;nbsp;this&amp;nbsp;rolls&amp;nbsp;over&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;to&amp;nbsp;zero,&amp;nbsp;the&amp;nbsp;odoCount&amp;nbsp;value&amp;nbsp;should&amp;nbsp;increment,&amp;nbsp;just&amp;nbsp;like&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;//&amp;nbsp;a&amp;nbsp;real&amp;nbsp;mechanical&amp;nbsp;odometer.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; incOdoChar() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;static&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;byte&lt;/span&gt; odoIndex = 0 ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// send the instruction to redefine custom character&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;strcpy_P(buffer,&amp;nbsp;defineCC);&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(buffer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// send the eight-byte bitmap of the new CC pattern&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;for&lt;/span&gt; (&lt;span style="color: #cc6600;"&gt;int&lt;/span&gt; i=0; i &amp;lt; 8; i++) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;//retrieve the next byte from the flash/program memory table&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;//and write it to the serial output &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;write&lt;/span&gt;(pgm_read_byte(&amp;amp;digitPatterns[(i+odoIndex)%80]));&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// increment for next time-- %80 to restrict &lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// to 0-79 (valid index range of digitPatterns[])&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;odoIndex&amp;nbsp;=&amp;nbsp;++odoIndex%80&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// return index to signal rollover (0)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;return&lt;/span&gt; odoIndex ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-5378595755422613761?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/5378595755422613761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2012/01/odometer-effect-counter-with-arduino.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/5378595755422613761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/5378595755422613761'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2012/01/odometer-effect-counter-with-arduino.html' title='Odometer-effect Counter with Arduino and GLO-216 Serial OLED'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-8411881436865831999</id><published>2011-12-28T07:57:00.000-08:00</published><updated>2012-01-25T14:21:57.493-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BPI-216'/><category scheme='http://www.blogger.com/atom/ns#' term='BPI-216N'/><category scheme='http://www.blogger.com/atom/ns#' term='BPI-216L'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><title type='text'>Arduino "Hello World" for BPI-216 Serial LCDs</title><content type='html'>Version 1.0 of the Arduino software includes an update to the SoftwareSerial library, which (among other things) can output inverted-TTL serial that works with our BPI-, BPK-, and BPP- series devices. Here's a quick example sketch:&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color:#111111;"&gt;&lt;span style="color: #339900;"&gt;/*This&amp;nbsp;program&amp;nbsp;uses&amp;nbsp;the updated SoftwareSerial&amp;nbsp;distributed&amp;nbsp;in v1.0&amp;nbsp;of&amp;nbsp;the&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #339900;"&gt;Arduino &lt;/span&gt;&lt;span style="color: #339900;"&gt;software.&amp;nbsp;Users&amp;nbsp;of&amp;nbsp;earlier&amp;nbsp;versions&amp;nbsp;must&amp;nbsp;download&amp;nbsp;NewSoftSerial.&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;#include&amp;nbsp;&amp;lt;SoftwareSerial.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#define&amp;nbsp;rxPin&amp;nbsp;255&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Not used, so set to invalid pin #&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;txPin&amp;nbsp;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// Connect BPI/BPK's serial input to this Arduino pin.&lt;/span&gt;&lt;br /&gt;#define&amp;nbsp;inverted&amp;nbsp;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// In setup, 1=inverted, 0 (or no entry)=noninverted&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;const&amp;nbsp;&lt;span style="color: #cc6600;"&gt;char&lt;/span&gt; clearScreen[ ] = {&lt;br /&gt;&amp;nbsp;&amp;nbsp;254,1,254,128,0};&lt;br /&gt;const&amp;nbsp;&lt;span style="color: #cc6600;"&gt;char&lt;/span&gt; message[ ] = &lt;span style="color: #006699;"&gt;"Hello World!"&lt;/span&gt; ;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;/*&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;Set&amp;nbsp;up&amp;nbsp;a&amp;nbsp;new&amp;nbsp;serial&amp;nbsp;output&amp;nbsp;using&amp;nbsp;the&amp;nbsp;pin&amp;nbsp;definitions&amp;nbsp;above.&amp;nbsp;Note&amp;nbsp;the&amp;nbsp;argument&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;"inverted,"&amp;nbsp;which&amp;nbsp;instructs&amp;nbsp;SoftwareSerial&amp;nbsp;to&amp;nbsp;output&amp;nbsp;BPI/BPK-compatible&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;inverted-TTL&amp;nbsp;serial&amp;nbsp;(like&amp;nbsp;RS-232,&amp;nbsp;but&amp;nbsp;without&amp;nbsp;the&amp;nbsp;+/-&amp;nbsp;voltage&amp;nbsp;swing).&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #339900;"&gt;*/&lt;/span&gt;&lt;br /&gt;SoftwareSerial&amp;nbsp;mySerial&amp;nbsp;=&amp;nbsp;&amp;nbsp;SoftwareSerial(rxPin,&amp;nbsp;txPin,&amp;nbsp;inverted);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;setup&lt;/b&gt;&lt;/span&gt;()  {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// define pin mode for tx:&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;digitalWrite&lt;/span&gt;(txPin, &lt;span style="color: #006699;"&gt;LOW&lt;/span&gt;);   &lt;span style="color: #339900;"&gt;// Stop bit state for inverted serial&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;pinMode&lt;/span&gt;(txPin, &lt;span style="color: #006699;"&gt;OUTPUT&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;begin&lt;/span&gt;(9600);    &lt;span style="color: #339900;"&gt;// Set the data rate&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #cc6600;"&gt;delay&lt;/span&gt;(10);              &lt;span style="color: #339900;"&gt;// wait (does not seem to be needed w/ Arduino v1.0)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(clearScreen);&lt;br /&gt;&amp;nbsp;&amp;nbsp;mySerial.&lt;span style="color: #cc6600;"&gt;print&lt;/span&gt;(message);  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #cc6600;"&gt;void&lt;/span&gt; &lt;span style="color: #cc6600;"&gt;&lt;b&gt;loop&lt;/b&gt;&lt;/span&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #339900;"&gt;// ...&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-8411881436865831999?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/8411881436865831999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/12/arduino-hello-world-for-bpi-216-serial.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/8411881436865831999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/8411881436865831999'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/12/arduino-hello-world-for-bpi-216-serial.html' title='Arduino &quot;Hello World&quot; for BPI-216 Serial LCDs'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-2602695868766115939</id><published>2011-12-07T07:13:00.001-08:00</published><updated>2011-12-29T17:07:46.750-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BPI-216'/><category scheme='http://www.blogger.com/atom/ns#' term='BPI-216N'/><category scheme='http://www.blogger.com/atom/ns#' term='BPI-216L'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-216'/><title type='text'>Drop-in OLED Replacement for BPI-216 Serial LCDs</title><content type='html'>Would you like to upgrade from a&amp;nbsp;&amp;nbsp;&lt;a href="http://seetron.com/bpi216.html" target="_blank"&gt;BPI-216 serial LCD&lt;/a&gt;&amp;nbsp;to a &lt;a href="http://seetron.com/glo216.html" target="_blank"&gt;GLO-216Y/G serial OLED&lt;/a&gt;, but can't make any changes to your product's firmware? Help is on the way—contact tech@seetron.com for information on the BGL-216 firmware modification.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;GLO-series OLEDs are brighter, more contrasty, tolerant of a wider range of temperature, and offer neat features like larger font sizes, instant-on startup screen, etc. They even understand a significant subset of BPI-style instructions. With a few &lt;a href="http://seetron.com/glo216/bpigloupgg.html" target="_blank"&gt;minor changes&lt;/a&gt;, most designs built around the BPI-216 can enjoy a significant upgrade.&lt;br /&gt;&lt;br /&gt;Minor changes? &lt;i&gt;Changes?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Turns out that in some cases the firmware is carved in stone. A consultant absconded with the source code, or the code exists but is indecipherable, written in an obsolete language, or too tangled to safely modify. The design is eternally shackled to the BPI-216.&lt;br /&gt;&lt;br /&gt;A number of loyal customers have found themselves in this fix, so we've developed alternative firmware for the GLO-216Y/G that emulates, as accurately as possible, the behavior of its LCD predecessors. Quirks and all. GLOs with the emulation firmware will be offered under part number BGL-216Y (yellow) and BGL-216G (green). The new firmware is almost complete; we're researching the last few oddities of the LCD-controller architecture to make sure that the emulation is as accurate as possible.&lt;br /&gt;&lt;br /&gt;If a BPI-compatible OLED would help you out of a jam, contact tech@seetron.com for more information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-2602695868766115939?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/2602695868766115939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/12/drop-in-oled-replacement-for-bpi-216.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/2602695868766115939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/2602695868766115939'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/12/drop-in-oled-replacement-for-bpi-216.html' title='Drop-in OLED Replacement for BPI-216 Serial LCDs'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-2353455424886289926</id><published>2011-11-23T12:10:00.001-08:00</published><updated>2011-11-23T19:55:20.467-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SGX-120'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='SGX-120L'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><title type='text'>SGX-120L Bitmap Tool</title><content type='html'>The &lt;a href="http://seetron.com/sgx120.html" target="_blank"&gt;SGX-120L serial graphics display&lt;/a&gt; can store up to 17 full screen bitmaps in flash memory; two of the bitmaps make up the display's font, the other 15 can be displayed using the ESC-E instruction (or used as alternative fonts).&lt;br /&gt;&lt;br /&gt;The most practical way to load bitmaps into the SGX has always been to create .BMP files on a PC (using the free Paint program included with Windows), but our conversion/downloading software has been pretty crude, to say the least. With the introduction of a new SGX coming up, we decided to freshen up the bitmap tool:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kLLQitlTB0o/Ts1UwaXX24I/AAAAAAAAADU/RqHhAgFKe8o/s1600/bmploaded.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-kLLQitlTB0o/Ts1UwaXX24I/AAAAAAAAADU/RqHhAgFKe8o/s1600/bmploaded.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The program, which runs under '95 through Windows 7, is available for download &lt;a href="http://seetron.com/download/index.html" target="_blank"&gt;here&lt;/a&gt; (&lt;i&gt;New SGX Tools...&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;To use the tool, extract it from its ZIP archive to a convenient spot on your PC (Desktop is good; a thumb drive might be better). No installation is required, but the program does create a couple of small files in the same directory. These files save your comm port setting and downloaded-file list between uses of the program.&lt;br /&gt;&lt;br /&gt;Using the program is pretty straightforward, but here's a quick rundown:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Connect the SGX to your PC serial port.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Set the &lt;b&gt;Comm Port&lt;/b&gt; box to match the serial port number you're using.&amp;nbsp;&lt;/li&gt;&lt;li&gt;If the SGX is a version 1.0 model, set the &lt;b&gt;2400/9600&lt;/b&gt; (bps) switch to &lt;b&gt;9600&lt;/b&gt;.&amp;nbsp;&lt;/li&gt;&lt;li&gt;If the SGX has previously been write-protected, undo that with the &lt;a href="http://seetrontech.blogspot.com/2011/11/sgx-120l-configuration-tool.html" target="_blank"&gt;config tool&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Click &lt;b&gt;Load .BMP File&lt;/b&gt; and find a 120x32-pixel monochrome BMP file to download to the SGX.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Click &lt;b&gt;Send to SGX&lt;/b&gt; and (assuming the file and comm port are OK) the picture will appear on the display.&lt;/li&gt;&lt;/ul&gt;To save a picture to the SGX, put a check in the box &lt;b&gt;Save to SGX Flash Memory&lt;/b&gt; and select the page number in the box below that. Don't pick page 0 or 1 unless you are replacing the font! Now when you click &lt;b&gt;Send to SGX&lt;/b&gt;, the bitmap will be downloaded &lt;i&gt;and &lt;/i&gt;memorized to flash inside the display.&lt;br /&gt;&lt;br /&gt;As you download and save pictures to the SGX, the program makes a list of BMP files and SGX screen pages and saves it to a text file called &lt;code&gt;sgxscreens.lst&lt;/code&gt;. This file is located in the same directory as the program. If you need to set up multiple SGXes with the same bitmaps in the same screen pages, this file helps automate the job. Here's how:&lt;br /&gt;&lt;br /&gt;Launch the bitmap tool and download the desired bitmaps to the desired screen pages of the SGX. When that's done, rename the list file&amp;nbsp;&lt;code&gt;sgxscreens.lst&lt;/code&gt;&amp;nbsp;to something like &lt;code&gt;mysgxscreens.lst&lt;/code&gt;. All that's important is that you keep the extension &lt;code&gt;.lst&lt;/code&gt;. (You can examine the file in Notepad or another text editor to check on your files.)&lt;br /&gt;&lt;br /&gt;To download the file list to another SGX, &amp;nbsp;click Load List and select your &lt;code&gt;.lst&lt;/code&gt; file. The preview area will be cleared in preparation for the series of downloads, like so:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-6JFwqYkM34o/Ts1dCEp4FHI/AAAAAAAAAD0/qAqU7Le_azM/s1600/bmplistloaded.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-6JFwqYkM34o/Ts1dCEp4FHI/AAAAAAAAAD0/qAqU7Le_azM/s1600/bmplistloaded.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When the SGX is connected, click &lt;b&gt;Send to SGX&lt;/b&gt; and the program will download the files from your list and save them to the same SGX flash pages as the original, manual downloads. As the download progresses, each bitmap will appear in the preview:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-KgkDNIDZKeM/Ts1dDtq_VbI/AAAAAAAAAD8/lggHNQClm74/s1600/bmplistprogress.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-KgkDNIDZKeM/Ts1dDtq_VbI/AAAAAAAAAD8/lggHNQClm74/s1600/bmplistprogress.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When the download is complete, a status message appears:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-N42AX_LwaMA/Ts1dFFLgfTI/AAAAAAAAAEE/exK00Tck7BU/s1600/bmplistdone.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-N42AX_LwaMA/Ts1dFFLgfTI/AAAAAAAAAEE/exK00Tck7BU/s1600/bmplistdone.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;To load another SGX, click &lt;b&gt;Send to SGX&lt;/b&gt; again.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SGX v2 Confirmation Screens.&lt;/b&gt; The new SGX-120L version 2.0 (v2) can optionally display a confirmation screen to show whether a memory operation succeeded. In the case of screen downloads, if write-protection is in effect, the SGX will not store the downloaded screen. With the original, v1 SGX, you'd have to check to ensure that a bitmap was actually stored (or be certain you hadn't set write protection and forgotten about it). The v2 can provide a confirmation screen instead:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-UBV6YlFVa0Q/Ts1g9ihQ0cI/AAAAAAAAAEM/JsLj6nEDTP4/s1600/bmpok.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="53" src="http://2.bp.blogspot.com/-UBV6YlFVa0Q/Ts1g9ihQ0cI/AAAAAAAAAEM/JsLj6nEDTP4/s200/bmpok.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-dz38vYHP0Yw/Ts1g_CDwgvI/AAAAAAAAAEU/hPoXZbagn2Y/s1600/bmpno.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="53" src="http://1.bp.blogspot.com/-dz38vYHP0Yw/Ts1g_CDwgvI/AAAAAAAAAEU/hPoXZbagn2Y/s200/bmpno.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Confirmation screens are only available during manual downloads; during list-file downloads the images flip by too quickly to make the confirmations useful. Here, it would make sense to either freshly configure the display with write-protection off, or try a single, manual download to test write-protection status before running a list-based download.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Raw-Data Secret Knock.&lt;/b&gt; The &lt;b&gt;Comm Port&lt;/b&gt; box accepts numbers from 1 to 99, but since ports are assigned sequentially starting at Comm 1, it seems unlikely that many users will have ports into the high double-digits. So Comm Port "99" has been appropriated to write the raw bitmap data to the clipboard. You'll get 30 lines of text with values in hexadecimal format that can be pasted into a text editor for use in a program. If you load a list file and select port 99, the program will put each bitmap on the clipboard with pauses in between to allow you to paste the data like so:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-l_QZvba5J38/Ts1m0B7CDkI/AAAAAAAAAEc/lHkFB1X0q5o/s1600/rawdataclip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="201" src="http://2.bp.blogspot.com/-l_QZvba5J38/Ts1m0B7CDkI/AAAAAAAAAEc/lHkFB1X0q5o/s400/rawdataclip.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-2353455424886289926?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/2353455424886289926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/11/sgx-120l-bitmap-tool.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/2353455424886289926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/2353455424886289926'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/11/sgx-120l-bitmap-tool.html' title='SGX-120L Bitmap Tool'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-kLLQitlTB0o/Ts1UwaXX24I/AAAAAAAAADU/RqHhAgFKe8o/s72-c/bmploaded.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-4464361133806888454</id><published>2011-11-23T11:08:00.001-08:00</published><updated>2011-11-23T19:55:07.618-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SGX-120'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='SGX-120L'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><title type='text'>SGX-120L Configuration Tool</title><content type='html'>The &lt;a href="http://seetron.com/sgx120.html" target="_blank"&gt;SGX-120L serial graphics LCD&lt;/a&gt; has several configuration settings that control the display's default startup behavior. You can set the SGX to start with the backlight on or off, blank or with a startup screen, with a particular font size, etc. Setting these options requires adding up the option numbers and sending them to the display using the ESC-W instruction (&lt;a href="http://seetron.com/sgx120/sgx120prog.html#escape" target="_blank"&gt;documented here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Since we're getting ready to roll out a new version of the SGX, we decided to make a little GUI tool to make configuration easier. &amp;nbsp;It's available for download &lt;a href="http://seetron.com/download/index.html" target="_blank"&gt;here&lt;/a&gt; (&lt;i&gt;New SGX Tools...&lt;/i&gt;). Here's how it looks in XP dress (works with '95 through Windows 7):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RlCi2_Y7cog/Ts1GkMGa2rI/AAAAAAAAACk/n-bMhajmXbE/s1600/configtool.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-RlCi2_Y7cog/Ts1GkMGa2rI/AAAAAAAAACk/n-bMhajmXbE/s1600/configtool.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;To use the tool, extract it from its ZIP archive to a convenient spot on your PC (Desktop is good; a thumb drive might be better). No installation is required, but the program does create a small file called sgxconfig.dat in the same directory. This file saves your settings between uses of the program.&lt;br /&gt;&lt;br /&gt;To send a configuration instruction to the SGX:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If version 1.0, set the 9600/2400 switch to &lt;b&gt;9600&lt;/b&gt; and SET/RUN to &lt;b&gt;SET&lt;/b&gt;.&amp;nbsp;&lt;/li&gt;&lt;li&gt;If version 2.0, make sure that the &lt;b&gt;Dsu&lt;/b&gt; (display setup) jumper is &lt;b&gt;uncut&lt;/b&gt;.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Identify the port to which the SGX is connected to and set Comm Port to match.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Pick your options and click &lt;b&gt;Send&lt;/b&gt;. They'll take effect the next time the SGX powers up.&lt;/li&gt;&lt;/ul&gt;A couple of minor version-related differences are worth highlighting:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Write Protection. &lt;/b&gt;On the original, v1 SGX, write protection of stored screens was all or nothing, and it was disabled by default. As a result, users would occasionally replace screens 0 and 1 (which are the default font) with some other bitmap, causing text to print in hieroglyphics!&lt;br /&gt;&lt;br /&gt;The new v2 SGX guards against fonticide with an additional layer of write protection. Now, screen pages 2 through 16 are writeable by default, but you must explicitly disable font write protection before you can replace screens 0 and 1.&lt;br /&gt;&lt;br /&gt;Although there are four possible combinations of the two write-protect bits, only three are valid:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-An8_A62lMtw/Ts1Ld_nGCMI/AAAAAAAAACs/bJE2LpddbTI/s1600/writescreens2-16.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="51" src="http://2.bp.blogspot.com/-An8_A62lMtw/Ts1Ld_nGCMI/AAAAAAAAACs/bJE2LpddbTI/s320/writescreens2-16.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Allows writes to screen pages 2-16; blocks writes to the default font screens (screens 0, 1).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-hKqWHXxau-o/Ts1LkfIeYqI/AAAAAAAAAC0/9NvfPSaE5wk/s1600/writeprotectall.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="51" src="http://4.bp.blogspot.com/-hKqWHXxau-o/Ts1LkfIeYqI/AAAAAAAAAC0/9NvfPSaE5wk/s320/writeprotectall.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;No writes allowed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-JXnR8I52iA8/Ts1LnjaljlI/AAAAAAAAAC8/C81H03_Z6kk/s1600/writescreens0-16.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="51" src="http://3.bp.blogspot.com/-JXnR8I52iA8/Ts1LnjaljlI/AAAAAAAAAC8/C81H03_Z6kk/s320/writescreens0-16.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Allows writes to all screen pages (0-16) including font (screens 0, 1).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What about both boxes checked? The tool won't permit it, because it would imply (incorrectly) that &lt;i&gt;only &lt;/i&gt;writing to the font screens is allowed. No such mode exists. If you were to input this combination manually using ESC-W, it would be equivalent to the middle option, no writes at all.&lt;br /&gt;&lt;br /&gt;A reminder: If you're using the tool with one of the gajillion or so v1 SGXes out there, the only valid option is 'write protect all.'&lt;br /&gt;&lt;br /&gt;&lt;b&gt;SGX Confirmation.&lt;/b&gt; Another new feature of the v2 SGX is the&amp;nbsp;&lt;i&gt;confirmation screen&lt;/i&gt;&amp;nbsp;for memory operations. When you send new settings to the display it &amp;nbsp;just quietly memorizes them. To confirm the download, you'd generally have to cycle the power and check for the new settings.&lt;br /&gt;&lt;br /&gt;The v2 SGX will (optionally) display a screen to acknowledge successful reception of a config instruction. It can also remind you in case you've previously cut the display setup (Dsu) jumper intending to prevent configuration changes. Here are the screens:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Vie3arUrOSk/Ts1Qpxy03yI/AAAAAAAAADE/DPfuXV8fKOI/s1600/cfgok.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-left: 5em; margin-right: 1em;"&gt;&lt;img border="0" height="53" src="http://4.bp.blogspot.com/-Vie3arUrOSk/Ts1Qpxy03yI/AAAAAAAAADE/DPfuXV8fKOI/s200/cfgok.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/-9dR809Udbas/Ts1Qr0dZ8xI/AAAAAAAAADM/hCcolZfOJzg/s1600/cfgno.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; margin-right: 5em;"&gt;&lt;img border="0" height="53" src="http://3.bp.blogspot.com/-9dR809Udbas/Ts1Qr0dZ8xI/AAAAAAAAADM/hCcolZfOJzg/s200/cfgno.png" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-4464361133806888454?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/4464361133806888454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/11/sgx-120l-configuration-tool.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/4464361133806888454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/4464361133806888454'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/11/sgx-120l-configuration-tool.html' title='SGX-120L Configuration Tool'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-RlCi2_Y7cog/Ts1GkMGa2rI/AAAAAAAAACk/n-bMhajmXbE/s72-c/configtool.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-8888890045232838466</id><published>2011-11-15T07:21:00.001-08:00</published><updated>2011-11-23T19:54:37.131-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SGX-120'/><category scheme='http://www.blogger.com/atom/ns#' term='SGX-120L'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><title type='text'>SGX-120L Graphics LCD Upgrade Sneak Peek</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://seetron.com/images/sgx120.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="135" src="http://seetron.com/images/sgx120.jpg" width="300" /&gt;&lt;/a&gt;&lt;/div&gt;We're getting ready to roll out version 2.0 of the workhorse &lt;a href="http://seetron.com/sgx120.html"&gt;SGX-120L serial graphics LCD&lt;/a&gt;. The &lt;a href="http://seetron.com/sgx120/"&gt;new docs&lt;/a&gt; are online and offer a preview of the &lt;a href="http://seetron.com/sgx120/sgx120v2ugg.html"&gt;update&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;New tools are also in the works to make it easier to configure the display and load bitmap graphics. In upcoming posts we'll introduce the new stuff and offer some tips on getting the most out of SGX applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-8888890045232838466?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/8888890045232838466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/11/sgx-120l-graphics-lcd-upgrade-sneak.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/8888890045232838466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/8888890045232838466'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/11/sgx-120l-graphics-lcd-upgrade-sneak.html' title='SGX-120L Graphics LCD Upgrade Sneak Peek'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-6785118117114614905</id><published>2011-09-15T14:59:00.000-07:00</published><updated>2011-11-23T19:55:43.457-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OLED'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-416'/><title type='text'>The OLED Revolution will be Customized!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Jq9eisnGQfU/TnJu1d5Wy7I/AAAAAAAAACU/wG46NlLNuKE/s1600/oledrevolution.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://4.bp.blogspot.com/-Jq9eisnGQfU/TnJu1d5Wy7I/AAAAAAAAACU/wG46NlLNuKE/s320/oledrevolution.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Browsing a science magazine's site, I spotted an ad that depicted a character-type LCD, but was obviously a slick computer-graphics rendering. I say obviously because the message used some font tricks, like THE printed vertically, that can't quite be accomplished with text LCDs.&lt;br /&gt;&lt;br /&gt;But they're dead easy with our &lt;a href="http://seetron.com/glo416.html"&gt;GLO-416Y serial OLED&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Here's what I did: Using our &lt;a href="http://seetron.com/apps/app_cceditor.html"&gt;custom-character editor&lt;/a&gt;, I made the vertical THE out of a pair of custom characters. Then I fired up &lt;a href="http://seetrontech.blogspot.com/2011/08/introduction-to-serial-sender.html"&gt;Serial Sender&lt;/a&gt; and downloaded the bit patterns to the GLO. &amp;nbsp;The instructions (as sent from Serial Sender's text box) looked like this:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;ESC&amp;gt;D0&amp;lt;128,128,145,149,149,159,128,159&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;ESC&amp;gt;D1&amp;lt;132,132,159,128,144,159,144,128&amp;gt;&lt;/code&gt;&lt;br /&gt;(If that's Greek to you, check out the programmer's reference &lt;a href="http://seetron.com/glo416/glo416prog.html#escape"&gt;here&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, I could print my sideways THE by placing the first custom character (ASCII 128 dec) on the line above the second (129). Now all I needed was a slogan to go with it. After some fiddling in Serial Sender, I came up with the mini-manifesto in the picture. The Sender string is like so:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;L,C,128,M,129,B&amp;gt;OLED REVOLUTION&amp;lt;B,B&amp;gt;@SEETRON&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In GLO control characters, that's clear the screen, set default font, print a custom char, carriage return, 'nuther custom char, increase font size, print OLED REVOLUTION, increase font size again, print @SEETRON.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-6785118117114614905?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/6785118117114614905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/09/oled-revolution-will-be-customized.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/6785118117114614905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/6785118117114614905'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/09/oled-revolution-will-be-customized.html' title='The OLED Revolution will be Customized!'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Jq9eisnGQfU/TnJu1d5Wy7I/AAAAAAAAACU/wG46NlLNuKE/s72-c/oledrevolution.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-2312417574271286109</id><published>2011-09-06T15:34:00.000-07:00</published><updated>2011-11-23T19:56:04.403-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OLED'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-416'/><title type='text'>Arduino Demo for GLO-416Y Serial OLED</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://elabz.com/wp-content/uploads/2011/09/seetron-glo-416Y-demo-300x200.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://elabz.com/wp-content/uploads/2011/09/seetron-glo-416Y-demo-300x200.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;There's an excellent hands-on evaluation of the new &lt;a href="http://seetron.com/glo416.html"&gt;GLO-416Y&lt;/a&gt; serial OLED over at the &lt;a href="http://elabz.com/serial-oled-display-and-arduino/"&gt;elabz.com blog&lt;/a&gt;. The demo program uses an Arduino controller to read an analog value and display it on the OLED. While you're there, browse through the blog—lots of good ideas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-2312417574271286109?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/2312417574271286109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/09/arduino-demo-for-glo-416y-serial-oled.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/2312417574271286109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/2312417574271286109'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/09/arduino-demo-for-glo-416y-serial-oled.html' title='Arduino Demo for GLO-416Y Serial OLED'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-7142707531151568545</id><published>2011-09-01T15:51:00.000-07:00</published><updated>2012-02-13T10:39:08.538-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serial display'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='OLED'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-416'/><title type='text'>Sharing a Serial Output Pin During Development</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CEu3PHkkOCA/TmAHqjcx2II/AAAAAAAAACM/1qa2KqmSY8Y/s1600/warning.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="179" src="http://2.bp.blogspot.com/-CEu3PHkkOCA/TmAHqjcx2II/AAAAAAAAACM/1qa2KqmSY8Y/s200/warning.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Some interactive microcontrollers (BASIC Stamp, Arduino, etc.) have dedicated serial I/O pins used to communicate with the PC during programming. Is it OK to use these pins to drive a serial display? Maybe, sometimes, sorta...if you're willing to accept the side effects during development.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;When you hit Run or Download in your development environment, the program is compiled or tokenized and shipped off to the microcontroller. There's some back-and-forth communication between the micro and the PC during this process. If a serial display is connected to the serial-output pin that's being used for this communication, it's receiving a bunch of nonsense that may include data and instructions that affect its operation.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Case in point: a &lt;a href="http://seetron.com/glo416.html"&gt;GLO-416Y&lt;/a&gt; (set for noninverted serial, SPol jumper cut), is connected to the TX pin of an Arduino. You compile your program and hit Download. A bunch of nonsense flashes by on the GLO screen, and when the program executes the screen is dim, the font size is wrong, and the first few bytes sent to the display are dropped. Curious, you cycle the power to see what happens, and the program runs perfectly. What gives?&lt;br /&gt;&lt;br /&gt;&amp;nbsp;The issue is that during the download, among the bytes exchanged between the PC and Arduino, were the values 0x0F and 0x02, and the sequence 0x1B, 0x44, 0x33... at the end. Those values are interpreted by the display as instructions to dim the display, alter the font size and begin a download of bytes for a custom character. Cycling the power flushes this junk and all is well.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;One way to cope with this is to add a startup sequence to your program that clears the screen, sets the correct font size, turns the brightness up (or backlight on), etc. But in the example above, the unlucky inclusion of a multi-byte instruction would swallow some of your remedial instructions. And there's the (admittedly remote) possibility that the random crud could include an Escape sequence that trashes your startup screen or alters other memorized settings.&lt;br /&gt;&lt;br /&gt;None of this means that you should &lt;i&gt;never &lt;/i&gt;use the dedicated-serial pin for a display. It's tempting—once development is over, the pin is often unused, and other I/Os may be at a premium. Just keep in mind that weird things can and will happen during downloads.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-7142707531151568545?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/7142707531151568545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/09/sharing-serial-output-during.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/7142707531151568545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/7142707531151568545'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/09/sharing-serial-output-during.html' title='Sharing a Serial Output Pin During Development'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-CEu3PHkkOCA/TmAHqjcx2II/AAAAAAAAACM/1qa2KqmSY8Y/s72-c/warning.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-2342154882976097015</id><published>2011-08-31T08:16:00.000-07:00</published><updated>2011-08-31T08:21:22.926-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='Serial Sender'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-216'/><category scheme='http://www.blogger.com/atom/ns#' term='OLED'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-416'/><title type='text'>GLO-series: Turning off the Startup Screen</title><content type='html'>&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://seetron.com/images/glo416.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="122" src="http://seetron.com/images/glo416.jpg" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Startup screen.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;GLO-216 and -416 displays start up with a default screen like the one shown here. The &lt;a href="http://seetron.com/glo416/glo416prog.html"&gt;Programmer's Reference&lt;/a&gt; describes the ESC X0 instruction, which can be used to store a custom screen. But what if you want a totally blank screen at startup? &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;The following sequence will configure the GLO to start up blank: &lt;code&gt;12 27 88 48&lt;/code&gt;. That's four bytes consisting of clear-screen (12 decimal, 0x0C hex), escape (27 dec, 0x1B hex), uppercase X (88 dec, 0x58 hex), and the text numeral 0 (zero; 48 dec, 0x30 hex). Send that sequence once, and forevermore the GLO will power up with a blank screen. Well, unless you repeat the ESC X0 process with a non-blank screen.&lt;br /&gt;&lt;br /&gt;Since we've been talking about Serial Sender, here's how to send the blank-startup-screen sequence from it: &lt;code&gt;&amp;lt;12,27,88,48&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;If you have your startup screen just right and want to prevent it from being changed--even by another ESC X0 instruction--you can write-protect the display by cutting the setup jumper, marked "Dsu" on the interface board. See the &lt;a href="http://seetron.com/glo416/glo416hdw.html#hookup"&gt;Hardware Reference&lt;/a&gt; for pix.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-2342154882976097015?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/2342154882976097015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/08/glo-series-turning-off-startup-screen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/2342154882976097015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/2342154882976097015'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/08/glo-series-turning-off-startup-screen.html' title='GLO-series: Turning off the Startup Screen'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-6169922333341801985</id><published>2011-08-29T09:07:00.000-07:00</published><updated>2011-08-29T16:18:28.754-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Serial Sender'/><title type='text'>Introduction to Serial Sender</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-w8vHgD8pgkQ/TluwQjfTu-I/AAAAAAAAABw/bSFp7jI2DpA/s1600/sshw_01.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="165" src="http://1.bp.blogspot.com/-w8vHgD8pgkQ/TluwQjfTu-I/AAAAAAAAABw/bSFp7jI2DpA/s200/sshw_01.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://seetron.com/download/sersend2.zip"&gt;Serial Sender&lt;/a&gt; is &lt;a href="http://seetron.com/"&gt;Seetron's&lt;/a&gt; free utility for sending data bytes and strings of text through the serial port of a Windows PC ('95 through Windows 7). It's small (64kB) and simple, requiring no installation. Serial Sender won't replace a terminal program for bidirectional communication, but it's excellent for testing and demonstration of serial displays. This article presents a few screenshots showing how it works. &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Radio buttons set the serial data rate (1200-9600bps) and select the comm port number (1-8).That's the extent of the configuration. The program does not mess with the port until you actually press &lt;b&gt;Send&lt;/b&gt;, so it generally plays well with other port-aware programs. &lt;br /&gt;&lt;br /&gt;To send text out the port, type your message and click &lt;b&gt;Send&lt;/b&gt;. To send individual bytes, enclose the decimal value of the byte inside less-than &lt;b&gt;&amp;lt;&lt;/b&gt; and greater-than &lt;b&gt;&amp;gt;&lt;/b&gt; brackets. For example, the screen below sends a single byte (12 decimal, 0x0C hex, 00001100 binary) followed by the text "Hello World!" (The byte 12 is the clear-screen instruction for most Seetron displays other than BPI- and BPK-.)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-w8vHgD8pgkQ/TluwQjfTu-I/AAAAAAAAABw/bSFp7jI2DpA/s1600/sshw_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://1.bp.blogspot.com/-w8vHgD8pgkQ/TluwQjfTu-I/AAAAAAAAABw/bSFp7jI2DpA/s320/sshw_01.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The next shot sends the same byte and text, but uses the control-code symbol (ctrl-L) to express ASCII 12. Our docs refer to the control codes by letter and number, so you can use whichever is clearer or easier to remember. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-R6Vzxhaa91A/TluwRDQvI0I/AAAAAAAAAB0/Z-_Lw5Eep5k/s1600/sshw_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://4.bp.blogspot.com/-R6Vzxhaa91A/TluwRDQvI0I/AAAAAAAAAB0/Z-_Lw5Eep5k/s320/sshw_02.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Multiple bytes can be sent in a single set of brackets by separating them with commas. (This example clears the screen with ctrl-L and turns on the backlight with ctrl-N.)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-FIV01pK1Ut0/TluwR--vF2I/AAAAAAAAAB4/zWg-BRQcdH4/s1600/sshw_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://1.bp.blogspot.com/-FIV01pK1Ut0/TluwR--vF2I/AAAAAAAAAB4/zWg-BRQcdH4/s320/sshw_03.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The next example mixes control-code notation with numeric; ctrl-P is the position instruction, the number following is the screen location. Screen locations are expressed by adding 64 to the actual value, so 89 in the example is location 25 on the screen. (The offset of 64 has to do with the way that ASCII character codes are organized; don't worry about it.)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-z1kGZ2N-irQ/TluwSarxHnI/AAAAAAAAAB8/pUQRFas8s5E/s1600/sshw_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://1.bp.blogspot.com/-z1kGZ2N-irQ/TluwSarxHnI/AAAAAAAAAB8/pUQRFas8s5E/s320/sshw_04.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;To save the aggravation of adding 64 to express values like screen location, Serial Sender can do it for you--just tack an underscore in front of the number. The last screenshot works the same as the previous one. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xl68_g7vO9E/TluwQZYeiWI/AAAAAAAAABs/VEbbLTsZFf0/s1600/sshw_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="264" src="http://4.bp.blogspot.com/-xl68_g7vO9E/TluwQZYeiWI/AAAAAAAAABs/VEbbLTsZFf0/s320/sshw_05.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In a future blog, we'll cover some more Serial Sender hints and tips. &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-6169922333341801985?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/6169922333341801985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/08/introduction-to-serial-sender.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/6169922333341801985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/6169922333341801985'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/08/introduction-to-serial-sender.html' title='Introduction to Serial Sender'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-w8vHgD8pgkQ/TluwQjfTu-I/AAAAAAAAABw/bSFp7jI2DpA/s72-c/sshw_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-4555364073993254945</id><published>2011-08-16T15:36:00.000-07:00</published><updated>2012-01-02T06:53:00.537-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serial port'/><category scheme='http://www.blogger.com/atom/ns#' term='cable'/><category scheme='http://www.blogger.com/atom/ns#' term='USB'/><title type='text'>Port and Power for Serial Displays with a USB Cable</title><content type='html'>Say you want to demo or configure one of our serial displays but your PC lacks a COM port—what to do? One answer: get an inexpensive USB/serial-port cable made by &lt;a href="http://www.ftdichip.com/"&gt;FTDI&lt;/a&gt;, spend a couple of minutes crimping on a connector, and you've got a snazzy cable that provides serial output and power.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;For this demo, we picked up a USB-RS232-WE-1800_5.0 cable from &lt;a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&amp;amp;name=768-1078-ND"&gt;Digikey&lt;/a&gt;. There are several products in this series; make sure you get the right one by decoding the part number:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;USB-RS232:&lt;/b&gt; USB in, RS-232 out&lt;/li&gt;&lt;li&gt;&lt;b&gt;WE-1800&lt;/b&gt;: Stripped wire ends, 1.8 meters long&lt;/li&gt;&lt;li&gt;&lt;b&gt;_5.0&lt;/b&gt;: 5V power available&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;The _5.0 version is sometimes out of stock. Don't substitute the _0.0 model (unless you're going to hook up a separate power supply for the display). If you have a &lt;a href="http://seetron.com/glo216.html"&gt;GLO-216&lt;/a&gt; or &lt;a href="http://seetron.com/glo416.html"&gt;GLO-416&lt;/a&gt; series display that you're using in noninverted-TTL mode (Spol jumper cut), you can substitute a &lt;a href="http://search.digikey.com/scripts/DkSearch/dksus.dll?lang=en&amp;amp;site=US&amp;amp;KeyWords=TTL-232R-5v-WE&amp;amp;x=22&amp;amp;y=23"&gt;TTL-232R-5V-WE&lt;/a&gt; cable. Its output is not RS-232 compatible, but the GLOs can accept it. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With either cable, the prep is the same: &lt;a href="http://seetron.com/apps/app_connectors.html"&gt;Crimp header sockets&lt;/a&gt; to the power, ground and TXD wires (red, black and orange, respectively), click 'em into a 5-pin socket housing, and plug onto a display. Plug the USB connector into the PC and let it search for and install drivers. Take note of the COM port number assigned, or look it up in your control panel. You're ready to go. Now you can (for example) use &lt;a href="http://seetron.com/download/sersend2.zip"&gt;Serial Sender&lt;/a&gt; to demo or configure your display.&lt;br /&gt;&lt;br /&gt;We tried the FTDI cables with a variety of PCs ranging from XP to Windows 7, and in all cases the install went smoothly without need for manual installation. The Windows found-new-hardware process loaded the FTDI drivers automatically. Only quirk was that under XP the installer ran twice. After the second run, everything worked.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note regarding USB power:&lt;/b&gt; USB offers enough current to drive any of our OLED or LCD products, but is insufficient to drive VFDs. You can still use the cables, but you will need an external source of regulated 5Vdc.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-UYdbmvKnKGM/Tkrs9LvnVgI/AAAAAAAAABc/Q8TjQoSac-c/s1600/ftdiCable.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-UYdbmvKnKGM/Tkrs9LvnVgI/AAAAAAAAABc/Q8TjQoSac-c/s320/ftdiCable.jpg" width="255" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;FTDI USB-RS232 cable&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-3lyW4SmlBz0/Tkrs96S8BnI/AAAAAAAAABk/7f4renPPHj4/s1600/ftdiCrimps.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://3.bp.blogspot.com/-3lyW4SmlBz0/Tkrs96S8BnI/AAAAAAAAABk/7f4renPPHj4/s320/ftdiCrimps.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;Header sockets crimped to&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;+5 (red), GND (black) and TXD (orange).&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-68ymQrr6ECU/Tkrs-JYDHfI/AAAAAAAAABo/8I2ZkvAFSI4/s1600/ftdiHousing.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://2.bp.blogspot.com/-68ymQrr6ECU/Tkrs-JYDHfI/AAAAAAAAABo/8I2ZkvAFSI4/s320/ftdiHousing.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;Socket housing installed.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9es5f6AlfDQ/Tkrs9pRcKOI/AAAAAAAAABg/H7Ly4R-8rwc/s1600/ftdiConnected.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="216" src="http://3.bp.blogspot.com/-9es5f6AlfDQ/Tkrs9pRcKOI/AAAAAAAAABg/H7Ly4R-8rwc/s320/ftdiConnected.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;Plugged onto a GLO-216 interface.&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ryqvvNvpak4/Tkrs8SUyYFI/AAAAAAAAABY/mGRt9Xs9tmw/s1600/ftdiSuccess.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="432" src="http://4.bp.blogspot.com/-ryqvvNvpak4/Tkrs8SUyYFI/AAAAAAAAABY/mGRt9Xs9tmw/s640/ftdiSuccess.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;b&gt;Receiving a test message from Serial Sender.&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-4555364073993254945?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/4555364073993254945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/08/port-and-power-for-serial-displays-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/4555364073993254945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/4555364073993254945'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/08/port-and-power-for-serial-displays-with.html' title='Port and Power for Serial Displays with a USB Cable'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-UYdbmvKnKGM/Tkrs9LvnVgI/AAAAAAAAABc/Q8TjQoSac-c/s72-c/ftdiCable.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-1174623727697414318</id><published>2011-08-16T09:52:00.000-07:00</published><updated>2011-08-29T14:53:48.125-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serial display'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-216'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='OLED'/><title type='text'>Ultrasonic Sensor Demo Drives Seetron Serial OLED</title><content type='html'>At &lt;a href="http://www.electronicsblog.net/arduino-and-ultra-sonic-range-measurement-module-or-how-to-measure-the-pulse-time-with-a-hardware-timer-and-an-interrupt/#more-437"&gt;electronicsblog.net&lt;/a&gt;, author Darius makes good use of a &lt;a href="http://seetron.com/glo216.html"&gt;GLO-216G serial display&lt;/a&gt; in an ultrasonic rangefinder demo. In the &lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=y8ox5NPvcPc"&gt;Youtube video&lt;/a&gt; below you can see that he's using the display's extra-large number font in simulated 7-segment mode to get maximum size from the displayed numbers.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/y8ox5NPvcPc/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/y8ox5NPvcPc&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/y8ox5NPvcPc&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-1174623727697414318?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/1174623727697414318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/08/ultrasonic-sensor-demo-drives-seetron.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/1174623727697414318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/1174623727697414318'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/08/ultrasonic-sensor-demo-drives-seetron.html' title='Ultrasonic Sensor Demo Drives Seetron Serial OLED'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5128599798485935180.post-6832874883030498766</id><published>2011-08-16T09:03:00.000-07:00</published><updated>2011-08-29T14:54:04.758-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serial display'/><category scheme='http://www.blogger.com/atom/ns#' term='GLO-216'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='OLED'/><title type='text'>GLO-216G Serial OLED Featured at The Electronics Hobbyist</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://seetron.com/images/glolineup.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://seetron.com/images/glolineup.png" width="143" /&gt;&lt;/a&gt;&lt;/div&gt;Great getting-acquainted article on the &lt;a href="http://seetron.com/glo216.html"&gt;GLO-216G serial display&lt;/a&gt; over at &lt;a href="http://www.theelectronicshobbyist.com/blog/2011/05/arduino-serial-display-introducing-the-glo-216-2x16-multifont-serial-oled-display/"&gt;The Electronics Hobbyist blog&lt;/a&gt;. Sharp, well-thought-out code for &lt;a href="http://www.arduino.cc/"&gt;Arduino&lt;/a&gt; demonstrates large fonts and custom characters.&lt;br /&gt;&lt;br /&gt;In addition to the excellent information, the article contains a coupon code good for 20% off the purchase of a GLO-216 serial OLED display.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5128599798485935180-6832874883030498766?l=seetrontech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seetrontech.blogspot.com/feeds/6832874883030498766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://seetrontech.blogspot.com/2011/08/glo-216g-serial-oled-featured-at.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/6832874883030498766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5128599798485935180/posts/default/6832874883030498766'/><link rel='alternate' type='text/html' href='http://seetrontech.blogspot.com/2011/08/glo-216g-serial-oled-featured-at.html' title='GLO-216G Serial OLED Featured at The Electronics Hobbyist'/><author><name>Seetron Tech</name><uri>http://www.blogger.com/profile/16956843799380825105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='19' src='http://4.bp.blogspot.com/-qY1HMtSR-bE/TkqOlc76IHI/AAAAAAAAAA0/Xxk4UtoZAZQ/s220/glo416.jpg'/></author><thr:total>0</thr:total></entry></feed>
