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

[file-name 000009_2025-02-12_20-46-30.txt]