BBC micro:bit
Bit:Commander Potentiometer

Introduction

The rotary potentiometer in middle of the board is connected to pin 0. It shares this connection with the buzzer. You have to be a little careful when using them both in the same project but, as long as you separate their use in your programs, you can do it.

The potentiometer centres with a little click and reads from 1 to 851 for me.

micro:bit circuit

Programming

This first, simple program shows how to read from the potentiometer. You can view the output in the REPL window.

from microbit import *

while True:
    reading = pin0.read_analog()
    print(reading)
    sleep(50)

There are marks on the silkscreen of the board. If you sample the readings at each of these marks, you can work out a program for a pretty exact mapping. If you allow some tolerance, +-5 or 10, you can make it easy for your user.

Rotating Clock

A quick way to map the potentiometer reading to a smaller range is to divide. This one lets you pick out all of the different positions on the clock. That makes for a selection of 0 to 11.

from microbit import *

clocks = [
    Image.CLOCK12,Image.CLOCK1,Image.CLOCK2,
    Image.CLOCK3,Image.CLOCK4,Image.CLOCK5,
    Image.CLOCK6,Image.CLOCK7,Image.CLOCK8,
    Image.CLOCK9,Image.CLOCK10,Image.CLOCK11]
    
# set pin8 to LOW for potentiometer
pin8.write_digital(0)

while True:
    reading = pin0.read_analog()//72
    display.show(clocks[reading])
    sleep(50)

Lighting Up

This program uses the same principle as the last, except it lights up a number of the Neopixels according to the dial position.

from microbit import *
import neopixel

# Initialise neopixels
npix = neopixel.NeoPixel(pin13, 6)

red = (64,0,0)
off = (0,0,0)
# set pin8 to LOW for potentiometer
pin8.write_digital(0)

while True:
    reading = pin0.read_analog()//123
    for pix in range(0, len(npix)):
        if pix<reading:
            npix[pix] = red
        else:
            npix[pix] = off
    npix.show()
    sleep(20)

Next Steps

A useful next task would be to take readings at the positions indicated on the board and work out some base codes to convert each one to a number from 0 to 6 (using zero for the min and 6 for the max positions). That would make a much improved version of the last program and a basis for using the potentiometer in future projects.