from machine import Pin import time import json RECV_PIN = 20 def capture_raw(pin_num=RECV_PIN, timeout_ms=5000, idle_us=8000): """ Захватывает тайминги ИК-сигнала. timeout_ms - сколько ждать начала сигнала idle_us - через сколько мкс тишины считать сигнал законченным """ pin = Pin(pin_num, Pin.IN, Pin.PULL_UP) timings = [] print("Ожидание сигнала... наведите пульт и нажмите кнопку") # Ждём начала сигнала (первый переход в 0, т.к. сигнал инвертирован) start_wait = time.ticks_ms() while pin.value() == 1: if time.ticks_diff(time.ticks_ms(), start_wait) > timeout_ms: print("Таймаут, сигнал не обнаружен") return [] last_state = pin.value() last_time = time.ticks_us() while True: state = pin.value() now = time.ticks_us() if state != last_state: duration = time.ticks_diff(now, last_time) timings.append(duration) last_time = now last_state = state # если долго нет изменений и мы в состоянии "покоя" (1) - сигнал закончился if state == 1 and time.ticks_diff(now, last_time) > idle_us: break print(f"Захвачено {len(timings)} импульсов") return timings def save_code(name, timings, filename="codes.json"): try: with open(filename, "r") as f: codes = json.load(f) except OSError: codes = {} codes[name] = timings with open(filename, "w") as f: json.dump(codes, f) print(f"Сохранено: '{name}' ({len(timings)} импульсов)") def list_codes(filename="codes.json"): try: with open(filename, "r") as f: codes = json.load(f) for name, timings in codes.items(): print(f"{name}: {len(timings)} импульсов") except OSError: print("Файл кодов пока пуст")