• Skip to primary navigation
  • Skip to main content

IoTmaker

사물인터넷에 대한 모든 것 여기서 해결하셔요!

  • 홈
  • 책:마이크로파이썬을 활용한 사물인터넷
  • 책:따라 하면서 배우는 사물인터넷
  • 온라인 교육 코스
  • 새로운 소식
  • 의견보내기
  • 내 수강정보
  • 로그인
  • 회원가입

AI 프롬프트 6-1-test

 프롬프트 

두 개의 버튼 값을 읽어서 출력하는 마이크로파이썬 코드 만들기

  • PULLUP과 PULLDOWN 구분
프롬프트 텍스트
마이크로파이썬 프로그램을 다음 조건에 따라 만들고, 코드를 설명해줘
[조건]
두개의 버튼을 사용
import pinno
BUTTON_1_PIN = pinno.L5_IN
BUTTON_2_PIN = pinno.L6_IN
버튼1 은 PULLUP해야 하고 버튼2는 PULLDOWN해야 함
Print(“버튼1과 2를 눌러 보셔요”)
while True:
    만약 버튼1을 읽어서 값이 이전 값과 다르면
        Print(“버튼1의 값이 바뀜”,버튼1의 값)
    버튼2에 대해서도 위와 같은 방법으로 처리함
    5밀리초 동안 중지

 응답 

아래는 두 개의 버튼을 사용하는 프로그램으로, 주어진 조건에 따라 pinno 모듈을 사용하여 GPIO 핀을 설정하고, 버튼 상태를 확인하는 코드를 작성했습니다.

마이크로파이썬 코드
import machine
import time
import pinno

# BUTTON_1_PIN과 BUTTON_2_PIN 설정
BUTTON_1_PIN = pinno.L5_IN
BUTTON_2_PIN = pinno.L6_IN

# BUTTON_1은 PULLUP 설정, BUTTON_2는 PULLDOWN 설정
button1 = machine.Pin(BUTTON_1_PIN, machine.Pin.IN, machine.Pin.PULL_UP)
button2 = machine.Pin(BUTTON_2_PIN, machine.Pin.IN, machine.Pin.PULL_DOWN)

# 버튼의 이전 상태 저장 변수 초기화
prev_button1_state = button1.value()
prev_button2_state = button2.value()

# 사용자 안내 출력
print("버튼1과 2를 눌러 보셔요")

# 무한 루프
while True:
    # 버튼1 상태 확인
    button1_state = button1.value()
    if button1_state != prev_button1_state:
        print("버튼1의 값이 바뀜", button1_state)
        prev_button1_state = button1_state
    
    # 버튼2 상태 확인
    button2_state = button2.value()
    if button2_state != prev_button2_state:
        print("버튼2의 값이 바뀜", button2_state)
        prev_button2_state = button2_state
    
    # 5 밀리초 대기
    time.sleep(0.005)

코드 설명:

  1. 핀 설정:

    • BUTTON_1_PIN(핀 7)은 풀업 저항(PULLUP)을 사용하여 설정됩니다. 기본적으로 HIGH 상태를 유지하며, 버튼을 누르면 LOW 상태로 변합니다.
    • BUTTON_2_PIN(핀 8)은 풀다운 저항(PULLDOWN)을 사용하여 설정됩니다. 기본적으로 LOW 상태를 유지하며, 버튼을 누르면 HIGH 상태로 변합니다.
  2. 시작 메시지:

    • print("버튼1과 2를 눌러 보셔요")는 프로그램이 시작할 때 출력되어 사용자에게 버튼을 눌러볼 것을 안내합니다.
  3. 이전 상태 저장:

    • prev_button1_state와 prev_button2_state는 각각 버튼 1과 버튼 2의 이전 상태를 저장하는 변수입니다. 이를 통해 현재 버튼 상태와 비교하여 값이 변했는지 확인합니다.
  4. 상태 변화 감지:

    • button1.value()와 button2.value()는 각각의 버튼 상태를 읽습니다.
    • 현재 상태와 이전 상태를 비교해 값이 변했을 때 그 값을 출력하며, 상태가 바뀌면 이전 상태를 갱신합니다.
  5. 딜레이 추가:

    • time.sleep_ms(5)는 프로그램 실행을 5밀리초 동안 멈추게 하여 반복적으로 버튼 상태를 너무 자주 확인하지 않도록 하고, CPU 점유율을 줄입니다.

이 프로그램은 두 버튼의 상태를 지속적으로 모니터링하고, 상태가 바뀔 때마다 변경된 값을 출력합니다.

응답 텍스트(MD형식)
아래는 주어진 조건에 맞는 마이크로파이썬 프로그램입니다. 두 개의 버튼을 각각 풀업(PULLUP)과 풀다운(PULLDOWN)으로 설정하고, 버튼 값이 바뀔 때마다 콘솔에 출력하는 코드입니다.

```python
import machine
import time
import pinno

# 핀 설정
BUTTON_1_PIN = pinno.L5_IN  # 첫 번째 버튼 핀 (PULLUP)
BUTTON_2_PIN = pinno.L6_IN  # 두 번째 버튼 핀 (PULLDOWN)

# 버튼 핀을 설정: 첫 번째는 PULLUP, 두 번째는 PULLDOWN
button1 = machine.Pin(BUTTON_1_PIN, machine.Pin.IN, machine.Pin.PULL_UP)
button2 = machine.Pin(BUTTON_2_PIN, machine.Pin.IN, machine.Pin.PULL_DOWN)

# 버튼의 이전 상태 저장 변수
prev_button1_state = button1.value()
prev_button2_state = button2.value()

print("버튼1과 2를 눌러 보셔요")

# 메인 루프
while True:
    # 버튼1 상태 확인
    current_button1_state = button1.value()
    if current_button1_state != prev_button1_state:
        print("버튼1의 값이 바뀜", current_button1_state)
        prev_button1_state = current_button1_state

    # 버튼2 상태 확인
    current_button2_state = button2.value()
    if current_button2_state != prev_button2_state:
        print("버튼2의 값이 바뀜", current_button2_state)
        prev_button2_state = current_button2_state

    # 5밀리초 대기
    time.sleep(0.005)
```

### 코드 설명:
1. **핀이 설정된 부분:**
   - `BUTTON_1_PIN`과 `BUTTON_2_PIN`은 각각 `pinno.L5_IN`과 `pinno.L6_IN`으로 정의됩니다.
   - 첫 번째 버튼(`button1`)은 풀업 저항(`PULL_UP`)을 사용해 설정되었으며, 두 번째 버튼(`button2`)은 풀다운 저항(`PULL_DOWN`)을 사용해 설정되었습니다.

2. **버튼 상태 관리:**
   - `prev_button1_state`와 `prev_button2_state`는 각각 버튼의 이전 상태를 저장하는 변수입니다. 이 값은 버튼을 처음 읽을 때 초기화됩니다.
   
3. **무한 루프에서 버튼 상태 확인:**
   - 루프가 반복될 때마다 `button1.value()`와 `button2.value()`로 현재 버튼의 상태를 읽어옵니다.
   - 이전 상태와 다르면 상태가 바뀌었다고 인식하고, 상태 변화를 출력합니다.

4. **5밀리초 대기:**
   - `time.sleep(0.005)`로 루프가 매번 5밀리초 동안 멈춰 있어 버튼 입력을 안정적으로 처리할 수 있습니다.

Copyright © 2025 ·로그인