<?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-7199214005813750988</id><updated>2011-09-05T15:55:28.478-05:00</updated><title type='text'>Joel's iFoundry Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://joelspadin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://joelspadin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Joel</name><uri>http://www.blogger.com/profile/03942306147088271610</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7199214005813750988.post-5948044740176000035</id><published>2009-12-17T17:26:00.000-06:00</published><updated>2009-12-17T17:26:47.700-06:00</updated><title type='text'>Reflection</title><content type='html'>If your screen is glossy enough, it's quite easy to reflect. &amp;nbsp;Simply click this black square and look into your screen.&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/_GrD2j_kQJto/SyqrrpFj9GI/AAAAAAAAAXw/F9Xg7-mJovU/s1600-h/black.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_GrD2j_kQJto/SyqrrpFj9GI/AAAAAAAAAXw/F9Xg7-mJovU/s400/black.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The actual content of this post happens when you click the "Read more" button.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Sorry. &amp;nbsp;That was the wrong kind of reflection. &amp;nbsp;According to Dictionary.com, reflect (not to be confused with&amp;nbsp;&lt;a href="http://tvtropes.org/pmwiki/pub/images/OMGWTFOTL.jpg"&gt;genuflect&lt;/a&gt;) means&amp;nbsp; &lt;q&gt;to think, ponder, or meditate&lt;/q&gt;, and I'll be using that definition for the remainder of this post as I reflect upon this past semester, what went well, what didn't go well, and the stuff I just wasn't there for.&lt;br /&gt;&lt;br /&gt;At the beginning of this semester, I had no idea what &lt;a href="http://ifoundry.illinois.edu/"&gt;iFoundry&lt;/a&gt; was. &amp;nbsp;Due to a communications mix-up, I didn't even know whether I got in or not. &amp;nbsp;Then came the iFoundry orientation (iLaunch) which, while it was a lot of fun, I left still somewhat confused as to what iFoundry really was. &amp;nbsp;Sure, I learned that it was designed to create more well-rounded engineers by teaching something called the "missing basics", and that someone really likes affixing lowercase i's to the beginning of nouns, but I didn't know how we were going to do that. &amp;nbsp;Actually, at that point, I doubt anyone really knew what we were doing--not even the professors--since the professors pretty much told us, "we'll do what you want to do."&lt;br /&gt;&lt;br /&gt;I guess at this point, I should probably clarify what iFoundry is. &amp;nbsp;iFoundry is a new organization (started this year) within the engineering department of the University of Illinois. &amp;nbsp;It is dedicated to transforming the engineering curriculum to better prepare engineering students by giving them a greater breadth of knowledge in the areas outside of math and science which are necessary to be successful in the workplace. &amp;nbsp;Judging from the fact that I can actually define iFoundry, I'd say I am no longer confused.&lt;br /&gt;&lt;br /&gt;The professors gave us a framework for meeting and making decisions, but it was up to us figure out what we would do and how we would do it. &amp;nbsp;We iFoundry students split up into four groups based on what we wanted to do. &amp;nbsp;I joined the group "Art and Engineering Design", because I like art, and I like design, and I like engineering. &amp;nbsp;After choosing our iChair (which, in any normal organization would just be called a "leader"), we decided upon some of the things we wanted to do. &amp;nbsp;One thing a lot of people wanted to do was a project of some sort. &amp;nbsp;After all, we are the art and design group--shouldn't we, you know, make something? &amp;nbsp;Despite the huge interest, it took almost a whole semester to decide what to do, so we haven't actually done a project yet. &amp;nbsp;Except, we did. &amp;nbsp;As part of the in-class portion of iFoundry, we were put in groups of five and given an&amp;nbsp;&lt;a href="http://arduino.cc/"&gt;Arduino&lt;/a&gt;, $100, and a few weeks to decide what to do with it. &amp;nbsp;As you can see on this blog and &lt;a href="http://leovip101.ncsa.uiuc.edu/"&gt;here&lt;/a&gt;, we came up with some pretty interesting and fun projects. &amp;nbsp;Before that, we built steam powered cars out of tin, soda cans, and various other iDoodads (I am well aware that that is not a word. &amp;nbsp;I also don't care. :P). &amp;nbsp;Here's what I think of those two projects:&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/_GrD2j_kQJto/Syq4YYfOsQI/AAAAAAAAAX4/HVlazczkWsE/s1600-h/great_success.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_GrD2j_kQJto/Syq4YYfOsQI/AAAAAAAAAX4/HVlazczkWsE/s400/great_success.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I must return to studying, so I'll cut this a little short. &amp;nbsp;We took a field trip to&amp;nbsp;&lt;acronym title="Skidmore, Owings &amp;amp; Merrill"&gt;SOM&lt;/acronym&gt;&amp;nbsp;to check stuff out, but I had an unavoidable class that day, so I couldn't go. &amp;nbsp;We also talked with Gerry LaBedz from Motorola quite a bit, which was both entertaining and very informative. &amp;nbsp;I must go. &amp;nbsp;Goodbye!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7199214005813750988-5948044740176000035?l=joelspadin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelspadin.blogspot.com/feeds/5948044740176000035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://joelspadin.blogspot.com/2009/12/reflection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/5948044740176000035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/5948044740176000035'/><link rel='alternate' type='text/html' href='http://joelspadin.blogspot.com/2009/12/reflection.html' title='Reflection'/><author><name>Joel</name><uri>http://www.blogger.com/profile/03942306147088271610</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_GrD2j_kQJto/SyqrrpFj9GI/AAAAAAAAAXw/F9Xg7-mJovU/s72-c/black.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7199214005813750988.post-3050533757051001773</id><published>2009-12-12T15:51:00.002-06:00</published><updated>2009-12-12T15:52:24.895-06:00</updated><title type='text'>Morse Code Arduino Sketch</title><content type='html'>I've uploaded the Arduino sketch for the Morse code translator here:&lt;br /&gt;&lt;a href="http://chaosinacan.x10hosting.com/media/code/morse.zip"&gt;http://chaosinacan.x10hosting.com/media/code/morse.zip&lt;/a&gt;&lt;br /&gt;It is fully commented, so hopefully it isn't too difficult to figure out. &amp;nbsp;If it's confusing, just ask me and I'll try to explain it.&lt;br /&gt;&lt;br /&gt;Also, if you want to try this project out, this is the circuit diagram for the entire translator. &amp;nbsp;The potentiometer at the center right was used to control the backlight level, but I replaced it with a setting in the code, so you can ignore that part. &amp;nbsp;If you're unfamiliar with the symbol, the component on pin 12 is a piezo buzzer. &amp;nbsp;Everything else should be labeled.&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/_GrD2j_kQJto/SyQHeimm-oI/AAAAAAAAAXY/2QGOzHb-KUs/s1600-h/circuit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_GrD2j_kQJto/SyQHeimm-oI/AAAAAAAAAXY/2QGOzHb-KUs/s400/circuit.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;More stuff, like a component list after the break...&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is a list of the components you will need and links for the more specialized components:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://arduino.cc/"&gt;An Arduino Duemilanove&lt;/a&gt; - The kit at &lt;a href="http://oomlout.com/ards.html"&gt;http://oomlout.com/ards.html&lt;/a&gt; also comes with the breadboard, piezo buzzer, switches, resistors, wires, and photoresistor. &amp;nbsp;If you already have all that stuff, you can &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=666"&gt;get one at Sparkfun too&lt;/a&gt;!&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9376"&gt;A square force-sensitive resistor&lt;/a&gt; - Sure, you could use a switch instead, but that's no fun.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sparkfun.com/commerce/categories.php?c=148"&gt;A serial enabled 16x2 5V LCD screen&lt;/a&gt; - If you use something other than the Sparkfun screens, you will probably need to modify the Arduino code.&lt;/li&gt;&lt;li&gt;A small photoresistor&lt;/li&gt;&lt;li&gt;A piezo buzzer&amp;nbsp;&lt;/li&gt;&lt;li&gt;2x momentary pushbutton switches&lt;/li&gt;&lt;li&gt;4x 10,000 Ohm resistors&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;When the translator powers up, it loads settings from its EEPROM. &amp;nbsp;The first time you start it, nothing meaningful is stored in EEPROM, so it could load gibberish or just 0 into all of its settings. &amp;nbsp;If this happens, you should be able to get into the menu and do a reset, which will fix this problem forever. &amp;nbsp;If you can't, comment out the "loadSettings();" on line 60 of morse.pde, run the program, and do a reset.&lt;br /&gt;&lt;br /&gt;I should probably explain how the menu works too. &amp;nbsp;The two pushbutton switches act as Left and Right buttons and the force sensor you tap Morse code into acts as the Enter button. &amp;nbsp;Press either the Left or Right button to enter the menu. &amp;nbsp;You can also quickly exit the menu by pressing both Left and Right at the same time. &amp;nbsp;You navigate through the menu using the Left and Right buttons and make a selection by pressing Enter. &amp;nbsp;If a number appears, you can edit it by pressing/holding the Left or Right buttons and finish editing by pressing Enter. &amp;nbsp;If a question appears, like "Reset All?", you choose one of the two answers at the bottom with the Left or Right buttons.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7199214005813750988-3050533757051001773?l=joelspadin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelspadin.blogspot.com/feeds/3050533757051001773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://joelspadin.blogspot.com/2009/12/morse-code-arduino-sketch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/3050533757051001773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/3050533757051001773'/><link rel='alternate' type='text/html' href='http://joelspadin.blogspot.com/2009/12/morse-code-arduino-sketch.html' title='Morse Code Arduino Sketch'/><author><name>Joel</name><uri>http://www.blogger.com/profile/03942306147088271610</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GrD2j_kQJto/SyQHeimm-oI/AAAAAAAAAXY/2QGOzHb-KUs/s72-c/circuit.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7199214005813750988.post-844396985653036291</id><published>2009-12-12T13:58:00.005-06:00</published><updated>2009-12-17T17:04:44.912-06:00</updated><title type='text'>More Pictures</title><content type='html'>...or, should that be, Morse Pictures. &amp;nbsp;&lt;span style="font-size: large;"&gt;Ha&lt;/span&gt;ha&lt;span style="font-size: x-small;"&gt;ha&lt;/span&gt;&lt;span style="font-size: xx-small;"&gt;ha&lt;/span&gt;... &amp;nbsp;no.&lt;br /&gt;&lt;br /&gt;Here's a few more pictures of the Morse code translator, starting with some outside shots. &amp;nbsp;We bought some gears thinking we would be making something else, but when that didn't work out, we decided we needed to use the gears for something. &amp;nbsp;Now our enclosure looks like one of those things you used to make in Kindergarten by gluing macaroni to stuff...&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/_GrD2j_kQJto/SyPymyGGQkI/AAAAAAAAAWY/cTWkF-4H89A/s1600-h/IMG_0398.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="1" src="http://3.bp.blogspot.com/_GrD2j_kQJto/SyPymyGGQkI/AAAAAAAAAWY/cTWkF-4H89A/s400/IMG_0398.JPG" /&gt;&lt;/a&gt;&lt;br /&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/_GrD2j_kQJto/SyPy0KngaOI/AAAAAAAAAWg/IrOcKkebUmc/s1600-h/IMG_0399.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="1" src="http://2.bp.blogspot.com/_GrD2j_kQJto/SyPy0KngaOI/AAAAAAAAAWg/IrOcKkebUmc/s400/IMG_0399.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;More pictures after the break...&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;There is a menu system that lets you adjust the timing and backlight level. &amp;nbsp;The two buttons in this hole are used to navigate it. &amp;nbsp;We wanted to stick them on top, but we couldn't find a way to mount them.&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/_GrD2j_kQJto/SyPy4LMjkZI/AAAAAAAAAWo/pz3lexao7TY/s1600-h/IMG_0400.JPG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="1" src="http://1.bp.blogspot.com/_GrD2j_kQJto/SyPy4LMjkZI/AAAAAAAAAWo/pz3lexao7TY/s400/IMG_0400.JPG" /&gt;&lt;/a&gt;&lt;br /&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/_GrD2j_kQJto/SyPzEY4Ux6I/AAAAAAAAAWw/zEc9gkMJjWs/s1600-h/IMG_0401.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="1" src="http://3.bp.blogspot.com/_GrD2j_kQJto/SyPzEY4Ux6I/AAAAAAAAAWw/zEc9gkMJjWs/s400/IMG_0401.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The slightly shiny thing inside the hole is a photoresistor. &amp;nbsp;It is used to automatically adjust the screen's backlight brightness as seen in the second video &lt;a href="http://joelspadin.blogspot.com/2009/12/morse-code-translator-in-action.html"&gt;here&lt;/a&gt;.&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/_GrD2j_kQJto/SyPzdjRA0LI/AAAAAAAAAW4/QVgMIkBO0sY/s1600-h/IMG_0402.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="1" src="http://4.bp.blogspot.com/_GrD2j_kQJto/SyPzdjRA0LI/AAAAAAAAAW4/QVgMIkBO0sY/s400/IMG_0402.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The top layer of the enclosure where the force sensor and LCD screen are mounted. &amp;nbsp;This whole thing is literally held together by cardboard and duct tape.&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/_GrD2j_kQJto/SyPzmnnsxDI/AAAAAAAAAXA/WEmo7RziqQI/s1600-h/IMG_0403.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="1" src="http://4.bp.blogspot.com/_GrD2j_kQJto/SyPzmnnsxDI/AAAAAAAAAXA/WEmo7RziqQI/s400/IMG_0403.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Inside the box. &amp;nbsp;The circuit is pretty simple since the Arduino microcontroller does all the work.&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/_GrD2j_kQJto/SyPzskWzV_I/AAAAAAAAAXI/-haW0BU16Rk/s1600-h/IMG_0404.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="1" src="http://3.bp.blogspot.com/_GrD2j_kQJto/SyPzskWzV_I/AAAAAAAAAXI/-haW0BU16Rk/s400/IMG_0404.JPG" /&gt;&lt;/a&gt;&lt;br /&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/_GrD2j_kQJto/SyPzzHGp_tI/AAAAAAAAAXQ/A00jla1p8xs/s1600-h/IMG_0405.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="1" src="http://3.bp.blogspot.com/_GrD2j_kQJto/SyPzzHGp_tI/AAAAAAAAAXQ/A00jla1p8xs/s400/IMG_0405.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7199214005813750988-844396985653036291?l=joelspadin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelspadin.blogspot.com/feeds/844396985653036291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://joelspadin.blogspot.com/2009/12/more-pictures.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/844396985653036291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/844396985653036291'/><link rel='alternate' type='text/html' href='http://joelspadin.blogspot.com/2009/12/more-pictures.html' title='More Pictures'/><author><name>Joel</name><uri>http://www.blogger.com/profile/03942306147088271610</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GrD2j_kQJto/SyPymyGGQkI/AAAAAAAAAWY/cTWkF-4H89A/s72-c/IMG_0398.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7199214005813750988.post-4159579924159816487</id><published>2009-12-11T16:27:00.000-06:00</published><updated>2009-12-11T16:27:05.256-06:00</updated><title type='text'>Morse Code Translator in Action</title><content type='html'>&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Z-Ih1sAtB00&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Z-Ih1sAtB00&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;A video of the Morse code translator in action. &amp;nbsp;Apparently, I fail at entering exclamation marks. &amp;nbsp;The screen's backlight automatically adjusts to the brightness of the room, shown in this next video.&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/adEFrVSjtcM&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/adEFrVSjtcM&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7199214005813750988-4159579924159816487?l=joelspadin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelspadin.blogspot.com/feeds/4159579924159816487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://joelspadin.blogspot.com/2009/12/morse-code-translator-in-action.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/4159579924159816487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/4159579924159816487'/><link rel='alternate' type='text/html' href='http://joelspadin.blogspot.com/2009/12/morse-code-translator-in-action.html' title='Morse Code Translator in Action'/><author><name>Joel</name><uri>http://www.blogger.com/profile/03942306147088271610</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7199214005813750988.post-2676148730697388251</id><published>2009-12-09T22:17:00.003-06:00</published><updated>2009-12-12T14:02:57.493-06:00</updated><title type='text'>Reading Morse Code with an Arduino</title><content type='html'>For part of my ENG 198 class, we were put into groups of 5, given an &lt;a href="http://www.arduino.cc/"&gt;Arduino microcontroller&lt;/a&gt; and a $100 budget, and told what was effectively, "make something." &amp;nbsp;My group decided to make a balancing robot. &amp;nbsp;Then the parts we needed were on 2-3 weeks backorder, so we decided to go with plan B--just as soon as we could figure out what that was. &amp;nbsp;Eventually, we decided to make a box that you could tap Morse code into, and it would convert it into text and display it on a small LCD screen.&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/_GrD2j_kQJto/SyBpuP7WuoI/AAAAAAAAAWQ/NxdOve-3gRY/s1600-h/IMG_0394%5B1%5D.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="1" src="http://1.bp.blogspot.com/_GrD2j_kQJto/SyBpuP7WuoI/AAAAAAAAAWQ/NxdOve-3gRY/s400/IMG_0394%5B1%5D.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This is what happens when you use part of your budget on gears for a robot... then you build something that isn't a robot. &amp;nbsp;Anyways, ignoring the last-minute cardboard enclosure, there's a &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9394"&gt;serial-enabled LCD screen&lt;/a&gt; at the top, a &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9376"&gt;force sensor&lt;/a&gt; at the bottom, and the hole on the left is for a photo-resistor that adjusts the backlight brightness. &amp;nbsp;I'll post a video of it in action later along with some photos of the inside, but what I really want to talk about is a simple algorithm to interpret button presses as Morse code. &amp;nbsp;The Internet is full of examples as to how to turn dots and dashes into letters, or letters into dots and dashes, but I couldn't find anything on getting those dots and dashes in the first place.&lt;br /&gt;&lt;br /&gt;More after the break...&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The code here uses the Arduino libraries, but it's really just C/C++. &amp;nbsp;millis() returns the number of milliseconds elapsed since the Arduino was switched on, and I'll be using that for timing. &amp;nbsp;digitalRead(pin) returns the state of the digital input on the microcontroller (HIGH or LOW). &amp;nbsp;The logic goes something like this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&amp;nbsp;If the switch gets pressed, record the time it became pressed&lt;/li&gt;&lt;li&gt;When the switch gets released, record the time it was released and this to the time it was pressed to get the length of the switch press. &amp;nbsp;&lt;/li&gt;&lt;li&gt;If this time is less than some threshold, a dot was entered, otherwise a dash was entered.&lt;/li&gt;&lt;li&gt;&amp;nbsp;When the switch is unpressed, compare the current time to the time the switch was released to get how long it has been unpressed. &amp;nbsp;&lt;/li&gt;&lt;li&gt;If this time is longer than some small threshold, take all the dots and dashes recorded and translate them into a character. &amp;nbsp;Print it, clear the record of dots and dashes, and remember that we already printed a character so we don't do it again until more Morse code is entered.&lt;/li&gt;&lt;li&gt;If the unpressed time is longer than some larger threshold, this is a break between words. &amp;nbsp;Print a space and stop checking for spaces and character breaks (steps 4-6).&lt;/li&gt;&lt;li&gt;&amp;nbsp;If the switch gets pressed again, we can start looking for spaces and character breaks again.&lt;/li&gt;&lt;li&gt;Goto step 1.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Here's the code. &amp;nbsp;I'll leave it to you to decide how to remember the Morse code and translate it to text, but this will get you the dots and dashes:&lt;br /&gt;&lt;br /&gt;&lt;pre style="overflow: scroll;"&gt;//The digital pin the switch is on&lt;br /&gt;#define SWITCH_IN  0&lt;br /&gt;//If the switch is held longer than this, it's a dash&lt;br /&gt;#define DASH_LENGTH  200&lt;br /&gt;//If the switch is left unpressed longer than this, it's a&lt;br /&gt;//character break.  &lt;br /&gt;#define BREAK_LENGTH 220&lt;br /&gt;//If the switch is left unpressed longer than this, it's a space&lt;br /&gt;#define SPACE_LENGTH 900&lt;br /&gt;&lt;br /&gt;void loop()&lt;br /&gt;{&lt;br /&gt; //The time the switch was last pressed&lt;br /&gt; static long onTime = 0;&lt;br /&gt; //The time the switch was last released&lt;br /&gt; static long offTime = 0;&lt;br /&gt; &lt;br /&gt; static bool lastSwitch = false;&lt;br /&gt; //Current switch state&lt;br /&gt; bool switchState = digitalRead(SWITCH_IN) == LOW;&lt;br /&gt; //Was switch pressed this loop?&lt;br /&gt; bool switchPressed = switchState &amp;amp;&amp;amp; !lastSwitch;&lt;br /&gt; //Was switch released this loop?&lt;br /&gt; bool switchReleased = lastSwitch &amp;amp;&amp;amp; !switchState;&lt;br /&gt; //Update last state for next loop&lt;br /&gt; lastSwitch = switchState;&lt;br /&gt; &lt;br /&gt; //Keep track of these so we don't keep printing spaces&lt;br /&gt; //over and over again:&lt;br /&gt; //Have we already printed a space?&lt;br /&gt; static bool spaceEnded = false;&lt;br /&gt; //Have we already printed a character and moved on?&lt;br /&gt; static bool breakEnded = false;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; if (switchPressed)&lt;br /&gt; {&lt;br /&gt;  //Record the time the switch was pressed&lt;br /&gt;  onTime = millis();&lt;br /&gt;  //When the switch is pressed, reset whether character&lt;br /&gt;  //breaks or spaces have already been printed.&lt;br /&gt;  spaceEnded = false;&lt;br /&gt;  breakEnded = false;&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;  //Record the time the switch was released&lt;br /&gt;  offTime = millis();&lt;br /&gt;  //Compare the on and off times to get the length of&lt;br /&gt;  //the switch press, then check to see whether that was&lt;br /&gt;  //a dot or a dash&lt;br /&gt;  long pressLength = offTime - onTime;&lt;br /&gt;  if (pressLength &amp;gt; dashLength)&lt;br /&gt;  {&lt;br /&gt;   //A dash was entered&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;   //A dot was entered&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; //If the switch is unpressed and we haven't printed a space yet,&lt;br /&gt; //check to see if we should.&lt;br /&gt; if (!switchState &amp;amp;&amp;amp; !spaceEnded)&lt;br /&gt; {&lt;br /&gt;  //Compare the current time and the off time to get the time the&lt;br /&gt;  //switch has been unpressed, then check to see whether we should&lt;br /&gt;  //print a space or character&lt;br /&gt;  long waitLength = millis() - offTime;&lt;br /&gt;  if (waitLength &amp;gt; spaceLength)&lt;br /&gt;  {&lt;br /&gt;   //A space was entered&lt;br /&gt;   spaceEnded = true;&lt;br /&gt;  }&lt;br /&gt;  else if (!breakEnded &amp;amp;&amp;amp; waitLength &amp;gt; breakLength)&lt;br /&gt;  {&lt;br /&gt;   //Done entering a character.  Parse the dots/dashes and reset&lt;br /&gt;   breakEnded = true;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;I will post the full source code of the project later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7199214005813750988-2676148730697388251?l=joelspadin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelspadin.blogspot.com/feeds/2676148730697388251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://joelspadin.blogspot.com/2009/12/reading-morse-code-with-arduino.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/2676148730697388251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/2676148730697388251'/><link rel='alternate' type='text/html' href='http://joelspadin.blogspot.com/2009/12/reading-morse-code-with-arduino.html' title='Reading Morse Code with an Arduino'/><author><name>Joel</name><uri>http://www.blogger.com/profile/03942306147088271610</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GrD2j_kQJto/SyBpuP7WuoI/AAAAAAAAAWQ/NxdOve-3gRY/s72-c/IMG_0394%5B1%5D.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7199214005813750988.post-2197979579968768836</id><published>2009-09-28T20:12:00.001-05:00</published><updated>2009-09-28T20:14:54.403-05:00</updated><title type='text'>The Pen is Mightier than PowerPoint</title><content type='html'>I have nothing against Microsoft or PowerPoint (or blind people), but it's often easier, faster, and more effective to explain things with a pen and paper. &amp;nbsp;Part of the reading for the University of Illinois' &lt;a href="http://ifoundry.illinois.edu/"&gt;iFoundry&lt;/a&gt; class is Dan Roam's "&lt;a href="http://www.thebackofthenapkin.com/"&gt;the Back of the Napkin&lt;/a&gt;", which shows how to use pictures to solve problems. &amp;nbsp;After attending a lecture by none other than Dan Roam, I can say that a visual representation of a problem definitely helps to understand the problem. &amp;nbsp;All of us are visual thinkers. &amp;nbsp;Paraphrasing Mr. Roam, if you have the ability to walk into a room without running into something, you already have the ability to solve problems with pictures. &amp;nbsp;(For the rest of you, I'm not sure what to say.)&lt;br /&gt;&lt;br /&gt;What's wrong with PowerPoint then? &amp;nbsp;Unless you have a tablet PC or are incredibly skilled with a mouse, programs like PowerPoint only serve to limit your creativity. &amp;nbsp;Actually, it isn't really PowerPoint's fault. &amp;nbsp;PowerPoint makes it simple to build bulleted lists, fancy charts, and pretty effects, but it is often so easy to focus on the presentation of an idea rather than the idea itself. &amp;nbsp;Presentations with nothing but text and bullet points aren't all that effective either. &amp;nbsp;Have you ever tried reading a book and listening to someone at the same time? &amp;nbsp;It's not so easy to focus your language facilities on two things at the same time. &amp;nbsp;On the other hand, if you can walk and talk to a friend without running into anything, you can listen and understand pictures at the same time. &amp;nbsp;In short, pictures can supplement a presentation without detracting from it. &amp;nbsp;For a great example, take a look at Mr. Roam's&amp;nbsp;&lt;a href="http://digitalroam.typepad.com/digital_roam/2009/08/american-health-care-on-4-napkins-now-all-together.html"&gt;explanation of what went wrong with American health-care.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll end this with another interesting tidbit: &amp;nbsp;Take a look at these two pictures from &lt;a href="http://www.hazardouspaste.com/2009/03/tech-support-flowchart/"&gt;hazardouspaste.com&lt;/a&gt; and &lt;a href="http://xkcd.com/627/"&gt;XKCD&lt;/a&gt;, respectively. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_GrD2j_kQJto/SsFdVaAKpzI/AAAAAAAAAVA/Xyez5p2nYVE/s1600-h/techSupport_flowchart2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_GrD2j_kQJto/SsFdVaAKpzI/AAAAAAAAAVA/Xyez5p2nYVE/s320/techSupport_flowchart2.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://imgs.xkcd.com/comics/tech_support_cheat_sheet.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="420" src="http://imgs.xkcd.com/comics/tech_support_cheat_sheet.png" width="373" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: left;"&gt;Both flowcharts express similar ideas. &amp;nbsp;Which one draws your attention more? &amp;nbsp;The hand drawn one right?&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7199214005813750988-2197979579968768836?l=joelspadin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelspadin.blogspot.com/feeds/2197979579968768836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://joelspadin.blogspot.com/2009/09/pen-is-mightier-than-powerpoint.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/2197979579968768836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/2197979579968768836'/><link rel='alternate' type='text/html' href='http://joelspadin.blogspot.com/2009/09/pen-is-mightier-than-powerpoint.html' title='The Pen is Mightier than PowerPoint'/><author><name>Joel</name><uri>http://www.blogger.com/profile/03942306147088271610</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GrD2j_kQJto/SsFdVaAKpzI/AAAAAAAAAVA/Xyez5p2nYVE/s72-c/techSupport_flowchart2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7199214005813750988.post-8364736303928820424</id><published>2009-08-27T19:07:00.000-05:00</published><updated>2009-08-27T19:07:17.059-05:00</updated><title type='text'>Testing</title><content type='html'>This is a test. This blog is conducting a test of the Emergency Blogging System. This is only a test.&lt;br /&gt;&lt;br /&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget leo elit, in placerat nunc. Nulla id elit vitae orci lobortis posuere. Integer lacinia eros et lectus accumsan ut fermentum arcu varius. Integer sagittis diam ac justo ultricies blandit. Nunc vestibulum convallis molestie. Nulla semper interdum sapien, in aliquet ligula lobortis non. Ut vitae molestie sapien. Nam lacinia est dui. Nullam tincidunt mattis imperdiet. Nam et dui felis. Vivamus non dictum est. Maecenas iaculis lacus vitae justo commodo consectetur tincidunt nisl pulvinar. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque non volutpat lacus. Aenean tincidunt pretium mi, eu consectetur ipsum adipiscing sed. &lt;br /&gt;&lt;br /&gt;This is a test of the Emergency Blogging System. The bloggers of your area in voluntary cooperation with the Federal, State and local authorities have developed this system to keep you informed in the event of a blog post. If this had been an actual blog post, the Lorem Ipsum you just read would have been followed by official information, news or instructions. This blog serves the Champaign-Urbana area. This concludes this test of the Emergency Posting System.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7199214005813750988-8364736303928820424?l=joelspadin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://joelspadin.blogspot.com/feeds/8364736303928820424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://joelspadin.blogspot.com/2009/08/testing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/8364736303928820424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7199214005813750988/posts/default/8364736303928820424'/><link rel='alternate' type='text/html' href='http://joelspadin.blogspot.com/2009/08/testing.html' title='Testing'/><author><name>Joel</name><uri>http://www.blogger.com/profile/03942306147088271610</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
