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()