左側のマイクロビット「宝」を家のどこかに隠し、右側のマイクロビットが「レーダー」で、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 もそうなっているといいなぁ。