Exercise Solutions
These are a solution to each exercise. There are many ways to solve a programming problem. If your program produces the required result, it solves the problem.
Your First Program
Exercise 1
| from microbit import *
# Main loop
while True:
display.scroll("Coding is fun!")
display.show(Image.HEART)
sleep(1000)
|
Exercise 2
| from microbit import *
# Main loop
while True:
display.scroll("Hello world!")
display.show(Image.HAPPY)
sleep(1000)
display.show(Image.DUCK)
sleep(1000)
|
Exercise 3
The micro:bit shows the message and the heart once, then stops. Without the while True: loop the code runs in sequence from top to bottom, reaches the end and finishes. The loop sends the program back to the top so it repeats.
Exercise 4
The micro:bit turns off when unplugged because it gets its power from the computer. When it is plugged back in, nothing happens because the program is still only on the computer. It hasn't been uploaded to the micro:bit.
Display
Exercise 1
| from microbit import *
# Main loop
while True:
display.show("Year 8", delay=500)
sleep(1000)
|
Exercise 2
| from microbit import *
# Main loop
while True:
display.show(3.14159, delay=200)
sleep(1000)
|
Exercise 3
| from microbit import *
# Setup
display.show(3.14159, delay=500, loop=True)
|
Exercise 4
| from microbit import *
# Main loop
while True:
display.show(Image.HEART)
sleep(200)
display.show(Image.HEART_SMALL)
sleep(200)
display.show(Image.HEART)
sleep(200)
display.show(Image.HEART_SMALL)
sleep(600)
|
Exercise 5
| from microbit import *
# Main loop
while True:
display.show(Image.ALL_CLOCKS, delay=500)
|
Exercise 6
| from microbit import *
# Main loop
while True:
display.show(Image.DIAMOND_SMALL)
sleep(200)
display.show(Image.SQUARE_SMALL)
sleep(200)
|
Exercise 7
The pixels flash on and off too quickly to see. The micro:bit runs much faster than our eyes can follow, so each pixel is cleared almost as soon as it is turned on. sleep(50) keeps each pixel lit long enough to be seen.
Exercise 8
| from microbit import *
# Setup
display.clear()
# Main loop
while True:
for y in range(5):
for x in range(5):
display.set_pixel(x, y, 9)
sleep(50)
display.clear()
|
Exercise 9
| from microbit import *
# Setup
glasses = Image("05050:"
"99999:"
"05050:"
"90009:"
"09990")
# Main loop
while True:
display.show(glasses)
sleep(1000)
|
Exercise 1
| from microbit import *
import random
# Setup
target = random.randint(5, 15)
# Main loop
while True:
display.scroll("Press A " + str(target) + " times")
button_a.get_presses()
display.show(Image.YES)
sleep(5000)
presses = button_a.get_presses()
if presses >= target:
display.show(Image.HAPPY)
else:
display.show(Image.SAD)
sleep(2000)
target = random.randint(5, 15)
|
Exercise 2
| from microbit import *
# Setup
count = 0
# Main loop
while True:
if button_a.was_pressed():
count = count + 1
if button_b.was_pressed():
count = 0
display.show(count)
|
Exercise 3
| from microbit import *
import random
# Main loop
while True:
target = random.choice(["A", "B"])
for number in [3, 2, 1]:
display.show(number)
sleep(1000)
display.show(target)
button_a.was_pressed()
button_b.was_pressed()
start = running_time()
while True:
if target == "A" and button_a.was_pressed():
break
if target == "B" and button_b.was_pressed():
break
reaction = running_time() - start
display.scroll(str(reaction) + "ms")
sleep(1000)
|
Exercise 4
| from microbit import *
import random
# Main loop
while True:
pattern = ""
for i in range(6):
pattern = pattern + random.choice(["A", "B"])
display.scroll(pattern)
display.show("?")
button_a.was_pressed()
button_b.was_pressed()
guess = ""
while len(guess) < 6:
if button_a.was_pressed():
guess = guess + "A"
display.show("A")
if button_b.was_pressed():
guess = guess + "B"
display.show("B")
if guess == pattern:
display.show(Image.HAPPY)
else:
display.show(Image.SAD)
sleep(2000)
|
Accelerometer
Exercise 1
Readings between -100 and 100 count as level. Change this range to make the level more or less sensitive.
| from microbit import *
# Main loop
while True:
x = accelerometer.get_x()
if x > 100:
display.show("L")
elif x < -100:
display.show("R")
else:
display.show("-")
sleep(100)
|
Exercise 2
| from microbit import *
# Main loop
while True:
if accelerometer.is_gesture("face up"):
display.show(Image.HAPPY)
else:
display.show(Image.ANGRY)
|
Exercise 3
| from microbit import *
# Main loop
while True:
display.show(Image.YES)
accelerometer.get_gestures()
sleep(5000)
gestures = accelerometer.get_gestures()
shakes = gestures.count("shake")
display.scroll(shakes)
sleep(1000)
|
Exercise 4
| from microbit import *
# Main loop
while True:
if button_a.was_pressed():
if accelerometer.was_gesture("3g"):
display.show(Image.YES)
else:
display.show(Image.NO)
|
Temperature
Exercise 1
| from microbit import *
# Setup
lowest = temperature()
highest = temperature()
# Main loop
while True:
temp = temperature()
if temp < lowest:
lowest = temp
if temp > highest:
highest = temp
if button_a.was_pressed():
display.scroll(lowest)
if button_b.was_pressed():
display.scroll(highest)
sleep(2000)
|
Exercise 2
| from microbit import *
# Main loop
while True:
temp = temperature()
if temp > 22:
display.show(Image.ARROW_N)
elif temp < 20:
display.show(Image.ARROW_S)
else:
display.show(Image.HAPPY)
sleep(1000)
|
Light Sensor
Exercise 1
| from microbit import *
# Setup
last_light = display.read_light_level()
# Main loop
while True:
sleep(2000)
light = display.read_light_level()
if light > last_light:
display.show(Image.ARROW_N)
elif light < last_light:
display.show(Image.ARROW_S)
last_light = light
|
Exercise 2
The display is cleared before each reading, because lit LEDs affect the light reading.
| from microbit import *
# Setup
all_on = Image("99999:99999:99999:99999:99999")
# Main loop
while True:
display.clear()
sleep(10)
light = display.read_light_level()
if light < 100:
display.show(all_on)
sleep(1000)
|
Compass
Exercise 1
Headings from 338° to 22° count as North.
| from microbit import *
# Main loop
while True:
heading = compass.heading()
if heading > 337 or heading < 23:
display.show("N")
else:
display.clear()
sleep(100)
|
Exercise 2
Adding 22 then dividing by 45 splits the 360° circle into eight 45° slices centred on each direction.
| from microbit import *
# Setup
points = ["N", "NE", "E", "SE", "S", "SW", "W", "NW"]
# Main loop
while True:
if button_a.was_pressed():
heading = compass.heading()
index = ((heading + 22) // 45) % 8
display.scroll(points[index])
|
Exercise 3
| from microbit import *
# Main loop
while True:
field = compass.get_field_strength()
display.scroll(field // 1000)
sleep(500)
|
Exercise 4
Test your magnet first with the get_field_strength() example, then change 500000 to suit it.
| from microbit import *
# Main loop
while True:
field = compass.get_field_strength()
if field > 500000:
display.show(Image.HAPPY)
else:
display.show(Image.ANGRY)
sleep(100)
|
Touch
Exercise 1
| from microbit import *
# Setup
pin0.set_touch_mode(pin0.CAPACITIVE)
pin2.set_touch_mode(pin2.CAPACITIVE)
x = 2
# Main loop
while True:
if pin2.is_touched() and x < 4:
x = x + 1
if pin0.is_touched() and x > 0:
x = x - 1
display.clear()
display.set_pixel(x, 2, 9)
sleep(200)
|
Sound
Exercise 1
This plays the opening of "Mary Had a Little Lamb".
| from microbit import *
import music
# Setup
tune = ["E4:4", "D4:4", "C4:4", "D4:4",
"E4:4", "E4:4", "E4:8",
"D4:4", "D4:4", "D4:8",
"E4:4", "G4:4", "G4:8"]
# Main loop
while True:
music.play(tune)
sleep(1000)
|
Exercise 2
This depends on your College Song. Use speech.sing() with a pitch number before each sound, as in the sing() example.
Exercise 3
sound_level() goes from 0 to 255. Dividing by 51 gives a number of rows from 0 to 5.
| from microbit import *
# Main loop
while True:
level = microphone.sound_level()
rows = level // 51
display.clear()
for y in range(rows):
for x in range(5):
display.set_pixel(x, 4 - y, 9)
sleep(100)
|
Radio
Exercise 1
Press A on one micro:bit to give it the image to start.
| from microbit import *
import radio
# Setup
radio.config(group=7)
radio.on()
has_image = False
# Main loop
while True:
if button_a.was_pressed():
has_image = True
if has_image:
display.show(Image.DUCK)
if accelerometer.was_gesture("shake"):
radio.send("catch")
has_image = False
display.clear()
if radio.receive() == "catch":
has_image = True
|
Exercise 2
| from microbit import *
import radio
# Setup
radio.config(group=23)
radio.on()
# Main loop
while True:
if button_a.was_pressed():
radio.send("yes")
if button_b.was_pressed():
radio.send("no")
answer = radio.receive()
if answer == "yes":
display.show(Image.YES)
sleep(500)
display.clear()
elif answer == "no":
display.show(Image.NO)
sleep(500)
display.clear()
|
Exercise 3
Outside micro:bit
| from microbit import *
import radio
# Setup
radio.config(group=42)
radio.on()
# Main loop
while True:
radio.send(str(temperature()))
sleep(5000)
|
Inside micro:bit
| from microbit import *
import radio
# Setup
radio.config(group=42)
radio.on()
outside = "?"
# Main loop
while True:
message = radio.receive()
if message:
outside = message
if button_a.was_pressed():
display.scroll(temperature())
if button_b.was_pressed():
display.scroll(outside)
|
Atmospheric Sensor
Exercise 1
| from microbit import *
from PiicoDev_BME280 import PiicoDev_BME280
# Setup
sensor = PiicoDev_BME280()
# Main loop
while True:
temp, pressure, humidity = sensor.values()
if button_a.was_pressed():
display.scroll(round(temp))
if button_b.was_pressed():
display.scroll(round(humidity))
|
Exercise 2
| from microbit import *
from PiicoDev_BME280 import PiicoDev_BME280
# Setup
sensor = PiicoDev_BME280()
last_height = sensor.altitude()
# Main loop
while True:
if button_a.was_pressed():
height = sensor.altitude()
change = round(height - last_height, 1)
display.scroll(change)
last_height = height
|
Colour Sensor
Exercise 1
white is the amount of ambient light in lux. cct is the colour temperature in kelvin: lower numbers are warmer (more orange) light, higher numbers are cooler (more blue) light.
| from microbit import *
from PiicoDev_VEML6040 import PiicoDev_VEML6040
# Setup
sensor = PiicoDev_VEML6040()
# Main loop
while True:
print(sensor.readRGB())
sleep(1000)
|
Exercise 2
classifyHue() returns None when it can't decide, so the if colour: check skips those readings.
| from microbit import *
from PiicoDev_VEML6040 import PiicoDev_VEML6040
# Setup
sensor = PiicoDev_VEML6040()
# Main loop
while True:
colour = sensor.classifyHue()
if colour:
display.show(colour[0].upper())
sleep(500)
|
Distance Sensor
Exercise 1
| from microbit import *
from PiicoDev_VL53L1X import PiicoDev_VL53L1X
# Setup
sensor = PiicoDev_VL53L1X()
# Main loop
while True:
if button_a.was_pressed():
display.scroll(sensor.read())
|
Real Time Clock
Exercise 1
"{:02}".format() adds a leading zero, so 9 minutes shows as 09.
| from microbit import *
from PiicoDev_RV3028 import PiicoDev_RV3028
# Setup
rtc = PiicoDev_RV3028()
# Main loop
while True:
if button_a.was_pressed():
rtc.getDateTime()
display.scroll("{:02}:{:02}".format(rtc.hour, rtc.minute))
if button_b.was_pressed():
rtc.getDateTime()
display.scroll("{}/{}/{}".format(rtc.day, rtc.month, rtc.year))
|
Exercise 2
| from microbit import *
from PiicoDev_RV3028 import PiicoDev_RV3028
# Setup
rtc = PiicoDev_RV3028()
# Main loop
while True:
if button_a.was_pressed():
rtc.getDateTime()
if rtc.hour < 12:
display.scroll("Good morning")
elif rtc.hour < 18:
display.scroll("Good afternoon")
else:
display.scroll("Good evening")
|
3x RGB LED
Exercise 1
| from microbit import *
from PiicoDev_RGB import PiicoDev_RGB
# Setup
leds = PiicoDev_RGB()
red = [255, 0, 0]
amber = [255, 100, 0]
green = [0, 255, 0]
# Main loop
while True:
leds.clear()
leds.setPixel(2, green)
leds.show()
sleep(3000)
leds.clear()
leds.setPixel(1, amber)
leds.show()
sleep(1000)
leds.clear()
leds.setPixel(0, red)
leds.show()
sleep(3000)
|
Exercise 2
| from microbit import *
from PiicoDev_RGB import PiicoDev_RGB
# Setup
leds = PiicoDev_RGB()
# Main loop
while True:
temp = temperature()
if temp < 20:
leds.fill([0, 0, 255])
elif temp <= 25:
leds.fill([0, 255, 0])
else:
leds.fill([255, 0, 0])
sleep(1000)
|