A simple time-based morse code library in Python, written for Raspberry Pi applications.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.5 KiB

import time
def on():
print "on!"
def off():
print "off!"
morsetab = {
'A': '.-', 'a': '.-',
'B': '-...', 'b': '-...',
'C': '-.-.', 'c': '-.-.',
'D': '-..', 'd': '-..',
'E': '.', 'e': '.',
'F': '..-.', 'f': '..-.',
'G': '--.', 'g': '--.',
'H': '....', 'h': '....',
'I': '..', 'i': '..',
'J': '.---', 'j': '.---',
'K': '-.-', 'k': '-.-',
'L': '.-..', 'l': '.-..',
'M': '--', 'm': '--',
'N': '-.', 'n': '-.',
'O': '---', 'o': '---',
'P': '.--.', 'p': '.--.',
'Q': '--.-', 'q': '--.-',
'R': '.-.', 'r': '.-.',
'S': '...', 's': '...',
'T': '-', 't': '-',
'U': '..-', 'u': '..-',
'V': '...-', 'v': '...-',
'W': '.--', 'w': '.--',
'X': '-..-', 'x': '-..-',
'Y': '-.--', 'y': '-.--',
'Z': '--..', 'z': '--..',
'0': '-----', ',': '--..--',
'1': '.----', '.': '.-.-.-',
'2': '..---', '?': '..--..',
'3': '...--', ';': '-.-.-.',
'4': '....-', ':': '---...',
'5': '.....', "'": '.----.',
'6': '-....', '-': '-....-',
'7': '--...', '/': '-..-.',
'8': '---..', '(': '-.--.-',
'9': '----.', ')': '-.--.-',
' ': ' ', '_': '..--.-',
}
# one space = inter-letter space
# two spaces = inter-word space
class Morse(object):
def __init__(self, speed):
self.speed = speed # wpm
self.dotlen = 1.200/self.speed
self.dashlen = 3.0*self.dotlen
self.interwordlen = 7.0*self.dotlen
self.interletterlen = 2.0*self.dotlen
def dash(self):
on()
time.sleep(self.dashlen)
off()
time.sleep(self.dotlen)
def dot(self):
on()
time.sleep(self.dotlen)
off()
time.sleep(self.dotlen)
def send(self, sendstr):
"""
Send a string to the thing that turns it into morse code.
Then turn that thing into timed function calls to dot and dash.
"""
dd = self.create_dotdash(sendstr)
self.do_it(dd)
#q = self.create_queue(dd)
#q.send_queue(q)
def create_dotdash(self, sendstr):
"""
Convert a string containing a message
into an array of morse code letters:
"abc"
becomes
['.-',
'-...',
'-.-.']
In the output,
one space is an inter-letter sapce,
two spaces is an inter-word space
"""
dd = []
for letter in sendstr:
try:
dd.append(morsetab[letter])
except KeyError:
pass
return dd
def do_it(self,dd):
for ii,letter in enumerate(dd):
if letter==' ':
time.sleep(self.interwordlen)
else:
for d in letter:
if d=='.':
self.dot()
elif d=='-':
self.dash()
def main():
m = Morse(20)
m.send("huh huh uh huh huh huhh uhh")
if __name__=="__main__":
main()