다운로드 교육자료 문제해결 레퍼런스 구입방법

교육 자료 : 파이썬 : 표준 파이썬 : 이벤트 처리

상황에 따라 동작하기
햄스터 로봇의 앞을 손으로 막을 때마다 일정 시간 뒤로 이동하게 해봅시다.

from roboid import *

hamster = Hamster()

while True:
    if hamster.left_proximity() > 30 or hamster.right_proximity() > 30:
        hamster.wheels(-30) # 뒤로 이동한다.
        wait(1000) # 1초
        hamster.stop() # 정지한다.
    wait(20) # 너무 빨리 반복하지 않도록 한다.

이번에는 햄스터 로봇의 바닥 센서가 검은색 선을 만날 때마다 삐 소리를 내도록 해봅시다.

from roboid import *

hamster = Hamster()

while True:
    if hamster.left_floor() < 20 or hamster.right_floor() < 20:
        hamster.beep()
    wait(20) # 너무 빨리 반복하지 않도록 한다.

각 조건에 해당하는 상황이 발생하는 것을 이벤트라고 합니다. 이번에는 이벤트 방식으로 코드를 작성해 봅시다.
우선 각각의 상황을 판단하는 함수와 각 상황에 대한 동작을 수행하는 함수를 만듭니다. 이 때, 상황을 판단하는 함수는 True 또는 False를 반환해야 합니다.

from roboid import *

hamster = Hamster()

def when_hand_found():
    return hamster.left_proximity() > 30 or hamster.right_proximity() > 30

def do_move_backward():
    hamster.wheels(-30)
    wait(1000)
    hamster.stop()

def when_on_black_line():
    return hamster.left_floor() < 20 or hamster.right_floor() < 20

def do_sound():
    hamster.beep()

이제 이 함수들을 when_do 함수에 넣어 주면 됩니다. when_do 함수를 호출하는 순서는 중요하지 않습니다.

from roboid import *

hamster = Hamster()

def when_hand_found():
    return hamster.left_proximity() > 30 or hamster.right_proximity() > 30

def do_move_backward():
    hamster.wheels(-30)
    wait(1000)
    hamster.stop()

def when_on_black_line():
    return hamster.left_floor() < 20 or hamster.right_floor() < 20

def do_sound():
    hamster.beep()

when_do(when_hand_found, do_move_backward)
when_do(when_on_black_line, do_sound)

# Ctrl+C 키를 누를 때까지 계속 기다립니다.
wait(-1)
두 대의 햄스터가 상황에 따라 동작하기
두 대의 햄스터가 쌍둥이처럼 같은 상황에서 같은 동작을 하게 하려면 어떻게 해야 할까요?

from roboid import *

hamster1 = Hamster()
hamster2 = Hamster()

def when_hand_found1():
    return hamster1.left_proximity() > 30 or hamster1.right_proximity() > 30

def do_move_backward1():
    hamster1.wheels(-30)
    wait(1000)
    hamster1.stop()

def when_on_black_line1():
    return hamster1.left_floor() < 20 or hamster1.right_floor() < 20

def do_sound1():
    hamster1.beep()

def when_hand_found2():
    return hamster2.left_proximity() > 30 or hamster2.right_proximity() > 30

def do_move_backward2():
    hamster2.wheels(-30)
    wait(1000)
    hamster2.stop()

def when_on_black_line2():
    return hamster2.left_floor() < 20 or hamster2.right_floor() < 20

def do_sound2():
    hamster2.beep()

when_do(when_hand_found1, do_move_backward1)
when_do(when_on_black_line1, do_sound1)
when_do(when_hand_found2, do_move_backward2)
when_do(when_on_black_line2, do_sound2)

# Ctrl+C 키를 누를 때까지 계속 기다립니다.
wait(-1)

동작은 하겠지만 코드가 비효율적입니다. 햄스터가 10대면 어떻게 될지 생각해 봅시다.
when_do 함수는 when에 해당하는 함수와 do에 해당하는 함수에게 인자를 전달해 줄 수 있습니다. 인자는 자료형이 무엇이든 그대로 전달해 줍니다. 또한 인자는 when에 해당하는 함수와 do에 해당하는 함수에 똑같이 전달됩니다. 인자는 하나 밖에 전달할 수 없기 때문에 여러 개를 전달하려면 튜플이나 딕셔너리로 만들어 전달하면 됩니다.
주의할 점은, 인자를 전달하는 경우에는 when에 해당하는 함수와 do에 해당하는 함수를 반드시 인자를 받도록 정의해야 합니다.

