Transmitter Displays Stop Range

The only thing that needs to be added to the transmitter radio_tilt_transmit_rapid script  is an if... block that displays one of two things:

  • A diamond if the y-axis tilt is less than +/- 80
  • The tilt direction needle if the y-axis reports larger values.

Let’s try it!

Example script: radio_tilt_controller_w_stop_range

  • Set your tilt controlled cyber:bot’s 3-position switch to 0 so that it doesn’t move around during this test.
  • Make sure you are working in the browser with the micro:bit Python Editor that is connected to the radio tilt controller micro:bit.
  • Set the project name to radio_tilt_controller_w_stop_range
  • Update the script in the editor to match the one below.
  • If you are in a classroom, make sure the channel= in the script to your assigned channel.
  • Click Save, and then click Send to micro:bit.  
  • Verify that the tilt direction needle still displays, except for when you hold it close to level.  Then, it should display a diamond.
# radio_tilt_controller_w_stop_range

from microbit import *
import math
import radio

radio.on()
radio.config(channel=7, queue=1, length=64)

while True:
    x = accelerometer.get_x()
    y = accelerometer.get_y()

    angle = round( math.degrees( math.atan2(y, x) ) )
    needle = ( angle + 90 + 15 ) // 30

    if abs(y) > 80:
        display.show(Image.ALL_CLOCKS[needle])
    else:
        display.show(Image.DIAMOND_SMALL)

    dictionary = { }
    dictionary['x'] = x
    dictionary['y'] = y
    dictionary['needle'] = needle

    packet = str(dictionary)
    radio.send(packet)

    sleep(50)


How radio_tilt_controller_w_stop_range Works

The radio_tilt_controller_w_stop_range script is just radio_tilt_transmit_rapid with an if…else… statement added. 

When the absolute value of y is greater than 80, it displays the tilt direction needle, just like it has up to this point.  But, if the y value is anywhere in the -80 to 80 range, it instead displays a small diamond to tell you that your forward/backward tilt is pretty close to level.

    if abs(y) > 80:
        display.show(Image.ALL_CLOCKS[needle])
    else:
        display.show(Image.DIAMOND_SMALL)

The if abs(y) function returns the positive-only version of any value y might store.  So, if y stores -20, abs(y) returns 20.  If y stores 20, abs(y) doesn’t change anything and just returns 20.  So, if abs(y) > 80 is a concise way to check if y is outside the -80…80 range.  Another way to check if y is outside that range would be if y > 80 or y < -80.