# data[].attributes.body
function 응원받음표시 () {
    버디LED.showColor(neopixel.rgb(120, 0, 220))
    버디LED.show()
    basic.showIcon(IconNames.SmallHeart)
    basic.pause(250)
    버디LED.showColor(neopixel.rgb(180, 40, 255))
    버디LED.show()
    basic.showIcon(IconNames.Heart)
    basic.pause(350)
    키캡LED끄기()
    현재카운트표시()
}
function 버디실행 () {
    if (실행중 == false) {
        실행중 = true
        radio.sendValue("BUDDY", 버디번호)
        응원보냄표시()
        실행중 = false
    }
}
input.onButtonPressed(Button.A, function () {
    에코실행()
})
function 친구에코표시 () {
    에코LED.showColor(neopixel.rgb(0, 120, 0))
    에코LED.show()
    basic.showIcon(IconNames.Happy)
    basic.pause(400)
    키캡LED끄기()
    현재카운트표시()
}
function 키캡LED끄기 () {
    에코LED.clear()
    에코LED.show()
    버디LED.clear()
    버디LED.show()
}
function 응원보냄표시 () {
    basic.showIcon(IconNames.Heart, 0)
버디LED.showColor(neopixel.rgb(0, 0, 255))
    basic.pause(50)
    버디LED.showColor(neopixel.rgb(0, 160, 255))
    basic.pause(50)
    버디LED.showColor(neopixel.rgb(0, 255, 180))
    basic.pause(50)
    버디LED.showColor(neopixel.rgb(255, 220, 0))
    basic.pause(50)
    basic.showIcon(IconNames.SmallHeart, 0)
버디LED.showColor(neopixel.rgb(255, 100, 0))
    basic.pause(50)
    버디LED.showColor(neopixel.rgb(255, 80, 180))
    basic.pause(50)
    버디LED.showColor(neopixel.rgb(255, 0, 180))
    basic.pause(50)
    버디LED.showColor(neopixel.rgb(150, 0, 255))
    basic.pause(50)
    키캡LED끄기()
    현재카운트표시()
}
function 에코실행 () {
    if (실행중 == false) {
        실행중 = true
        내에코카운트 += 1
        radio.sendValue("ECO", 내번호)
        에코성공표시()
        실행중 = false
    }
}
input.onButtonPressed(Button.B, function () {
    버디실행()
})
radio.onReceivedValue(function (name, value) {
    if (실행중 == false) {
        if (name == "ECO" && value != 내번호) {
            실행중 = true
            친구에코표시()
            실행중 = false
        }
        if (name == "BUDDY" && value == 내번호) {
            실행중 = true
            응원받음표시()
            실행중 = false
        }
    }
})
function 에코성공표시 () {
    basic.showIcon(IconNames.Yes, 0)
에코LED.showColor(neopixel.rgb(0, 255, 0))
    basic.pause(50)
    에코LED.showColor(neopixel.rgb(120, 255, 0))
    basic.pause(50)
    에코LED.showColor(neopixel.rgb(255, 220, 0))
    basic.pause(50)
    에코LED.showColor(neopixel.rgb(255, 100, 0))
    basic.pause(50)
    basic.showIcon(IconNames.Happy, 0)
에코LED.showColor(neopixel.rgb(255, 0, 0))
    basic.pause(50)
    에코LED.showColor(neopixel.rgb(255, 0, 180))
    basic.pause(50)
    에코LED.showColor(neopixel.rgb(0, 0, 255))
    basic.pause(50)
    에코LED.showColor(neopixel.rgb(0, 255, 160))
    basic.pause(50)
    키캡LED끄기()
    현재카운트표시()
}
function 현재카운트표시 () {
    basic.showNumber(내에코카운트)
}
let 내에코카운트 = 0
let 실행중 = false
let 버디LED: neopixel.Strip = null
let 에코LED: neopixel.Strip = null
let 버디번호 = 0
let 내번호 = 0
내번호 = 1
버디번호 = 2
let 에코버튼대기 = true
let 버디버튼대기 = true
에코LED = neopixel.create(DigitalPin.P14, 1, NeoPixelMode.RGB)
버디LED = neopixel.create(DigitalPin.P15, 1, NeoPixelMode.RGB)
radio.setGroup(23)
에코LED.setBrightness(150)
버디LED.setBrightness(150)
키캡LED끄기()
현재카운트표시()
basic.forever(function () {
    if (pins.digitalReadPin(DigitalPin.P0) == 1 && 에코버튼대기 == true) {
        에코버튼대기 = false
        에코실행()
    }
    if (pins.digitalReadPin(DigitalPin.P0) == 0) {
        에코버튼대기 = true
    }
    if (pins.digitalReadPin(DigitalPin.P1) == 1 && 버디버튼대기 == true) {
        버디버튼대기 = false
        버디실행()
    }
    if (pins.digitalReadPin(DigitalPin.P1) == 0) {
        버디버튼대기 = true
    }
    basic.pause(20)
})

