Micropython's Image.ALL_CLOCKS[hour] list has 12 LED patterns that resemble an analog clock hand at each hour. It can be used for more than timekeeping though. It can also point in the direction you are tilting the micro:bit! This visual feedback will be useful for tilt-controlling the cyber:bot.
First, let’s train an example script that displays each hour hand at 12, 1, 2 and all the way through 11.
# display_clock_positions from microbit import * sleep(1000) while True: for hour in range(0, 12): print("hour =", hour) display.show(Image.ALL_CLOCKS[hour]) sleep(1000)
It’s important to note that negative hour values display the same way positive hour values do.
Does it cycle twice and respond to a value like -2 the same way it would treat 2?
A script can also make your micro:bit display the angle on its LED display. Here is an example where the needle always points down.
The range of -179…180 has to be split into 12 segments for this to work. For example, we want 0° to map to 3 o’clock. But, we don’t want it to jump to 4 o’clock if it drops to -1. It would be better to have the -15°…14° map to 3 o’clock. Then, 15°…44° can map to 4 o’clock. Likewise, -16°…-45° can map to 2 o’clock.
Here is a clever statement that does all this mapping:
# Point down needle = ( angle + 90 + 15 ) // 30
Here is an example of the steps in the calculation:
Let’s see if -16° really does map to 2 o’clock
Clock values can be from -12 to 11. Any negative value, like -2 is displayed as its positive counterpart, 2 o’clock in this case.
If you want the needle to point up instead, here is the statement to do it. Instead of subtracting 90°, this statement adds 90° to angle. The difference between -90° and 90° is 180 degrees. In other words, the needle points in the opposite direction.
# Point up needle = ( angle + 90 ) + 15 ) // 30
With the tilt direction display mentioned in the Did You Know? section on the previous page, your script can display a needle that either points up or down.
# display_tilt_direction_with_leds from microbit import * import math sleep(1000) while True: x = accelerometer.get_x() y = accelerometer.get_y() angle = round( math.degrees( math.atan2(y, x) ) ) needle = ( angle + 90 + 15 ) // 30 print("angle =", angle, ", needle =", needle) display.show(Image.ALL_CLOCKS[needle]) sleep(200)
needle = ( ( angle + 90 ) + 15 ) // 30
…to a minus sign:
needle = ( ( angle - 90 ) + 15 ) // 30