Teleportera ankor!

I detta projekt ska vi teleportera ankor och andra djur mellan olika micro:bits! Framtiden är nu.

Skicka en anka

Du kommer behöva (minst) två micro:bits för detta projekt. Första steget är att en anka ska skickas från en micro:bit till en annan, trådlöst, när vi trycker på knapp A. Så vi börjar med att visa en anka när micro:bit startas. Lägg ett ”visa ikon”-block i ”vid start” och välj ikonen med en anka. Sen ska vi ha en ”när knapp A trycks”-block (från Input kategorin). Vad ska hända där? Först tar vi bort ankan genom att rensa skärmen, och sen ska vi skicka ett sträng-meddelande (=bit av text) trådlöst med radio funktionen. Nästa steg är att ta emot strängen (textbiten) via radio, och då visa en ank-ikon.

input.onButtonPressed(Button.A, () => {
 radio.sendString("anka")
 basic.clearScreen()
})
radio.onDataPacketReceived( ({ receivedString }) => {
 basic.showIcon(IconNames.Duck)
})
basic.showIcon(IconNames.Duck)

Länk till koden.

Denna kod ska du nu antingen testa i simulatorn, eller ladda ner till två micro:bits (mycket roligare!). Tryck på A-knappen på en micro:bit för att få ankan att försvinna och sen dyka upp på den andra. Funkar det bra?

Slumpa ankan

Det finns bara en liten detalj, och det är att båda micro:bits börjar med att visa upp en anka (iallafall om man kör det på riktiga micro:bits, inte simulatorn). Det blir lite konstigt kanske när man vill teleportera den, för då ser det ut som den bara försvinner. Kanske vi inte alltid borde få en anka i början, men bara ibland? Vad sägs om att slumpa om vi får en anka eller inte i början? Det finns ett perfekt block i Matematik-kategorin för det, som blir slumpmässigt sant eller falskt. Den ihop med en om-sats fixar vad vi behöver.

input.onButtonPressed(Button.A, () => {
 radio.sendString("anka")
 basic.clearScreen()
})
radio.onDataPacketReceived( ({ receivedString }) => {
 basic.showIcon(IconNames.Duck)
})
if (Math.randomBoolean()) {
 basic.showIcon(IconNames.Duck)
}

Länk till koden.

Ingen tjuvlysnare

Om du har mer än två micro:bits i samma rum som kör detta program, kommer alla lyssna till varandra, och ta emot ankan. Kanske vi borde skydda oss lite mot sådana tjuvlyssnare. När man kommunicerar så här via radio ska man egentligen välja vilken kanal, eller ”grupp”, man skickar och lyssnar på. Bara dom som lyssnar på samma kanal kan ta emot vad vi skickar. Så det kan vara bra att välja någon kanal för dina program, och inte berätta det för dina grannar, så att dom inte (lika lätt) kan ta emot din anka. Gör detta i början av din kod, med ”radio ställ in grupp”-blocket, och välj något mellan 0 och 255.

input.onButtonPressed(Button.A, () => {
 radio.sendString("anka")
 basic.clearScreen()
})
radio.onDataPacketReceived( ({ receivedString }) => {
 basic.showIcon(IconNames.Duck)
})
radio.setGroup(238)
if (Math.randomBoolean()) {
 basic.showIcon(IconNames.Duck)
}

Länk till koden.

Teleportera alla djur!

Kan vi teleportera mer än bara ankor? Javisst! Kavla upp dina ärmarna, nu kör vi hårt. I nästa versionen får man inget djur från början, men måste man skaka på micro:bit för att få ett slumpmässigt djur (på liknande sätt som hur man kan bygga en tärning). Vilket djur du får ska vi komma ihåg ett tag, så det sparar vi som text i en varabel som vi skapar och kallar ”djur”.  Sen använder vi ”för alltid”-loopen för att hela tiden visa det djuret vi har (om vi ens har ett). När vi trycker på A-knappen skickas texten på vilket djur vi har, och sen töms ”djur”-variabeln, så att vi inte har kvar ett djur. När man tar emot ett djur via radio sparas det i ”djur”-variabeln. Det är som magi! Förutom då att vi kan se hur det funkar.

let slumptal = 0
let djur = ""
input.onGesture(Gesture.Shake, () => {
 slumptal = Math.random(5)
 if (slumptal == 0) {
 djur = "anka"
 }
 if (slumptal == 1) {
 djur = "giraff"
 }
 if (slumptal == 3) {
 djur = "kanin"
 }
 if (slumptal == 4) {
 djur = "orm"
 }
})
input.onButtonPressed(Button.A, () => {
 radio.sendString(djur)
 djur = ""
 basic.clearScreen()
})
radio.onDataPacketReceived( ({ receivedString }) => {
 djur = receivedString
})
radio.setGroup(238)
basic.forever(() => {
 if (djur == "anka") {
 basic.showIcon(IconNames.Duck)
 }
 if (djur == "giraff") {
 basic.showIcon(IconNames.Giraffe)
 }
 if (djur == "kanin") {
 basic.showIcon(IconNames.Rabbit)
 }
 if (djur == "orm") {
 basic.showIcon(IconNames.Snake)
 }
})

Länk till koden.

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *