One of the quintessential projects for the micro:bit is to create a musical instrument of some sort. This usually involves implementing a crude version of a theremin, often by using a light sensor or potentiometer to control the sound. I've implemented my own take on this, using the Tinkertools Electro-Theremin tutorial as helpful inspiration.
Here's my code:
let debug = true; let nextNote = input.runningTime(); if(debug) { OLED.init(64, 128); } basic.forever(() => { let now = input.runningTime(); let roll = 90 + input.rotation(Rotation.Roll); let pitch = 90 + input.rotation(Rotation.Pitch) let right = roll / 36; let down = pitch / 36; let freq = 131 + (roll * 5); let rest = 20; let duration = pitch * 3; let fudge = pins.analogReadPin(AnalogPin.P1); basic.clearScreen(); led.plot(right, down); if(now > nextNote) { nextNote = input.runningTime() + duration + rest; music.playTone(freq + (input.buttonIsPressed(Button.A) ? fudge : 0) , duration + (input.buttonIsPressed(Button.B) ? fudge : 0)); } if(debug) { OLED.showString(roll + "/" + freq + "::" + pitch + "/" + duration + "::" + fudge); } });
(You can find the full source code here.)
I'm using the left-right roll of the micro:bit to determine the note frequency, and the forward-back pitch of the micro:bit to determine note duration. By tilting the micro:bit in various directions, you can generate different musical effects.
But wait, there's more!
I've implemented a simple UI using the 5x5 LED grid on the micro:bit. As you tilt micro:bit in the various directions, the relevant LED lights up showing how far to the left/right or forward/back you are. I also added the potentiometer that came with the Tinkercademy kit to turn the A and B buttons on the micro:bit into overrides. You can dial in a value on the potentiometer then press A to modify the current frequency or B to modify the current direction. Finally, I'm using the tiny screen that comes with the Tinkercademy kit for debugging output.
I was pleased at how accurate the data from input.rotation(...) is. And it's downright amazing how simple the Tinkercademy kit is to operate. I plugged in a few piece of hardware and was making noise in no time.
To prove this all works, check out the video below. Warning: I've got no idea how to get Gesty, the Musical Micro:Bit to, actually make pleasing music. So for now, it just makes mind numbing screeches. Enjoy!
No comments:
Post a Comment