It’s important to note that negative hour values display the same way positive hour values do.
- Try changing for hour in range(0, 12) to for hour in range(-12, 12) and run the modified script.
Does it cycle twice and respond to a value like -2 the same way it would treat 2?
Did You Know?
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:
- 0 — Start with an angle
- 90 — Add 90 to angle
- 105 — Add 15 more (since we want -15°…14° to map to 3 o’clock)
- 3 — Integer-divide by 30 (always rounds down)
Let’s see if -16° really does map to 2 o’clock
- -16 — Start with an angle
- 74 — Add 90 to angle
- 89 — Add 15 more (since we want -15°…14° to map to 3 o’clock)
- 2 — Integer-divide by 30. The result is -2 with a remainder of 29, which rounds down to -2.
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