한국   대만   중국   일본 
Project 1: Morse Code · jwhitehorn/pi_piper Wiki · GitHub
Skip to content

Project 1: Morse Code

jwhitehorn edited this page Jan 13, 2013 · 2 revisions

Overview

The circuit used in the morse code example is about as simple as it gets.

circuit

Wire from GPIO pin #17 to a 1K ohm resistor, and then into an LED. From there connect the LED to ground.

The idea is pretty simple; with only a single LED what can you do? For starters you could send Morse Code .

The app lets you type in a phrase, and it will blink the LED appropriately.

Coding

Morse Code isn't binary, the timing of the light being on and off also carriers meaning. Additionally each letter of the alphabet has it's own unique sequences of dots and dashes, varying from a single dot or dash up to four. To keep track of all of these we use a hash table to easily allow us to look up the appropriate code for each letter:

character_timing
 =
 {
 "a"
 =>
 [
dot
,
 dash
]
,
             "b"
 =>
 [
dash
,
 dot
,
 dot
,
 dot
]
,
   "c"
 =>
 [
dash
,
 dot
,
 dash
,
 dot
]
,

                     "d"
 =>
 [
dash
,
 dot
,
 dot
]
,
        "e"
 =>
 [
dot
]
,
                   "f"
 =>
 [
dot
,
 dot
,
 dash
,
 dot
]
,
 
                     "g"
 =>
 [
dash
,
 dash
,
 dot
]
,
       "h"
 =>
 [
dot
,
 dot
,
 dot
,
 dot
]
,
    "i"
 =>
 [
dot
,
 dot
]
,

                     "j"
 =>
 [
dot
,
 dash
,
 dash
,
 dash
]
,
 "k"
 =>
 [
dash
,
 dot
,
 dash
]
,
       "l"
 =>
 [
dot
,
 dash
,
 dot
,
 dot
]
,

                     "m"
 =>
 [
dash
,
 dash
]
,
            "n"
 =>
 [
dash
,
 dot
]
,
             "o"
 =>
 [
dash
,
 dash
,
 dash
]
,

                     "p"
 =>
 [
dot
,
 dash
,
 dash
,
 dot
]
,
  "q"
 =>
 [
dash
,
 dash
,
 dot
,
 dash
]
,
 "r"
 =>
 [
dot
,
 dash
,
 dot
]
,

                     "s"
 =>
 [
dot
,
 dot
,
 dot
]
,
         "t"
 =>
 [
dash
]
,
                  "u"
 =>
 [
dot
,
 dot
,
 dash
]
,

                     "v"
 =>
 [
dot
,
 dot
,
 dot
,
 dash
]
,
   "w"
 =>
 [
dot
,
 dash
,
 dash
]
,
       "x"
 =>
 [
dash
,
 dot
,
 dot
,
 dash
]
,

                     "y"
 =>
 [
dash
,
 dot
,
 dash
,
 dash
]
,
 "z"
 =>
 [
dash
,
 dash
,
 dot
,
 dot
]
}
 

The core of the application will then loop over each character typed, and turn the LED on/off and then sleep for a varying amount of time.

  something
.
each_char
 do
 |
letter
|
    
if
 letter
 == 
" "

      pin
.
off

      sleep
 medium_gap

    else

      character_timing
[
letter
]
.
each
 do
 |
timing
| 
        
pin
.
on

        sleep
 timing

        pin
.
off

        sleep
 inter_element_gap

      end

      sleep
 short_gap
 - 
inter_element_gap

    end

The complete sample code can be found in the examples/morse_code directory of the Pi Piper project.