print("Hello, ESP32-S3!")
from machine import Pin, ADC, PWM
from time import sleep
# Определяем контакты и параметры
CW_SPEED_PIN = 16 # Пин для потенциометра
CW_DIT_PIN = 13 # Пин для кнопки "точка"
CW_DASH_PIN = 14 # Пин для кнопки "тире"
CW_SOUND_PIN = 12 # Пин для звукового сигнала
CW_OUT_PIN = 15 # Пин для выходного сигнала
# Константы
MIN_SPEED = 1 # Минимальная скорость (WPM)
MAX_SPEED = 30 # Максимальная скорость (WPM)
# Инициализация пинов
dit_button = Pin(CW_DIT_PIN, Pin.IN, Pin.PULL_UP)
dash_button = Pin(CW_DASH_PIN, Pin.IN, Pin.PULL_UP)
cw_out = Pin(CW_OUT_PIN, Pin.OUT)
cw_sound_pwm = PWM(Pin(CW_SOUND_PIN)) # Используем PWM для звукового сигнала
cw_sound_pwm.duty_u16(0)
cw_sound_pwm.freq(1000) # Устанавливаем частоту звукового тона
# Инициализация ADC для потенциометра
adc = ADC(Pin(CW_SPEED_PIN))
# Переменные для работы
t_delay = 0
def read_speed():
"""Читает значение с потенциометра и рассчитывает скорость в WPM."""
global t_delay
# На ESP32 аналоговые значения находятся в диапазоне от 0 до 4095.
# Конвертируем их в диапазон MIN_SPEED..MAX_SPEED.
adc_value = adc.read() # Читаем значение с ADC
speed_wpm = int((adc_value / 4095) * (MAX_SPEED - MIN_SPEED) + MIN_SPEED)
# Рассчитываем длительность "точки" в миллисекундах
t_delay = int(1200 / speed_wpm)
def play_dit():
"""Воспроизводит 'точку'."""
cw_out.on()
cw_sound_pwm.duty_u16(32768) # Устанавливаем Duty Cycle 50% (32768 из 65535)
sleep(t_delay / 1000) # Продолжительность точки
cw_sound_pwm.duty_u16(0) # Выключаем звук
cw_out.off()
sleep(t_delay / 1000) # Пауза между сигналами
def play_dash():
"""Воспроизводит 'тире'."""
cw_out.on()
cw_sound_pwm.duty_u16(32768) # Устанавливаем Duty Cycle 50% (32768 из 65535)
sleep((t_delay * 3) / 1000) # Продолжительность тире (3 точки)
cw_sound_pwm.duty_u16(0) # Выключаем звук
cw_out.off()
sleep(t_delay / 1000) # Пауза между сигналами
# Основной цикл программы
while True:
read_speed() # Обновляем скорость
if not dit_button.value(): # Если нажата кнопка "точка"
play_dit()
if not dash_button.value(): # Если нажата кнопка "тире"
play_dash()