Mood Radio

micro:bit sending moods around

This project uses the radio to share your mood with other micro:bits. When you press A, your friends will see a smiley face. When you press B, they will see a frowny face.

Sending a smiley

The micro:bit can’t understand mood but it is pretty good with numbers. In fact, it can send numbers between micro:bits using the radio antenna, just like a phone can send text messages.

Let’s add blocks that send a number when button A is pressed. We assume that 0 is the “mood code” to send for smiley.

input.onButtonPressed(Button.A, () => {
    radio.sendNumber(0)
    basic.showIcon(IconNames.Happy)
})

Receiving a smiley

We add a ||radio:on radio received|| block that will run code whenever a new “mood” message comes in. The receivedNumber variable contains the numeric value that was sent. Since we’ve decided that 0 is smiley, we add a conditional ||logic:if then|| statement to show this icon.

radio.onDataPacketReceived( ({ receivedNumber }) =>  {
    if (receivedNumber == 0) {
        basic.showIcon(IconNames.Happy)
    }
})

Sending a frowny

Adding another mood to our messaging app done in a similar way. We decide that the “mood code” of 1 means frowny. We can add a B button event that sends that code.

input.onButtonPressed(Button.B, () => {
    radio.sendNumber(1)
    basic.showIcon(IconNames.Sad)
})

If the ||radio:on radio received|| block, we add another conditional ||logic:if then|| statement to handle the frowny “mood code”.

radio.onDataPacketReceived( ({ receivedNumber }) =>  {
    if (receivedNumber == 0) {
        basic.showIcon(IconNames.Happy)
    }
    if (receivedNumber == 1) {
        basic.showIcon(IconNames.Sad)
    }
})

That’s it. Download your code to multiple micro:bits and try it out!

Challenges

Try adding a new code and use the ||input:on shake|| event to send it.

Full sources

input.onButtonPressed(Button.A, () => {
    radio.sendNumber(0)
    basic.showIcon(IconNames.Happy)
})
input.onButtonPressed(Button.B, () => {
    radio.sendNumber(1)
    basic.showIcon(IconNames.Sad)
})
radio.onDataPacketReceived( ({ receivedNumber }) =>  {
    if (receivedNumber == 0) {
        basic.showIcon(IconNames.Happy)
    }
    if (receivedNumber == 1) {
        basic.showIcon(IconNames.Sad)
    }
})
radio