from machine import Pin, PWM, I2C
import time
import struct
import servo
from ir_rx import NEC_16
from ssd1306 import SSD1306_I2C
global ir_data
global ir_addr

pwm = servo.Servo(9)

pir_sensor = Pin(2, Pin.IN) 

buzzer = PWM(Pin(10, Pin.OUT) )
relay = Pin(6, Pin.OUT) 
relay.off() 

def buzz():
    buzzer.freq(1000)
    buzzer.duty_u16(32768)
    time.sleep(0.1)
    buzzer.duty_u16(0)

i2c = I2C(1, scl=Pin(27), sda=Pin(26)) 
mpu_addr = 0x68  

i2c2 = I2C(0, sda=Pin(16), scl=Pin(21), freq=400000)
oled = SSD1306_I2C(128, 64, i2c2)
oled.text("Hello Anirudh", 0, 0)
oled.show()

def ir_callback(data, addr, ctrl):
    global ir_data
    global ir_addr
    if data > 0:
        ir_data = data
        ir_addr = addr
        print('Data {:02x} Addr {:04x}'.format(data, addr))

ir = NEC_16(Pin(11, Pin.IN), ir_callback)
ir_data = 0
ir_addr = 0






def read_mpu():
    data = i2c.readfrom_mem(mpu_addr, 0x3B, 14)
    ax, ay, az = struct.unpack('>hhh', data[0:6])
    return ax, ay, az
data = None
try:
    while True:
        if pir_sensor.value(): 
            buzz()
            relay.on()
            pwm.move(90)
        else:
            relay.off() 
            pwm.move(0)
       
        if ir_data > 0:
            print(ir_data)
            data = ir_data
            ir_data = 0

        
        ax, ay, az = read_mpu()
        oled.fill(0)
        print(ax,ay,az)
        if data:
            oled.text(f"IR DATA: {data}",0,0)
        oled.text(f"x: {str(ax)}",0, 10)
        oled.text(f"y: {str(ay)}",0, 20)
        oled.text(f"z: {str(az)}",0, 30)
        oled.show()
        time.sleep(1)  

except KeyboardInterrupt:
    relay.off()  
NOCOMNCVCCGNDINLED1PWRRelay Module