from machine import Pin
import utime
ir_sensor = Pin(28, Pin.IN) # Chân kết nối với bộ thu IR
# Hàm xử lý tín hiệu IR
def get_ircode():
# Đợi khi có tín hiệu
while ir_sensor.value() == 1:
# Khi có tín hiệu thì chân kết nối sẽ được kéo xuống
pass
# Đo xung IR
start = utime.ticks_us() # Lấy thời gian bắt đầu
while ir_sensor.value() == 0:
# Trong lúc vẫn còn tín hiệu thì không làm gì
pass
stop = utime.ticks_us() # Lấy thời gian kết thúc
# Nếu tín hiệu không đủ dài thì nó là nhiễu, bỏ qua
if not (8000 < utime.ticks_diff(stop, start) < 10000):
return None
while ir_sensor.value() == 1:
pass
# Nếu là tín hiệu thì đọc nó
data = 0
# Sẽ có 32 bit tín hiệu
for i in range(32):
# Đo nhịp tín hiệu
while ir_sensor.value() == 0: pass
t_start = utime.ticks_us() # Lấy thời điểm khởi đầu nhịp
while ir_sensor.value() == 1: pass
t_stop = utime.ticks_us() # Lấy thời điểm kết thúc nhịp
duration = utime.ticks_diff(t_stop, t_start) # Tính thời gian
# Nếu tin hiệu dài ~560us thì nó là bit 0, ~1600us thì là bit 1
if duration > 1000:
data |= 1 << i
return hex(data)
print("Waiting for IR signal...")
while True:
code = get_ircode() # Lấy tín hiệu IR
# Tín hiệu sẽ được nhận dưới dạng mã HEX
if code:
print(f"Button Pressed! Hex Code: {code}")
utime.sleep(0.2) # Debounce/prevent repeat spam