PXT: Smitte:Bit
Skrevet av: Sigurd Schaathun
Introduksjon
Virus kan smitte gjennom luft, men hvor fort smitter det, og hvor lang tid tar det før en hel klasse er smittet? Vi skal simulere dette med micro:bit. Simulere betyr å etterligne og som regel forenkler vi virkeligheten. Til dette programmet trenger dere flere micro:bit som snakker sammen.
Steg 1: Radiokommunikasjon
Micro:Bit kan kommunisere med hverandre ved hjelp av radio. Først må vi få sette opp radio og teste radiokommunikasjonen. Dette programmerer vi på https://makecode.microbit.org. Start et nytt prosjekt og gi det et navn, gjerne Smittebit.
Sjekkliste
{ radio.setGroup(42) })
Koden kan se slik ut:
input.onButtonPressed(Button.A, function () { radio.sendNumber(5) }) radio.onReceivedNumber(function (receivedNumber) { basic.showNumber(receivedNumber)) })
Test prosjektet
Last inn programmet på 2 micro:biter. Det er lurt å samarbeide med en annen.
radio.setGroup(42) radio.setTransmitPower(3)
Avansert: signalstyrke
Under radio finner du også blokken mottok pakke signalstyrke
. Den gir et tall mellom -127 og -42. Et svakt signal gir en verdi nær -127, og et meget sterkt signal gir verdi -42. Ved å sjekke signalstyrken i en hvis
- løkke kan vi gjøre mottaket mindre følsomt og sikre at to micro:biter må være nær for å kunne snakke sammen.
Steg 2: Smittespredning
I dette steget skal vi sette opp en funksjon for å vise status til micro:biten, og spre smitte når man er smittet.
Sjekkliste
radio.setGroup(42) radio.setTransmitPower(7) smitte = 0 farlig = randint(2, 5) basic.showIcon(IconNames.Happy)
Tips: Rekkefølge i en hvis-løkke
Når du lager en hvis - eller-løkke med områder som inneholder andre områder du også skal sjekke (mer enn 100 er også mer enn 25), bør du begynne med det som inneholder alt, i dette tilfellet mer enn 100.
Koden kan se slik ut:
basic.forever(function () { if (smitte > 100) { basic.showIcon(IconNames.No) } else if (smitte > 50) { basic.showIcon(IconNames.Sad) radio.sendNumber(farlig) } else if (smitte > 25) { radio.sendNumber(farlig) } basic.pause(5000) }) radio.onReceivedNumber(function (receivedNumber) { smitte += receivedNumber }) input.onButtonPressed(Button.A, function () { radio.sendNumber(5) }) input.onGesture(Gesture.Shake, function () { radio.sendNumber(farlig * 3) }) input.onButtonPressed(Button.AB, function () { basic.showNumber(farlig) }) input.onButtonPressed(Button.B, function () { basic.showNumber(smitte) })
Test prosjektet
Last inn programmet på 2 micro:biter. Det er lurt å samarbeide med en annen.
Steg 3: Prøve med hele gruppen
Nå er det på tide å prøve dette med hele gruppen, men først kan vi legge inn litt mer funksjonalitet.
Sjekkliste
Det store eksperimentet
Last inn programmet på alle micro:bitene. Jo flere som er med, jo bedre er det for forsøket. Når programmet er lastet inn, kan dere ha vanlig time eller gå rundt. Pass på at det er en micro:bit som er smittet ved starten.
Utfordring
Hvordan virus smitter er avhengig av mange ting. Dette er en simulering og er sterkt forenklet. Her er den endelige koden:
radio.onReceivedNumber(function (receivedNumber) { smitte += receivedNumber basic.showNumber(radio.receivedPacket(RadioPacketProperty.SignalStrength)) }) input.onButtonPressed(Button.A, function () { smitte += -2 }) input.onGesture(Gesture.Shake, function () { radio.sendNumber(farlig * 3) }) input.onButtonPressed(Button.AB, function () { basic.showNumber(farlig) }) input.onButtonPressed(Button.B, function () { basic.showNumber(smitte) }) let farlig = 0 let smitte = 0 radio.setGroup(42) radio.setTransmitPower(7) smitte = 0 farlig = randint(2, 5) basic.showIcon(IconNames.Happy) basic.forever(function () { if (smitte > 100) { basic.showIcon(IconNames.No) } else if (smitte > 50) { basic.showIcon(IconNames.Sad) radio.sendNumber(farlig) } else if (smitte > 25) { radio.sendNumber(farlig) } basic.pause(5000) })
Lagre spillet
Vi har laget en smittesimulator og testet det. Hvis du vil ta vare på prosjektet, kan du enten dele på makecode.microbit.org - der får du en lenke, eller laste programmet ned på din datamaskin.
Forbedre denne siden
Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!