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를 끕니다.")