Skip to content

활동

터치 스톱 워치

중급 | MakeCode, Python | LED, 버튼, 터치 로고 | 변수, 불 논리, 산술 연산자, 입력/출력, 측정

1단계: 만들어 보세요.

프로젝트 소개

신형 micro:bit 의 터치 로고 센서를 버튼처럼 사용해서 스톱 워치를 만들어 보세요.

소개

프로그래밍 가이드

학습 내용

  • 신형 micro:bit 의 터치 로고 센서를 추가적인 버튼으로 사용하는 방법
  • 변수와 산술 연산자들을 이용해서 시간을 측정하는 방법
  • 산술 연산자를 사용해서 (밀리초 단위에서 초 단위로) 단위를 바꾸는 방법
  • 참/거짓 논리 불 변수를 사용해서 프로그램의 실행을 제어하는 방법

사용방법

  • 스피커가 내장되어있는 신형 micro:bit 에 프로그램을 업로드합니다.
  • A 버튼을 누르면 스톱 워치 시간 측정을 시작합니다. 시간이 측정되는 동안에는 두근 거리는 심장 아이콘이 LED 화면으로 나타납니다.
  • B 버튼을 누르면 시간 측정을 끝냅니다. 이렇게 A 버튼과 B 버튼을 원하는 만큼 사용해서, 실제 스톱 워치 처럼 시간 기록을 추가할 수 있습니다.
  • micro:bit 앞 면에 있는 금색 터치 로고를 누르면, 스톱 워치를 사용해서 누적한 시간을 초 단위로 보여줍니다.
  • 그 시간을 0으로 초기화하려면, micro:bit 뒷 면에 있는 리셋 버튼을 누르면 됩니다.

설명

  • micro:bit 는 전기가 공급되어 켜진이후부터 시작해서 흐른 시간을 밀리초 단위로 알 수 있습니다. 이 시간을 실행 시간(running time) 이라고 부릅니다.
  • A 버튼을 누르면, start 변수에 그 때의 실행 시간을 저장합니다.
  • B 버튼을 누르면, start 그 때의 실행 시간에서 time 변수에 저장되어있던 실행 시간을 뺍니다. 그렇게하면 스톱 워치를 누른 이후 흐른 시간을 알 수 있습니다. 그 시간을 time 변수에 더해 누적합니다.
  • 터치 로고를 누르면, 총 누적 시간을 LED 화면에 출력해 보여줍니다. 밀리초 단위의 시간을 1000으로 나누어 초 단위 시간으로 변환합니다. (1 초는 1000 밀리초 입니다.) 정수 나누기 연산자를 사용하기 때문에 그 결과 값도 소숫점 아래에 수가 없는 온수(whole number)인 정수(integer)로 만들어 진다.
  • 프로그램에서는 참/거짓 불 변수에 의해서 프로그램의 실행이 제어됩니다. running 변수에 저장되어있는 참/거짓 값에 의해서 프로그램의 실행이 달라지는 것입니다. 불(boolean) 변수에는 2가지 값 중 하나만 저장할 수 있습니다.: 참(true) 또는 거짓(false) 값만 저장할 수 있습니다. 만약, running 변수에 저장되어 있는 값이 참(true) 이라면, 스톱 워치의 시간 측정이 시작된 것입니다. running 변수에 저장되어 있는 값이 거짓(false) 라면, 스톱 워치의 시간 측정이 시작되지 않았거나 정지되어 있는 것입니다.
  • 만얀, running 변수에 저장되어 있는 값이 참(true)이라면, 반복 실행 구조에 의해서 두근 거리는 하트 애니메이션이 LED 화면에 나타나게 됩니다.
  • 스톱 워치 기능으로 측정된 시간은 터치 로고를 눌렀을 때만 화면에 나타날 것입니다. running 변수에 저장되어 있는 값이 참(true) 이 아니어야 합니다. 즉 참의 반대(not) 가 되어야 합니다.
  • 프로그램에서는 B 버튼을 눌러서 스톱 워치의 시간 측정을 시작시켰을 때만 time 변수에 시간을 저장하도록 해서 시간을 잘못 기록하지 않도록 했다. running 변수에 저장되어 있는 값이 참(true) 일 때에만, 시간이 기록된다.

준비물

  • 소리 기능이 있는 신형 micro:bit (또는 MakeCode 시뮬레이터)
  • MakeCode 또는 Python 편집기
  • AAA 배터리 팩 (옵션)

2단계: 프로그래밍 해보세요.

1from microbit import *
2time = 0
3start = 0
4running = False
5
6while True:
7    if running:
8        display.show(Image.HEART)
9        sleep(300)
10        display.show(Image.HEART_SMALL)
11        sleep(300)
12    else:
13        display.show(Image.ASLEEP)
14    if button_a.was_pressed():
15        running = True
16        start = running_time()
17    if button_b.was_pressed():
18        if running:
19            time += running_time() - start
20        running = False
21    if pin_logo.is_touched():
22        if not running:
23            display.scroll(int(time/1000))

3단계: 더 좋게 만들어 보세요.

  • 프로그램을 수정해서 micro:bit 를 흔들었을 때 리셋이 되도록 만들어 보세요.
  • 정수 대신 소숫점 아래에 숫자들이 더 있는 실수를 사용해서 타이머를 더 정확하게 만들어 보세요.
  • 스톱 워치 시간이 기록되고 있을 때 로고를 터치해서, 그 때의 시간을 화면에 출력해주는 랩 타임 기능을 추가해 보세요. 하지만, 그 때의 시간은 총 누적 시간인 time 변수에는 추가되면 안 됩니다.