PowerMorse

PowerMorse came about simply... I got a Griffin PowerMate for Christmas 2004. As soon as I installed it I noticed in the driver's .dmg that it had apple scripts. I popped open the Tickler and it seemed pretty easy. Then I figured that it sure would be funny if you could use the light to do something interesting. Realizing I only had to re-invent most of the wheel I decided to use Morse Code.

The result of about 2 or 3 hours of work is this little AppleScript. It will prompt you for a line of text and then make your Griffin PowerMate's light blink. You can configure the brightness and timing by changing the properties in the first few lines of the script. If I made a mistake, or you'd like to contact me for other reasons my email is chmullig@mbhs.edu. Thanks and enjoy.

Open this script in a new Script Editor window or Download this script.

The Script


--Copyright 2004
--Chris Mulligan
--chmullig@mbhs.edu

--Edit these values to change the length of elements or brightness of the on level
property dit : 0.1 --in seconds, aka a "Dot"
property onlevel : 200 --max brightness, up to 255


--Don't edit!
property dah : 3 * dit
property char_space : 1 * dit
property letter_space : 3 * dit
property word_space : 7 * dit
(* for WPM
(50 * wpm)/60 = dit)
*)



tell application "PowerMateDriver"
    -- save previous settings
    set prevbrightness to get brightness
    set prevpulserate to get pulse rate
    set prevpulsealways to pulse always
    set pulse always to false
    set prevpulseduringsleep to pulse during sleep
    
    
    --send SOS
    set brightness to 0
end tell

display dialog "Enter text to be Morse-Codified..." default answer "" buttons {"OK"} default button 1
copy the result as list to {text_returned, button_pressed}
set input_text to text_returned
parsetext(contents of input_text)

delay word_space


tell application "PowerMateDriver"
    --restore previous settings
    set brightness to prevbrightness
    set pulse rate to prevpulserate
    set pulse always to prevpulsealways
    set pulse during sleep to prevpulseduringsleep
end tell
---end run...

on parsetext(this_text)
    repeat with this_char in this_text
        parseletter(contents of this_char)
    end repeat
end parsetext

on parseletter(letter)
    if letter = "A" or letter = "a" then
        dot()
        dash()
    else if letter = "B" or letter = "b" then
        dash()
        dot()
        dot()
        dot()
    else if letter = "C" or letter = "c" then
        dash()
        dot()
        dash()
        dot()
    else if letter = "D" or letter = "d" then
        dash()
        dot()
        dot()
    else if letter = "E" or letter = "e" then
        dot()
    else if letter = "F" or letter = "f" then
        dot()
        dot()
        dash()
        dot()
    else if letter = "G" or letter = "g" then
        dash()
        dash()
        dot()
    else if letter = "H" or letter = "h" then
        dot()
        dot()
        dot()
        dot()
    else if letter = "I" or letter = "i" then
        dot()
        dot()
    else if letter = "J" or letter = "j" then
        dot()
        dash()
        dash()
        dash()
    else if letter = "K" or letter = "k" then
        dash()
        dot()
        dash()
    else if letter = "L" or letter = "l" then
        dot()
        dash()
        dot()
        dot()
    else if letter = "M" or letter = "m" then
        dash()
        dash()
    else if letter = "N" or letter = "n" then
        dash()
        dot()
    else if letter = "O" or letter = "o" then
        dash()
        dash()
        dash()
    else if letter = "P" or letter = "p" then
        dot()
        dash()
        dash()
        dot()
    else if letter = "Q" or letter = "q" then
        dash()
        dash()
        dot()
        dash()
    else if letter = "R" or letter = "r" then
        dot()
        dash()
        dot()
    else if letter = "S" or letter = "s" then
        dot()
        dot()
        dot()
    else if letter = "T" or letter = "t" then
        dash()
    else if letter = "U" or letter = "u" then
        dot()
        dot()
        dash()
    else if letter = "V" or letter = "v" then
        dot()
        dot()
        dot()
        dash()
    else if letter = "W" or letter = "w" then
        dot()
        dash()
        dash()
    else if letter = "X" or letter = "x" then
        dash()
        dot()
        dot()
        dash()
    else if letter = "Y" or letter = "y" then
        dash()
        dot()
        dash()
        dash()
    else if letter = "Z" or letter = "z" then
        dash()
        dash()
        dot()
        dot()
    else if letter = space then
        delay word_space - letter_space
    end if
    delay letter_space
end parseletter

on dash()
    tell application "PowerMateDriver"
        set brightness to onlevel
        delay dah
        set brightness to 0
        delay char_space
    end tell
end dash

on dot()
    tell application "PowerMateDriver"
        set brightness to onlevel
        delay dit
        set brightness to 0
        delay char_space
    end tell
end dot