from machine import Pin, ADC, PWM from utime import sleep, ticks_ms class MorseCode: MORSE = { "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": "--..", "1": ".----", "2": "..---", "3": "...--", "4": "....-", "5": ".....", "6": "-....", "7": "--...", "8": "---..", "9": "----.", "0": "-----", " ": " " } def __init__(self, buzzer_pin, potentiometer_pin) -> None: self.potentiometer_pin = ADC(Pin(potentiometer_pin, Pin.IN)) # Nastavení ADC pinu pro čtení hodnot potenciometru self.buzzer_pin = PWM(Pin(buzzer_pin, Pin.OUT)) # Nastavení PWM pinu pro ovládání bzučáku pass def read_pot(self) -> float: return self.potentiometer_pin.read_u16() / 65535 def play_morse_code(self, char) -> None: time_dot = 100 time_line = 300 self.lastpressedtime = 0 # Proměnná pro sledování posledního času spuštění # Prochází každý znak v morseovce daného vstupního znaku for x in self.MORSE[char]: self.lastpressedtime = ticks_ms() # Uloží aktuální čas if x == ".": # Pokud je to tečka self.buzzer_pin.duty_u16(2000) # Nastaví hlasitost bzučáku self.buzzer_pin.freq(int(self.read_pot() * 1000 + 440)) # Nastaví frekvenci podle hodnoty potenciometru while True: # Čeká na uplynutí doby trvání tečky if ticks_ms() - self.lastpressedtime >= time_dot: print(x) # Vypíše znak do konzole break if x == "-": # Pokud je to čárka self.buzzer_pin.duty_u16(2000) # Nastaví hlasitost bzučáku self.buzzer_pin.freq(int(self.read_pot() * 1000 + 440)) # Nastaví frekvenci podle hodnoty potenciometru while True: # Čeká na uplynutí doby trvání čárky if ticks_ms() - self.lastpressedtime >= time_line: print(x) # Vypíše znak do konzole break if x == " ": # Pokud je to mezera sleep(0.5) # Čeká půl sekundy self.buzzer_pin.duty_u16(0) # Vypne bzučák sleep(0.3) # Pauza mezi znaky # Hlavní program morse = MorseCode(18, 27) # Inicializace instance třídy MorseCode s piny bzučáku a potenciometru print("Text to morse code...") # Informace pro uživatele text = input("Text to translate: ") # Uživatelský vstup pro překlad do morseovky while True: try: for x in text: # Pro každý znak ve vstupním textu morse.play_morse_code(x.upper()) # Převeď na velká písmena a přehraj v morseovce break # Po dokončení překladu ukončí smyčku except KeyboardInterrupt: # Pokud uživatel přeruší program (např. stisknutím Ctrl+C) break # Ukončí smyčku print("Finished.") # Informace o ukončení programu