I had a 10k potentiometer lying around that I saved from some junked electronics – it may have been a volume control or something, I can’t remember. Today I found a use for it when I found this excellent web site called Microbit Playground. This shows you how you can hook a pot straight up to a microbit and take readings with a bit of Python. You connect the centre pin of the potentiometer to microbit pin 0, and the other 2 pins are connected to GND and 3v on the microbit. I just used some crocodile clip leads.
I found the code to change the brightness of a dot on the screen needed an int() adding to line 5 so it reads
brightness = int((pin0.read_analog() / 1023) * 9)
I decided to play around with this and did the following:
First I made the display get dimmer or brighter depending on the position of the potentiometer:
Then I made a level graphic go up or down depending on its position in 10 increments:
Next I made a phone-style wedge that goes up & down when you wiggle the knob (just a little bit).
Then with just ONE line of Python I added an analogue paddle controller to my totes awesome Kettle Run game to make… PotKettleRun! (See what I did there? I’m here all week.)
Finally, I wired up a microbit to a fader from an old BBC radio studio mixing desk. This was the main gain fader from BBC World Service studio S36 in Bush House, London. This was a lovely BBC-designed and built DK4/19 mixing desk which we auctioned off for charity in bits when it was dismantled. Note the non-linearity of the fade – one of the nice things about this desk was the sensitivity at low levels allowing for tasteful fades when some other faders fall off a cliff as you get close to 0.
In the highly unlikely event you have a Penny & Giles type 1520/C136/188 fader which you want to wire up to a microbit, the white wire goes to pin 0, green to GND and the brown one to 3v on the microbit:
All Python code at the end of this post. If you make a 2-player Pong game with real physical paddles before me, let me know!
All the Code that’s Fit to Print
Brighter/dimmer screen:
from microbit import *
img0 = Image("00000:"
"00000:"
"00000:"
"00000:"
"00000")
img1 = Image("11111:"
"11111:"
"11111:"
"11111:"
"11111")
img2 = Image("22222:"
"22222:"
"22222:"
"22222:"
"22222")
img3 = Image("33333:"
"33333:"
"33333:"
"33333:"
"33333")
img4 = Image("44444:"
"44444:"
"44444:"
"44444:"
"44444")
img5 = Image("55555:"
"55555:"
"55555:"
"55555:"
"55555")
img6 = Image("66666:"
"66666:"
"66666:"
"66666:"
"66666")
img7 = Image("77777:"
"77777:"
"77777:"
"77777:"
"77777")
img8 = Image("88888:"
"88888:"
"88888:"
"88888:"
"88888")
img9 = Image("99999:"
"99999:"
"99999:"
"99999:"
"99999")
img_list = [img0,img1,img2,img3,img4,img5,img6,img7,img8,img9]
while True:
brightness = int((pin0.read_analog() / 1023) * 9)
display.show(img_list[brightness])
sleep(10)
Levels going up & down
from microbit import *
img0 = Image("00000:"
"00000:"
"00000:"
"00000:"
"00000")
img1 = Image("00000:"
"00000:"
"00000:"
"00000:"
"55555")
img2 = Image("00000:"
"00000:"
"00000:"
"00000:"
"99999")
img3 = Image("00000:"
"00000:"
"00000:"
"55555:"
"99999")
img4 = Image("00000:"
"00000:"
"00000:"
"99999:"
"99999")
img5 = Image("00000:"
"00000:"
"55555:"
"99999:"
"99999")
img5 = Image("00000:"
"00000:"
"99999:"
"99999:"
"99999")
img6 = Image("00000:"
"55555:"
"99999:"
"99999:"
"99999")
img7 = Image("00000:"
"99999:"
"99999:"
"99999:"
"99999")
img8 = Image("55555:"
"99999:"
"99999:"
"99999:"
"99999")
img9 = Image("99999:"
"99999:"
"99999:"
"99999:"
"99999")
img_list = [img0,img1,img2,img3,img4,img5,img6,img7,img8,img9]
while True:
brightness = int((pin0.read_analog() / 1023) * 10)
display.show(img_list[brightness])
sleep(10)
Signal-strength type wedge display:
from microbit import *
img0 = Image("00000:"
"00000:"
"00000:"
"00000:"
"00000")
img1 = Image("00000:"
"00000:"
"00000:"
"00000:"
"50000")
img2 = Image("00000:"
"00000:"
"00000:"
"00000:"
"90000")
img3 = Image("00000:"
"00000:"
"00000:"
"05000:"
"95000")
img4 = Image("00000:"
"00000:"
"00000:"
"09000:"
"99000")
img5 = Image("00000:"
"00000:"
"00500:"
"09500:"
"99500")
img5 = Image("00000:"
"00000:"
"00900:"
"09900:"
"99900")
img6 = Image("00000:"
"00050:"
"00950:"
"09950:"
"99950")
img7 = Image("00000:"
"00090:"
"00990:"
"09990:"
"99990")
img8 = Image("00005:"
"00095:"
"00995:"
"09995:"
"99995")
img9 = Image("00009:"
"00099:"
"00999:"
"09999:"
"99999")
img_list = [img0,img1,img2,img3,img4,img5,img6,img7,img8,img9]
while True:
brightness = int((pin0.read_analog() / 1023) * 10)
display.show(img_list[brightness])
sleep(10)
PotKettleRun game
# PotKettleRun: guide your ship using a potentiometer
# Guide your ship to home port and put the kettle on.
# Can you do the Kettle Run in less than 12 parsecs?
# Sound commands & buttons from original game commented out
from microbit import *
import random
#from music import play, NYAN, POWER_UP, FUNERAL, JUMP_UP, JUMP_DOWN
# edit terrain blocks to make game harder
teacup1 = Image("00000:"
"99999:"
"99909:"
"99999:"
"99900")
teacup2 = Image("05000:"
"99999:"
"99909:"
"99999:"
"99900")
teacup3 = Image("00500:"
"99999:"
"99909:"
"99999:"
"99900")
def teacup_animate(times):
for x in range(times):
display.show(teacup1)
sleep(500)
display.show(teacup2)
sleep(500)
display.show(teacup3)
sleep(500)
def build_terrain(length):
canyon_lines=["00000:00005:00055:00555:00055:00005:",
"50000:55000:55500:55550:55000:",
"50005:55005:50055:50005:00005:",
"00055:00555:00005:55000:55005:50005:"]
terrainString = "00000:00000:00000:00000:"
for i in range(length):
z = random.randint(0,3)
terrainString = terrainString + canyon_lines[z]
terrainString = terrainString + "50005:55055"
terrainImage = Image(terrainString)
return terrainImage
def game_run():
global level
global crash
global speed
terrain = build_terrain(2+(level*2))
image_height = terrain.height()
ship_height = 4
for i in range(image_height):
ship_height = int((pin0.read_analog() / 1023) * 5)
# if button_a.was_pressed():
# play(JUMP_UP, wait=False)
# ship_height -= 1
# if ship_height < 0:
# ship_height = 0
# if button_b.was_pressed():
# play(JUMP_DOWN, wait=False)
# ship_height += 1
# if ship_height > 4:
# ship_height = 4
if terrain.get_pixel(ship_height, 0) == 5:
crash = True
break
terrain.set_pixel(ship_height, 0, 9)
display.show(terrain)
sleep(speed)
terrain = terrain.shift_up(1)
speed = 500
crash = False
won = False
level = 1
display.scroll('Kettle Run')
while level < 6: # increase this number to add more levels
display.show(str(level))
sleep(1000)
game_run()
if crash:
# play(FUNERAL, wait=False)
break
else:
# play(POWER_UP, wait=False)
teacup_animate(2)
display.scroll('Tea up!')
level += 1
speed -= 20 # increase this number to speed up more on each level
if not crash:
# play(NYAN, wait=False)
display.show('YOU WIN')
sleep(1000)
else:
display.show('GAME OVER')
sleep(1000)
while True:
display.scroll('Press reset to play again')
