더보기
코드 정리 필요....
# Final Boss
import time
from machine import I2C, Pin, freq, PWM
from ir_rx.print_error import print_error
from ir_rx.nec import NEC_8
from pico_i2c_lcd import I2cLcd
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
pin_ir = Pin(17, Pin.IN)
buzzerPIN=PWM(Pin(11))
melody = [262, 330, 415, 440, 494, 523, 587, 622, 659]
I2C_ADDR = i2c.scan()[0]
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
def buzzer(buzzerPinObject,frequency,sound_duration):
buzzerPinObject.duty_u16(int(65536*0.2))
buzzerPinObject.freq(frequency)
time.sleep(sound_duration)
buzzerPinObject.duty_u16(int(65536*0))
def decodeKeyValue(data):
if data == 0x16:
return "0"
if data == 0x0C:
return "1"
if data == 0x18:
return "2"
if data == 0x5E:
return "3"
if data == 0x08:
return "4"
if data == 0x1C:
return "5"
if data == 0x5A:
return "6"
if data == 0x42:
return "7"
if data == 0x52:
return "8"
if data == 0x4A:
return "9"
if data == 0x09:
return "EQ"
if data == 0x15:
return "+"
if data == 0x7:
return "-"
if data == 0x0D:
return "U/SD"
if data == 0x19:
return "CYCLE"
if data == 0x44:
return "BACKWARD"
if data == 0x43:
return "PLAY/PAUSE"
if data == 0x40:
return "FORWARD"
if data == 0x45:
return "CH-"
if data == 0x47:
return "CH+"
if data == 0x46:
return "POWER"
return "ERROR"
# User callback
def callback(data, addr, ctrl):
if data < 0: # NEC protocol sends repeat codes.
pass
else:
if data == 0x0C: # 1번이 눌렸을 때
buzzer(buzzerPIN,melody[0],0.1)
lcd.clear() # lcd 초기화
lcd.putstr("Do")
elif data == 0x18: # 2번이 눌렸을 때
buzzer(buzzerPIN,melody[1],0.1)
lcd.clear() # lcd 초기화
lcd.putstr("Mi")
elif data == 0x5E: # 3번이 눌렸을 때
buzzer(buzzerPIN,melody[2],0.1)
lcd.clear() # lcd 초기화
lcd.putstr("Sol#")
elif data == 0x08: # 4번이 눌렸을 때
buzzer(buzzerPIN,melody[3],0.1)
lcd.clear() # lcd 초기화
lcd.putstr("La")
elif data == 0x1C: # 5번이 눌렸을 때
buzzer(buzzerPIN,melody[4],0.1)
lcd.clear() # lcd 초기화
lcd.putstr("Si")
elif data == 0x5A: # 6번이 눌렸을 때
buzzer(buzzerPIN,melody[5],0.1)
lcd.clear() # lcd 초기화
lcd.putstr("High Do")
elif data == 0x42: # 7번이 눌렸을 때
buzzer(buzzerPIN,melody[6],0.1)
lcd.clear() # lcd 초기화
lcd.putstr("High Re")
elif data == 0x52: # 8번이 눌렸을 때
buzzer(buzzerPIN,melody[7],0.1)
lcd.clear() # lcd 초기화
lcd.putstr("High Re#")
elif data == 0x4A: # 9번이 눌렸을 때
buzzer(buzzerPIN,melody[8],0.1)
lcd.clear() # lcd 초기화
lcd.putstr("High Mi")
time.sleep(0.1) # 0.1초 대기
print(decodeKeyValue(data))
lcd.blink_cursor_on()
ir = NEC_8(pin_ir, callback) # Instantiate receiver
ir.error_function(print_error) # Show debug information
try:
while True:
pass
except KeyboardInterrupt:
ir.close()
'디지털 도구 > 라즈베리파이' 카테고리의 다른 글
| [Raspberry Pi Pico] 쉘 출력 (0) | 2023.05.16 |
|---|---|
| [Raspberry Pi Pico] 도트 매트릭스 (0) | 2023.05.16 |
| [Raspberry Pi Pico] IR 리모컨 (0) | 2023.05.16 |
| [Raspberry Pi Pico] Quest 13 (0) | 2023.05.15 |
| [Raspberry Pi Pico] LCD (0) | 2023.05.15 |