# data[].attributes.headline
정답: 에코버디의 기능과 구현

# data[].attributes.subject
정답: 에코버디의 기능과 구현

# data[].attributes.body
ECO

- P0 입력 → 내 ECO 횟수 +1

- P14 초록빛 + 화면 표시

- Radio로 이름 ECO, 값 내번호 전송

BUDDY

- P1 입력 → 버디번호 전송

- P15 파랑·보라빛 + 하트

- Radio로 이름 BUDDY, 값 버디번호 전송

받기

- 이름이 ECO이고 값이 내번호와 다르면 친구 ECO 표시

- 이름이 BUDDY이고 값이 내번호이면 응원받음 표시

공통

- Radio 그룹 23

- A=ECO, B=BUDDY 시험

- 버튼을 떼어야 다시 실행

- 실행중 변수로 표시 겹침 방지

# data[].attributes.body
1. https://makecode.microbit.org/ 에 접속합니다.

2. 첫 화면의 가져오기 → 파일 가져오기를 누릅니다.

3. 자기 번호의 .hex 파일을 선택합니다.

4. 코드를 확인한 뒤 micro:bit를 USB로 연결합니다.

5. 다운로드를 눌러 전송하거나, 내려받은 .hex 파일을 MICROBIT 드라이브에 복사합니다.

파일 이름의 student_번호를 꼭 확인하세요.

# data[].attributes.body
01번 학생용 코드를 MakeCode 블록으로 연 화면입니다. 확대해서 코드의 전체 흐름을 확인하세요.

# data[].attributes.headline
01. 에코버디에 넣고 싶은 기능

# data[].attributes.subject
01. 에코버디에 넣고 싶은 기능

# data[].attributes.body
에코버디를 언제, 누가, 어떻게 사용할지 자유롭게 상상해 보세요.

필요하다고 생각한 기능을 떠올리고, 그 기능이 필요한 까닭을 짧게 적어 봅니다. 정해진 답은 없습니다.

# data[].attributes.body
패들렛: 발명교실.웹.한국 MakeCode: https://makecode.microbit.org/ 오늘의 목표 작은 친환경 행동을 기록하고 친구와 응원하며, 분리배출 게임에 활용하는 에코버디를 만듭니다. micro:bit의 기능을 먼저 체험하고, 필요한 기능과 구현 방법을 예상한 뒤 완성합니다.

# data[].attributes.body
학생용 url

https://kahoot.it

# data[].attributes.body
오늘 수업에서 함께 볼 자료입니다.

# data[].attributes.body
PPT가 열리지 않을 때 보는 PDF 자료입니다.

# data[].attributes.body
MakeCode: https://makecode.microbit.org/

새 프로젝트를 열고 왼쪽의 기본·입력·음악·LED·라디오·반복·논리·변수·함수 메뉴를 살펴봅니다.

NeoPixel은 확장 → neopixel 카드를 눌러 추가하세요.

# data[].attributes.body
게임: https://게임.발명교실.웹.한국

- 화면에 나온 현재 주자만 ECO를 한 번 누릅니다.

- 알맞은 통이 DROP ZONE에 왔을 때 누릅니다.

- 판정 뒤 BUDDY로 응원합니다.

- BUDDY는 점수에 들어가지 않습니다.

팀: A 1–5 / B 6–10 / C 11–15 / D 16–20

점수: PERFECT 100 / GOOD 70 / OK 40 / MISS 0

# data[].attributes.body
직접 코딩이 어려울 때만 자기 번호와 같은 HEX 하나를 사용합니다.

학생-버디

01↔02 / 03↔04 / 05↔06 / 07↔08 / 09↔10

11↔12 / 13↔14 / 15↔16 / 17↔18 / 19↔20

MakeCode에서 열기

1. https://makecode.microbit.org/ 접속

2. 첫 화면의 가져오기 또는 편집 화면 오른쪽 위 파일 가져오기

3. 내 번호의 .hex 파일 선택

4. 가져온 뒤 블록이나 JavaScript에서 코드 확인

micro:bit에 넣기

1. micro:bit를 USB로 연결

2. .hex 파일을 MICROBIT 드라이브에 복사하거나 MakeCode에서 다운로드

3. 전송이 끝나면 외부 버튼·RGB·긴 누름·Radio 그룹 23 확인

