from machine import Pin,SoftI2C,PWM
from machine import I2C
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
from ir_rx import NEC_16
from time import sleep
I2C_ADDR=0X27
rows = 2
columns = 16
sdaPin=Pin(21)
sclPin=Pin(22)
i2c=I2C(0,sda=sdaPin, scl=sclPin,freq=1000)
lcd = I2cLcd(i2c,I2C_ADDR,rows,columns)
led = Pin(25,Pin.OUT)
r = Pin(14,Pin.OUT)
g = Pin(27,Pin.OUT)
b = Pin(26,Pin.OUT)
buzzer = PWM(Pin(4))
buzzer.freq(1000)
relay = Pin(12,Pin.OUT)
servo = PWM(Pin(2))
servo.freq(500)
ir_data = 0
led_st=0
rgb_st1=0
rgb_st2=0
rgb_st3=0
buzz = 0
r_st=0
serv_st=0
def callback(data,addr):
global ir_data
if data > 0:
ir_data = data
lcd.move_to(3,0)
lcd.putstr("Data {:02x} ".format(data))
print('Data {:02x} '.format(data))
ir = NEC_16(Pin(13, Pin.IN),callback)
while True:
def all_off():
r.off()
g.off()
b.off()
def set_angle(angle):
max_duty = 1023
min_duty = 0
duty = int((angle / 180) * (max_duty - min_duty) + min_duty)
servo.duty(duty)
#LED
if ir_data == 0xa2:
led_st = not led_st
led.value(led_st)
lcd.move_to(1,1)
lcd.putstr("LED ON" if led_st else "LED OFF")
print("LED ON" if led_st else "LED OFF")
ir_data = 0
lcd.clear()
#RGB
if ir_data == 0x68: # button 0 RED
all_off()
rgb_st1 = not rgb_st1
r.value(rgb_st1)
lcd.move_to(1,1)
lcd.putstr("RED ON" if rgb_st1 else "RED OFF")
print("RED ON" if rgb_st1 else "RED OFF")
#rgb_st1=0
ir_data = 0
lcd.clear()
#rgb_st1=0
if ir_data == 0x30: # button 1 GREEN
all_off()
rgb_st2 = not rgb_st2
g.value(rgb_st2)
lcd.move_to(1,1)
lcd.putstr("GREEN ON" if rgb_st2 else "GREEN OFF")
print("GREEN ON" if rgb_st2 else "GREEN OFF")
ir_data = 0
lcd.clear()
if ir_data == 0x18: # button 2 BLUE
all_off()
rgb_st3 = not rgb_st3
b.value(rgb_st3)
lcd.move_to(1,1)
lcd.putstr("BLUE ON" if rgb_st3 else "BLUE OFF")
print("BLUE ON" if rgb_st3 else "BLUE OFF")
ir_data = 0
lcd.clear()
if ir_data == 0x7a: #button 3 BUZZER
buzz = not buzz
buzzer.duty(buzz)
lcd.move_to(2,1)
lcd.putstr("BUZZER ON" if buzz else "BUZZER OFF")
print("BUZZER ON" if buzz else "BUZZER OFF")
ir_data=0;
lcd.clear()
if ir_data == 0x10: #button 4 RELAY
r_st = not r_st
relay.value(r_st)
lcd.move_to(2,1)
lcd.putstr("RELAY ON" if r_st else "RELAY OFF")
print("RELAY ON" if r_st else "RELAY OFF")
ir_data=0
lcd.clear()
if ir_data == 0x38: #button 5 SERVO
serv_st = not serv_st
if serv_st:
for angle in range(0,181,10):
set_angle(angle)
lcd.move_to(2,1)
lcd.putstr("%d deg" %angle)
print("%d deg" %angle)
sleep(0.5)
for angle in range(180, -1, -10):
set_angle(angle)
lcd.move_to(2,1)
lcd.putstr("%d deg" %angle)
print("%d deg" %angle)
sleep(0.5)
else:
set_angle(0)
lcd.move_to(2,1)
lcd.putstr("SERVO OFF")
print("SERVO OFF")
ir_data=0
lcd.clear()