左側のマイクロビット「宝」を家のどこかに隠し、右側のマイクロビットが「レーダー」で、LEDと音を頼りに宝を探します。
レーダーは、電波強度(宝までの距離)を25段階に変換し、対応した位置のLEDを光らせます。
宝が最も遠いとき左上のLEDが点灯し、近くなるほど右側へ、もっと近くなると一段下がって、というようになっています。宝が最も近いと右下のLEDが点灯することになります。
「子供の科学」という僕の大好きな雑誌の、youtube チャンネル、
【プログラミングで宝探し!】micro:bit探検ウォッチキットでそんなことまでできちゃう!?
のアイディアを見てなるほど!と思い、僕も作ってみました。
マイクロビットのプログラムは、
ブロックベースでも、javascript でもどちらでも書くことができて、
いつでも切り替えることができるのですが、今回はじめてjavascript の方を使ってみました。
数式があったりすると、こっちの方が断然らくちんです。
マイクロビット1「宝」のプログラムです。
Aボタンを押すと電波発信、Bボタンで停止します。
let _1なら発信 = 0
input.onButtonPressed(Button.A, function () {
_1なら発信 = 1
while (_1なら発信 == 1) {
radio.sendNumber(0)
basic.showLeds(`
. . . . .
. . . . .
. . # . .
. . . . .
. . . . .
`)
basic.pause(100)
basic.clearScreen()
basic.pause(900)
}
})
input.onButtonPressed(Button.B, function () {
_1なら発信 = 0
basic.clearScreen()
})
radio.setGroup(1)
basic.forever(function () {
})
マイクロビット2「レーダー」のプログラムです。
ボタンAを押すと音も出て、ボタンBを押すと音が出なくなります。
let tone = 0
let y = 0
let x = 0
let val = 0
let b = 0
let a = 0
let signal = 0
let isSound = 0
input.onButtonPressed(Button.B, function () {
isSound = 0
})
radio.onReceivedNumber(function (receivedNumber) {
signal = radio.receivedPacket(RadioPacketProperty.SignalStrength)
signal = -1 * signal
sig2val222()
led.plot(x, y)
if (isSound == 1) {
tone = (25 - val) * 400
music.playTone(tone, music.beat(BeatFraction.Sixteenth))
}
basic.pause(100)
basic.clearScreen()
})
function sig2val222() {
a = -24 / (100 - 44)
b = -100 * a
val = a * signal + b
val = Math.round(val)
x = val % 5
y = Math.floor(val / 5)
if (y > 4) {
y = 4
}
}
input.onButtonPressed(Button.A, function () {
isSound = 1
})
isSound = 1
radio.setGroup(1)
microbit、プログラムを紹介するには、javascript の方が断然便利ですね。なるほど~。scratch もそうなっているといいなぁ。