Skip to content

Instantly share code, notes, and snippets.

@kgantsov
Last active August 29, 2015 14:05
Show Gist options
  • Save kgantsov/6269126d012254387aa0 to your computer and use it in GitHub Desktop.
Save kgantsov/6269126d012254387aa0 to your computer and use it in GitHub Desktop.
Sends morse code messages by Raspberry Pi
#!/usr/bin/python
# coding: utf-8
import argparse
import RPi.GPIO as GPIO
import time
import sys
MORSE_CODE = {
u'A': '.-', u'a': '.-', u'А': '.-', u'а': '.-',
u'B': '-...', u'b': '-...', u'Б': '-...', u'б': '-...',
u'C': '-.-.', u'c': '-.-.', u'Ц': '-.-.', u'ц': '-.-.',
u'D': '-..', u'd': '-..', u'Д': '-..', u'д': '-..',
u'E': '.', u'e': '.', u'Е': '.', u'е': '.', u'Ё': '.', u'ё': '.',
u'F': '..-.', u'f': '..-.', u'Ф': '..-.', u'ф': '..-.',
u'G': '--.', u'g': '--.', u'Г': '--.', u'г': '--.',
u'H': '....', u'h': '....', u'Х': '....', u'х': '....',
u'I': '..', u'i': '..', u'И': '..', u'и': '..',
u'J': '.---', u'j': '.---', u'Й': '.---', u'й': '.---',
u'K': '-.-', u'k': '-.-', u'К': '-.-', u'к': '-.-',
u'L': '.-..', u'l': '.-..', u'Л': '.-..', u'л': '.-..',
u'M': '--', u'm': '--', u'М': '--', u'м': '--',
u'N': '-.', u'n': '-.', u'Н': '-.', u'н': '-.',
u'O': '---', u'o': '---', u'О': '---', u'о': '---',
u'P': '.--.', u'p': '.--.', u'П': '.--.', u'п': '.--.',
u'Q': '--.-', u'q': '--.-', u'Щ': '--.-', u'щ': '--.-',
u'R': '.-.', u'r': '.-.', u'Р': '.-.', u'р': '.-.',
u'S': '...', u's': '...', u'С': '...', u'с': '...',
u'T': '-', u't': '-', u'Т': '-', u'т': '-',
u'U': '..-', u'u': '..-', u'У': '..-', u'у': '..-',
u'V': '...-', u'v': '...-', u'Ж': '...-', u'ж': '...-',
u'W': '.--', u'w': '.--', u'В': '.--', u'в': '.--',
u'X': '-..-', u'x': '-..-', u'Ь': '-..-', u'ь': '-..-',
u'Y': '-.--', u'y': '-.--', u'Ы': '-.--', u'ы': '-.--',
u'Z': '--..', u'z': '--..', u'З': '--..', u'з': '--..',
u'Ч': '---.', u'ч': '---.', u'Ш': '----', u'ш': '----',
u'Ъ': '--.--', u'ъ': '--.--', u'Э': '..-..', u'э': '..-..',
u'Ю': '..--', u'ю': '..--', u'Я': '.-.-', u'я': '.-.-',
u'0': '-----', u',': '--..--',
u'1': '.----', u'.': '.-.-.-',
u'2': '..---', u'?': '..--..',
u'3': '...--', u';': '-.-.-.',
u'4': '....-', u':': '---...',
u'5': '.....', "'": '.----.',
u'6': '-....', u'-': '-....-',
u'7': '--...', u'/': '-..-.',
u'8': '---..', u'(': '-.--.-',
u'9': '----.', u')': '-.--.-',
u' ': u' ', u'_': '..--.-'
}
UNIT_DELAY = 0.07
SYMBOL_TIMING = {u'.': 1 * UNIT_DELAY, u'-': 3 * UNIT_DELAY}
BUZZER = 8
GREEN_LED = 4
def send_tone(tone):
if tone == ' ':
time.sleep(6 * UNIT_DELAY)
return
GPIO.output(BUZZER, True)
GPIO.output(GREEN_LED, True)
time.sleep(SYMBOL_TIMING[tone])
GPIO.output(BUZZER, False)
GPIO.output(GREEN_LED, False)
print ' %s ' % tone,
sys.stdout.flush()
time.sleep(UNIT_DELAY)
def send_letter(letter):
if letter != ' ':
print '%s = ' % letter,
sys.stdout.flush()
for tone in MORSE_CODE[letter]:
send_tone(tone)
print ''
sys.stdout.flush()
def send_message(message):
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUZZER, GPIO.OUT)
GPIO.setup(GREEN_LED, GPIO.OUT)
for letter in message:
send_letter(letter)
time.sleep(2 * UNIT_DELAY)
GPIO.cleanup()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Sends morse code messages')
parser.add_argument(
"-m", "--message", required=True, help="Message"
)
args = parser.parse_args()
send_message(args.message.decode('utf-8'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment