Nu är det påsk och ska ägg gömmas. Vad sägs om lite sökhjälp från en micro:bit? I detta projekt ska vi gömma en micro:bit och söka den med en annan.
För att få flera micro:bit att prata med varandra trådlöst kommer vi använda oss av radio funktionen. När micro:bit tar emot ett meddelande får den också information om hur stark trådlösa signalen är. Ju närmare mico:bit är ju starkare signalen blir. På detta sättet kan vi veta om vi är nära eller inte.
För att ta reda på signalstyrkan behöver vi ta emot någonting från den gömda micro:bit. Vi är bara intresserade i signalstyrkan, och inte i vad som skickas, så det kan vara vad som helst. Till exempel kan den skicka ut ordet ”påsk”. Micro:bit skulle kunna skicka ut det hela tiden, men när ingen söker efter den känns det som slöseri med energi. Istället får den micro:bit som söker skicka ut något(t.ex. ordet ”glad”) först, och den gömda svarar då(”påsk”).
En viktig detalj med radio funktionen är att det finns olika kanaler, och man måste ställa in micro:bit till samma kanal för att kunna hitta varandra. Det kan jämföras med en vanlig radio där man ska byta till rätt frekvens för att lyssna på rätt radiostation. På micro:bit kallas det för grupp. Om vi bara gömmer en micro:bit kan vi välja en grupp (radiokanal) och lägga in det i kod. Men om vi vill gömma flera samtidigt vill vi kanske ha dom på olika kanaler, så att dom inte stör varandra, och så att vi kan söka efter en i taget. Då behövs lite extra kod för att kunna välja grupp med A och B knappen.
Gömma
Så här blir koden för gömda micro:bit. Viktigast är delen där när den tar emot någonting via radio, den svarar med ordet ”påsk” tillbaka. Och eftersom den ska gömmas visas ett ägg på skärmen.
let grupp = 0 radio.onDataPacketReceived( ({ receivedString }) => { radio.sendString("påsk") }) input.onButtonPressed(Button.A, () => { grupp += -1 if (grupp < 0) { grupp = 255 } radio.setGroup(grupp) basic.showNumber(grupp) basic.pause(500) basic.showLeds(` . . # # . . # # # # . # # # # . # # # # . . # # . `) }) input.onButtonPressed(Button.B, () => { grupp += 1 if (grupp > 255) { grupp = 0 } radio.setGroup(grupp) basic.showNumber(grupp) basic.pause(500) basic.showLeds(` . . # # . . # # # # . # # # # . # # # # . . # # . `) }) grupp = 0 radio.setGroup(grupp) basic.showLeds(` . . # # . . # # # # . # # # # . # # # # . . # # . `)
Söka
Och så här blir koden för att den micro.bit som söker. Huvuddelarna av programmet här är där den för alltid skickar ut ordet ”glad” (med en liten paus för att invänta svar), och där den visar upp en graf baserad på signalstyrkan. För att få tillgång till variabeln ”signal” ska man trycka på blåa kugghjulikonen på ”när radio mottages”-blocket och dra in den. Enheten som signalstyrkan kommer anges i är decibel(dB). Kanske man känner igen det från ljudstyrka, som det också används till. När signalen är svag blir värden den runt -90, och när den är riktig stark är den runt -50. För att kunna visa upp det som en graf blir det lite matte som gör det om till ett intervall från 10 till 50. Grafen kommer då tända flera pixlar när signalen blir starkare.
let grupp = 0 radio.onDataPacketReceived(({ receivedString, signal }) => { led.plotBarGraph( 100 + signal, 50 ) }) input.onButtonPressed(Button.A, () => { grupp += -1 if (grupp < 0) { grupp = 255 } basic.showNumber(grupp) radio.setGroup(grupp) }) input.onButtonPressed(Button.B, () => { grupp += 1 if (grupp > 255) { grupp = 0 } basic.showNumber(grupp) radio.setGroup(grupp) }) grupp = 0 radio.setGroup(grupp) basic.forever(() => { radio.sendString("glad") basic.pause(500) })