1
This commit is contained in:
+67
@@ -0,0 +1,67 @@
|
||||
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("Файл кодов пока пуст")
|
||||
Reference in New Issue
Block a user