Try This: Negative Hour Values

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