주의: 다른 번호 파일과 교사용 99번 파일은 사용하지 않습니다.

# data[].attributes.body
02번 학생용 파일입니다. 파일 이름의 student_02를 확인하세요.

# data[].attributes.body
03번 학생용 파일입니다. 파일 이름의 student_03를 확인하세요.

# data[].attributes.body
04번 학생용 파일입니다. 파일 이름의 student_04를 확인하세요.

# data[].attributes.body
05번 학생용 파일입니다. 파일 이름의 student_05를 확인하세요.

# data[].attributes.body
06번 학생용 파일입니다. 파일 이름의 student_06를 확인하세요.

# data[].attributes.body
07번 학생용 파일입니다. 파일 이름의 student_07를 확인하세요.

# data[].attributes.body
08번 학생용 파일입니다. 파일 이름의 student_08를 확인하세요.

# data[].attributes.body
09번 학생용 파일입니다. 파일 이름의 student_09를 확인하세요.

# data[].attributes.body
10번 학생용 파일입니다. 파일 이름의 student_10를 확인하세요.

# data[].attributes.body
11번 학생용 파일입니다. 파일 이름의 student_11를 확인하세요.

# data[].attributes.body
12번 학생용 파일입니다. 파일 이름의 student_12를 확인하세요.

# data[].attributes.body
13번 학생용 파일입니다. 파일 이름의 student_13를 확인하세요.

# data[].attributes.body
14번 학생용 파일입니다. 파일 이름의 student_14를 확인하세요.

# data[].attributes.body
15번 학생용 파일입니다. 파일 이름의 student_15를 확인하세요.

# data[].attributes.body
16번 학생용 파일입니다. 파일 이름의 student_16를 확인하세요.

# data[].attributes.body
17번 학생용 파일입니다. 파일 이름의 student_17를 확인하세요.

# data[].attributes.body
18번 학생용 파일입니다. 파일 이름의 student_18를 확인하세요.

# data[].attributes.body
19번 학생용 파일입니다. 파일 이름의 student_19를 확인하세요.

# data[].attributes.body
20번 학생용 파일입니다. 파일 이름의 student_20를 확인하세요.

# data[].attributes.body
선생님용 url

https://play.kahoot.it/v2/?quizId=738fc9f9-ddf2-4dae-a417-6cda810ed966&hostId=9e4cc99f-dd89-4e93-a03c-f1f2c3757b57

# data[].attributes.body
입력은 마이크로비트가 버튼이나 주변 변화를 알아차리는 기능입니다. A/B 버튼, 흔들림, 빛 밝기, 온도 가운데 하나씩 시험해 보세요.

예: A 버튼 누를 때 → 행복 아이콘, 흔들림 감지될 때 → 빛 밝기 숫자 출력

# data[].attributes.body
출력은 마이크로비트가 결과를 보여주는 기능입니다. LED 화면, 소리, NeoPixel 빛을 각각 한 번씩 켜 보세요.

예: B 버튼 누를 때 → 하트 표시 → 도 음 연주 → NeoPixel 파란색

# data[].attributes.body
변수는 값을 기억하고, 조건은 상황에 따라 다른 동작을 고릅니다.

예: A 버튼 → score 1 증가 → score가 3 이상이면 체크 아이콘, 아니면 숫자 표시

# data[].attributes.body
반복은 같은 동작을 계속 실행하고, 함수는 여러 블록을 한 이름으로 묶습니다.

예: blink 함수에 아이콘·기다리기·화면 지우기 넣기 → 무한반복에서 blink 호출

# data[].attributes.headline
06. 라디오로 연결하기

# data[].attributes.subject
06. 라디오로 연결하기

# data[].attributes.body
두 마이크로비트의 라디오 그룹 번호를 같게 해야 서로 통신할 수 있습니다.

예: 그룹 7 설정 → A 버튼에서 “안녕” 전송 → 받은 문자열을 화면에 표시

# data[].attributes.body
버튼, 센서, 화면, 소리, NeoPixel, 변수, 조건, 반복, 함수, Radio 가운데 필요한 블록을 자유롭게 골라 작은 동작부터 시험해 보세요.

처음부터 완성하지 않아도 됩니다. 한 가지 입력과 한 가지 반응부터 연결해 봅니다.

# data[].attributes.headline
03. 고치고 다시 시험하기

# data[].attributes.subject
03. 고치고 다시 시험하기

# data[].attributes.body
내가 예상한 동작과 실제 동작이 같은지 확인합니다.

잘 되지 않으면 블록의 순서, 값, 조건을 바꾸어 다시 실행해 보세요. 다른 방법으로 같은 기능을 만들어도 좋습니다.