프롬프트
프롬프트 영역으로 마우스를 옮기고 Copy 버튼을 누르면 클립보드에 프롬프트의 내용이 복사됩니다.마이크로파이썬 프로그램을 만들고, 코드를 설명해 줘. from machine import… import time time.sleep_ms()를 사용함. 2개의 LED와 2개의 버튼을 사용함. 모듈 pinno에는 핀 번호 상수 값이 저장되어 있음. import pinno POTENTIOMETER_PIN = pinno.L2_IN BUTTON_1_PIN = pinno.L3_IN BUTTON_2_PIN = pinno.L4_IN LED_1_PIN = pinno.L5_IN LED_2_PIN = pinno.L6_IN POTENTIOMETER에 대해: 메소드 atten(): 3.3V까지 읽도록 지정 메소드 width(): 해상도 12비트 potentiometer_percent = (POTENTIOMETER 읽은 값 / 4095 * 100)의 정수 첫 번째 버튼은 PULL_UP해야 하고 두 번째 버튼은 PULL_DOWN해야 함. BUTTON_1_PRESSED_VALUE = 0 BUTTON_2_PRESSED_VALUE = 1 첫 번째 LED는 전류 소싱 방식으로 연결되어 있고, 두 번째 LED는 전류 싱킹 방식으로 연결되어 있음. led_1_on_percent = potentiometer_percent % led_1_off_percent = 0 % led_2_on_percent = (100 - potentiometer_percent) % led_2_off_percent = 100 % LED를 on할 때는 PWM을 led_x_on_percent에 따름. LED를 off할 때는 PWM을 led_x_off_percent에 따름. PWM에 대해: 메소드 duty()를 사용함. 메소드 freq(): 1000 led_on_off_state = False prev_potentiometer = 0 프로그램 시작하면: Print("버튼_1을 누르면 on(), 버튼_2를 누르면 off()") Print("불이 켜지면 너브를 돌려서 밝기를 조절하세요") 두 LED를 off 다음은 연속 실행이야: current_potentiometer와 prev_potentiometer의 차이가 2% 이상이면: prev_potentiometer = current_potentiometer led_on_off_state = True이면: 두 LED를 켬(PWM: led_x_on_percent) print("밝기 조절: {led_1_on_percent}%") current_버튼_상태 != prev_버튼_상태: 디바운스 20ms 버튼_1이 PRESSED이면: 두 LED를 on print("on(): {led_1_on_percent}%") 버튼_2가 PRESSED이면:: 두 LED를 off print("off()") 모든 while loop에 대해: prev_버튼_상태 = current_버튼_상태 1ms 중지
AI가 만든 코드
프로그램: 7_4_control_leds_with_potentiometer.py
from machine import Pin, ADC, PWM import time import pinno # 핀 번호 상수 설정 POTENTIOMETER_PIN = pinno.L2_IN BUTTON_1_PIN = pinno.L3_IN BUTTON_2_PIN = pinno.L4_IN LED_1_PIN = pinno.L5_IN LED_2_PIN = pinno.L6_IN # 상수 설정 BUTTON_1_PRESSED_VALUE = 0 BUTTON_2_PRESSED_VALUE = 1 PWM_FREQ = 1000 # 핀 객체 설정 potentiometer = ADC(Pin(POTENTIOMETER_PIN)) potentiometer.atten(ADC.ATTN_11DB) # 3.3V까지 읽을 수 있도록 설정 potentiometer.width(ADC.WIDTH_12BIT) # 12비트 해상도 설정 BUTTON_1 = Pin(BUTTON_1_PIN, Pin.IN, Pin.PULL_UP) BUTTON_2 = Pin(BUTTON_2_PIN, Pin.IN, Pin.PULL_DOWN) led_1 = PWM(Pin(LED_1_PIN)) led_2 = PWM(Pin(LED_2_PIN)) # 초기 설정 led_1.freq(PWM_FREQ) led_2.freq(PWM_FREQ) led_on_off_state = False prev_potentiometer = 0 prev_BUTTON_1_state = BUTTON_1.value() prev_BUTTON_2_state = BUTTON_2.value() # 초기 메시지 출력 print("버튼_1을 누르면 on(), 버튼_2를 누르면 off()") print("불이 켜지면 너브를 돌려서 밝기를 조절하셔요") # 두 LED를 끔 led_1.duty(0) led_2.duty(1023) while True: # 현재 포텐셔미터 값을 읽음 current_potentiometer = potentiometer.read() potentiometer_percent = int(current_potentiometer / 4095 * 100) # 포텐셔미터 값이 2% 이상 변했는지 확인 if abs(current_potentiometer - prev_potentiometer) > (4095 * 0.02): prev_potentiometer = current_potentiometer # LED가 켜져 있을 때 밝기 조절 if led_on_off_state: led_1_on_percent = potentiometer_percent led_2_on_percent = 100 - potentiometer_percent led_1.duty(int(led_1_on_percent / 100 * 1023)) led_2.duty(int(led_2_on_percent / 100 * 1023)) print(f"밝기 조절: {led_1_on_percent}%") # 버튼 상태 확인 current_BUTTON_1_state = BUTTON_1.value() current_BUTTON_2_state = BUTTON_2.value() # 버튼 상태가 변경되었는지 확인 (디바운스 적용) if current_BUTTON_1_state != prev_BUTTON_1_state or current_BUTTON_2_state != prev_BUTTON_2_state: time.sleep_ms(20) # 디바운스 시간 # 버튼_1이 눌렸을 때 if BUTTON_1.value() == BUTTON_1_PRESSED_VALUE: led_on_off_state = True led_1.duty(int(potentiometer_percent / 100 * 1023)) led_2.duty(int((100 - potentiometer_percent) / 100 * 1023)) print(f"on(): {potentiometer_percent}%") # 버튼_2가 눌렸을 때 if BUTTON_2.value() == BUTTON_2_PRESSED_VALUE: led_on_off_state = False led_1.duty(0) led_2.duty(1023) print("off()") # 이전 버튼 상태 업데이트 prev_BUTTON_1_state = current_BUTTON_1_state prev_BUTTON_2_state = current_BUTTON_2_state # 1ms 중지 time.sleep_ms(1)
AI가 만든 코드 설명
1. ADC와 PWM으로 핀 정의하기
퍼텐쇼미터는 ADC를 사용하고, LED는 PWM으로 제어됩니다.
2. 퍼텐쇼미터 입력 설정
atten( )은 3.3V까지 읽기 위해 설정되었고, width( )는 12비트 해상도로 값을 읽기 위해 설정되었습니다.
3. 버튼_1과 버튼_2 설정
버튼_1은 PULL_UP, 버튼_2는 PULL_DOWN으로 설정되어 버튼을 누른 상태를 감지합니다.
4. 초기 설정
프로그램은 초기 메시지를 출력하고, 두 LED를 끈 상태에서 시작합니다.
5. 반복 실행
while 루프에서는
- 퍼텐쇼미터의 값이 2% 이상 변동할 때만 LED의 밝기가 조절됩니다.
- 버튼이 눌리면, LED가 켜지거나 꺼지며, 그 상태에 따라 밝기를 조절하거나 LED를 끕니다.
- 버튼 상태 변화 시 20ms의 디바운스를 적용합니다.
6. LED 밝기 제어
PWM 제어는 duty( )를 통해 이루어지며, potentiometer_percent에 따라 LED 밝기를 조절합니다.
이 프로그램은 두 버튼과 퍼텐쇼미터를 활용해 LED의 상태와 밝기를 조절하는 시스템입니다.