From daad6db3691cdeb14429ca99764b34cce962eb79 Mon Sep 17 00:00:00 2001 From: Vombit <1+vombit@noreply.localhost> Date: Mon, 17 Aug 2026 09:21:01 +0000 Subject: [PATCH] Upload files to "/" --- .micropico | 3 ++ blink_test.py | 9 ++++++ main.py | Bin 0 -> 1024 bytes transmit.py | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+) create mode 100644 .micropico create mode 100644 blink_test.py create mode 100644 main.py create mode 100644 transmit.py diff --git a/.micropico b/.micropico new file mode 100644 index 0000000..3de3977 --- /dev/null +++ b/.micropico @@ -0,0 +1,3 @@ +{ + "info": "This file is just used to identify a project folder." +} \ No newline at end of file diff --git a/blink_test.py b/blink_test.py new file mode 100644 index 0000000..c3cbf55 --- /dev/null +++ b/blink_test.py @@ -0,0 +1,9 @@ +from machine import Pin +import time +pin = Pin(19, Pin.OUT) +for i in range(10): + pin.value(1) + time.sleep(0.5) + pin.value(0) + time.sleep(0.5) + print(i) diff --git a/main.py b/main.py new file mode 100644 index 0000000000000000000000000000000000000000..06d7405020018ddf3cacee90fd4af10487da3d20 GIT binary patch literal 1024 ScmZQz7zLvtFd70QH3R?z00031 literal 0 HcmV?d00001 diff --git a/transmit.py b/transmit.py new file mode 100644 index 0000000..c1617a2 --- /dev/null +++ b/transmit.py @@ -0,0 +1,75 @@ +from machine import Pin, PWM +import time +import json + +TRANSMIT_PIN = 19 +CARRIER_FREQ = 38000 # Гц, стандартная несущая для большинства ИК-пультов +DUTY = 33 # % заполнения (обычно 30-50% для ИК-светодиода) + + +def _send_timings(pwm, pin, timings): + """ + Воспроизводит список таймингов (в мкс). + Чётные индексы (0, 2, 4...) - импульсы (несущая включена), + нечётные индексы (1, 3, 5...) - паузы (несущая выключена). + """ + for i, duration in enumerate(timings): + if i % 2 == 0: + # импульс: включаем несущую 38кГц + pwm.duty_u16(int(65535 * DUTY / 100)) + else: + # пауза: несущая выключена + pwm.duty_u16(0) + time.sleep_us(duration) + + # на всякий случай гарантированно выключаем несущую в конце + pwm.duty_u16(0) + + +def transmit_raw(timings, pin_num=TRANSMIT_PIN, freq=CARRIER_FREQ): + """ + Передаёт сырые тайминги ИК-сигнала через ИК-светодиод на pin_num. + """ + pin = Pin(pin_num, Pin.OUT) + pwm = PWM(pin) + pwm.freq(freq) + pwm.duty_u16(0) + + try: + _send_timings(pwm, pin, timings) + finally: + pwm.duty_u16(0) + pwm.deinit() + + +def send_code(name, filename="codes.json", pin_num=TRANSMIT_PIN, freq=CARRIER_FREQ): + """ + Загружает сохранённый код по имени из codes.json и передаёт его. + """ + try: + with open(filename, "r") as f: + codes = json.load(f) + except OSError: + print("Файл кодов не найден") + return + + if name not in codes: + print(f"Код '{name}' не найден. Доступные коды: {list(codes.keys())}") + return + + timings = codes[name] + print(f"Передача '{name}' ({len(timings)} импульсов)...") + transmit_raw(timings, pin_num, freq) + print("Готово") + + +def send_code_repeat(name, times=1, delay_ms=50, filename="codes.json", + pin_num=TRANSMIT_PIN, freq=CARRIER_FREQ): + """ + Передаёт код несколько раз подряд с задержкой между повторами. + Полезно, если пульт нормально распознаётся только с нескольких попыток. + """ + for i in range(times): + send_code(name, filename, pin_num, freq) + if i < times - 1: + time.sleep_ms(delay_ms)