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 0000000..06d7405 Binary files /dev/null and b/main.py differ 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)