디지털 도구/라즈베리파이

[Raspberry Pi Pico] Final Boss 문제

dd_blog 2023. 5. 16. 10:17
더보기

코드 정리 필요....

# 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