TrashNotes

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()
← Previous Next →
Back to list