diff --git a/tutorial/4.led_pcf8591_dac.py b/tutorial/4.led_pcf8591_dac.py new file mode 100644 index 0000000..d33210c --- /dev/null +++ b/tutorial/4.led_pcf8591_dac.py @@ -0,0 +1,46 @@ +import smbus +import time + +# PCF8591의 I2C 주소 (일반적으로 0x48) +PCF8591_ADDRESS = 0x48 + +# I2C 버스 번호 (라즈베리 파이 2, 3, 4는 1, 초기 모델은 0일 수 있음) +I2C_BUS = 1 + +# smbus 객체 생성 +bus = smbus.SMBus(I2C_BUS) + +# PCF8591 DAC 제어 바이트 설정 +# DAC 출력을 활성화하려면 비트 6을 1로 설정해야 합니다. (0100 0000 = 0x40) +# AIN 입력 모드 (비트 3-2)도 함께 설정될 수 있지만, DAC 출력에 직접적인 영향은 없습니다. +# 여기서는 DAC 활성화만 중요합니다. +DAC_CONTROL_BYTE = 0x40 + +print(f"PCF8591 DAC LED 제어 테스트 시작 (주소: 0x{PCF8591_ADDRESS:X})") +print("LED 밝기가 서서히 변합니다. Ctrl+C로 종료.") + +try: + while True: + # 0부터 255까지 값을 증가시키며 LED 밝기 조절 + for value in range(256): + # write_byte_data(주소, 제어_바이트, 데이터_바이트) + # 제어_바이트: DAC 활성화를 위한 설정 (0x40) + # 데이터_바이트: DAC로 출력할 0-255 사이의 값 + bus.write_byte_data(PCF8591_ADDRESS, DAC_CONTROL_BYTE, value) + print(f"DAC 출력 값: {value}") + time.sleep(0.01) # 0.01초 대기 (밝기 변화 속도 조절) + + time.sleep(0.5) # 잠시 멈춤 + + # 255부터 0까지 값을 감소시키며 LED 밝기 조절 + for value in range(255, -1, -1): # 255부터 0까지 역순으로 + bus.write_byte_data(PCF8591_ADDRESS, DAC_CONTROL_BYTE, value) + print(f"DAC 출력 값: {value}") + time.sleep(0.01) # 0.01초 대기 + + time.sleep(0.5) # 잠시 멈춤 + +except KeyboardInterrupt: + # 프로그램 종료 시 LED 끄기 + bus.write_byte_data(PCF8591_ADDRESS, DAC_CONTROL_BYTE, 0) + print("\n프로그램 종료. LED를 끕니다.")