from roboid import *

hamster1 = Hamster()
hamster2 = Hamster()

def when_hand_found(robot):
    return robot.left_proximity() > 30 or robot.right_proximity() > 30

def do_move_backward(robot):
    robot.wheels(-30)
    wait(1000)
    robot.stop()

def when_on_black_line(robot):
    return robot.left_floor() < 20 or robot.right_floor() < 20

def do_sound(robot):
    robot.beep()

when_do(when_hand_found, do_move_backward, hamster1)
when_do(when_on_black_line, do_sound, hamster1)
when_do(when_hand_found, do_move_backward, hamster2)
when_do(when_on_black_line, do_sound, hamster2)

# Ctrl+C 키를 누를 때까지 계속 기다립니다.
wait(-1)
목차
수업 준비
  1. 하드웨어 살펴보기
  2. 햄스터 · 햄스터S · USB 동글 PDF · PPT
  3. 디바이스 드라이버 설치
  4. 윈도우 · 맥OS · 리눅스 PDF · PPT
  5. 파이썬 설치
  6. 윈도우 · 맥OS · 리눅스 PDF · PPT
  7. 라이브러리 설치
  8. PDF · PPT
  9. 로봇과 컴퓨터 연결
  10. PDF · PPT
  11. 예제 파일 실행
  12. 윈도우 · 맥OS · 리눅스 PDF · PPT
기초
  1. IDLE에서 새 파일 만들기
  2. 클라우드 컴퓨터 환경에서 작업하기 (선택 사항)
  3. 말판 이동하기 #1 (순차, 횟수 반복)
  4. 이동하고 회전하기
  5. LED 켜고 소리 내기
  6. 순서대로, 반복하여 명령하기
  7. 키보드 이벤트
  8. 근접 센서 사용하기
  9. 말판 이동하기 #2 (~인 동안 반복)
  10. 바닥 센서 사용하기
  11. 밝기 센서와 가속도 센서 사용하기
  12. 브레이튼버그의 로봇
심화
  1. 보드 게임 만들기
  2. 그래픽 인터페이스
  3. 센서 한 개를 사용한 라인 트레이서
  4. 센서 두 개를 사용한 라인 트레이서
  5. 햄스터 친구 따라가기 (2인 1조)
  6. 라인 트레이서 교차로 주행하기
  7. 벽 따라가기
  8. 컵 따라 돌기 (미로 찾기용 커버 사용)
  9. 슬라럼 (미로 찾기용 커버 사용)
  10. 미로 탈출 (미로 찾기용 커버 사용)
  11. 로봇 청소기 흉내 내기
  12. 병렬 처리 (버전 1.4.0부터)
  13. 이벤트 처리 (버전 1.4.0부터)
확장 키트
  1. 조립하기
  2. 핀/소켓 배치 살펴보기
  3. 디지털 입력 - 버튼을 누르면 삐 소리가 나요
  4. 디지털 출력 - 어두우면 LED 불이 켜져요
  5. 디지털 출력 - 반짝반짝 LED를 깜박여요
  6. 디지털 출력 - 기울이는 방향으로 LED가 켜져요
  7. 아날로그 입력 - 포텐셔미터를 돌리면 음 높이가 달라져요
  8. 아날로그 입력 - 뜨겁지 않게 해주세요
  9. 아날로그 입력 - 빛을 따라 움직여요
  10. PWM 출력 - LED 불이 부드럽게 밝아졌다 어두워져요
  11. PWM 출력 - LED 촛불이 바람에 흔들려요
  12. 아날로그 서보 출력 - 햄스터 로봇에게 꼬리가 생겼어요
고급
  1. 행위 기반의 로봇 제어
  2. 경로 탐색
  3. 자리 바꾸기
Copyright 로봇SW교육원 All rights reserved.
어려운 일이 있으면 광운대학교 로봇학부 박광현 교수(akaii@kw.ac.kr)에게 연락하세요.