For this project, you will need:
Connect the micro:bit breakout board to a piezo buzzer, as shown in the diagram below.
Make a new variable called
on start, set
hertz to the number
ring tone block, and plug the
hertz variable into it.
Download the code to your microbit. When the microbit restarts, it should play a tone forever.
Let’s vary the tone when we tilt the microbit!
We’ll make it so that the lowest sound is a Middle C (260 hertz) and the highest is a High C (1040 hertz).
Remember those two numbers – they will come in useful!
Rather than setting the
hertz value only once, when then micro:bit starts up, we want to constantly update the
hertz based on the micro:bit’s current position.
So, move your code from the
on start block into the
Replace the number
520 with a
Map converts a number on one scale to a number at the equivalent position on another scale.
acceleration (mg) x block, and plug it into the first part of the
acceleration (mg) x block returns a number between
-1023 (when the microbit is tilted all the way to the left) and
+1023 (when the microbit is tilted all the way to the right).
-1023 into the
from low block, and
1023 into the
from high block.
The lowest sound we want to play is Middle C (260 hertz), so type
260 in the
to low box.
What do you think we should type into the
to high box, so that it plays a High C?
If you’re stuck, remind yourself of some of the important numbers we mentioned earlier on!
Download the code, and tilt your microbit. The tone will go up and down as you tilt the microbit to the left and right.
Now for a challenge! The microbit can detect all sorts of inputs. Can you make the tone vary based on the light level reaching your microbit?
Remember, you’ll need to change the
1023 numbers, to match the minimum and maximum values returned by the
light level block. Try Googling “microbit light level” to read the documentation for the
light level block, and see whether you can spot the minimum and maximum values!
Once you’ve made the sound change based on light level, can you work out how to make it change based on compass heading?
Just like last time, you can use Google to find out the minimum and maximum values returned by the
compass heading block.
Once you’ve done that, how might you vary the tone based on how near one microbit is to another?
The following code blocks might come in useful: