2025-02-12 20:46:30
# morse_lib.py
import time
import digitalio
class MorseTransmitter:
"""
Класс для передачи сообщений азбукой Морзе.
"""
# Словарь кодов Морзе
MORSE_CODE = {
'A': '.-',
'B': '-...',
'C': '-.-.',
'D': '-..',
'E': '.',
'F': '..-.',
'G': '--.',
'H': '....',
'I': '..',
'J': '.---',
'K': '-.-',
'L': '.-..',
'M': '--',
'N': '-.',
'O': '---',
'P': '.--.',
'Q': '--.-',
'R': '.-.',
'S': '...',
'T': '-',
'U': '..-',
'V': '...-',
'W': '.--',
'X': '-..-',
'Y': '-.--',
'Z': '--..',
'0': '-----',
'1': '.----',
'2': '..---',
'3': '...--',
'4': '....-',
'5': '.....',
'6': '-....',
'7': '--...',
'8': '---..',
'9': '----.',
'.': '.-.-.-',
',': '--..--',
'?': '..--..',
"'": '.----.',
'!': '-.-.--',
'/': '-..-.',
'(': '-.--.',
')': '-.--.-',
'&': '.-...',
':': '---...',
';': '-.-.-.',
'=': '-...-',
'+': '.-.-.',
'-': '-....-',
'_': '..--.-',
'"': '.-..-.',
'$': '...-..-',
'@': '.--.-.',
' ': ' ' # Пробел для разделения слов
}
def __init__(self, pin, wpm=12):
"""
Инициализация передатчика Морзе.
:param pin: Пин для подключения бипера или светодиода
:param wpm: Скорость передачи в словах в минуту (по умолчанию 12)
"""
self.beeper = digitalio.DigitalInOut(pin)
self.beeper.direction = digitalio.Direction.OUTPUT
self.set_speed(wpm)
def set_speed(self, wpm):
"""
Установка скорости передачи.
:param wpm: Скорость в словах в минуту
"""
self.dot_duration = 1.2 / wpm
self.dash_duration = self.dot_duration * 3
def beep(self, duration):
"""
Генерация звукового или светового сигнала.
:param duration: Длительность сигнала
"""
self.beeper.value = True
time.sleep(duration)
self.beeper.value = False
time.sleep(self.dot_duration) # Пауза между сигналами
def transmit(self, message):
"""
Передача сообщения азбукой Морзе.
:param message: Сообщение для передачи
"""
for char in message.upper():
if char == ' ':
time.sleep(self.dot_duration * 7) # Пауза между словами
else:
morse_code = self.MORSE_CODE.get(char, '')
for symbol in morse_code:
if symbol == '.':
self.beep(self.dot_duration)
elif symbol == '-':
self.beep(self.dash_duration)
time.sleep(self.dot_duration * 3) # Пауза между буквами
def transmit_word(self, word):
"""
Передача одного слова азбукой Морзе.
:param word: Слово для передачи
"""
self.transmit(word)
time.sleep(self.dot_duration * 7) # Дополнительная пауза после слова
def transmit_sos(self):
"""
Передача сигнала SOS.
"""
self.transmit("SOS")
# Пример использования:
# import board
# morse = MorseTransmitter(board.GP3, wpm=15)
# morse.transmit("HELLO WORLD")
# morse.transmit_word("SOS")
# morse.transmit_sos()
Back to list