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 hertz
.
Inside on start
, set hertz
to the number 520
.
Add a 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 forever
block.
Replace the number 520
with a map
block.
Map converts a number on one scale to a number at the equivalent position on another scale.
Find the acceleration (mg) x
block, and plug it into the first part of the map
block.
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).
Type -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
and 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: